我是 mongodb 和堆栈溢出的新手。
我想知道为什么 mongodb 集合 ID 是 24 个十六进制字符? 这有什么重要性?
最佳答案
为什么默认的 _id
是 24 个字符的十六进制字符串?
作为 MongoDB 文档的主键 (_id
) 生成的默认唯一标识符是 ObjectId .这是一个 12 字节的二进制值,通常表示为 24 个字符的十六进制字符串,是 MongoDB BSON specification 支持的标准字段类型之一。 .
ObjectId 的 12 个字节是使用以下方法构造的:
- 一个 4 字节的值,表示自 Unix 纪元以来的秒数
- 一个 3 字节的机器标识符
- 一个 2 字节的进程 ID
- 一个 3 字节的计数器(以随机值开始)
ObjectId 的重要性是什么?
ObjectIds(或根据 GUID 公式生成的类似标识符)允许在分布式系统中独立生成唯一标识符。
当您扩展到多个应用程序服务器(或者可能是 sharded cluster 中的多个数据库节点)时,独立生成唯一 ID 的能力变得非常重要。您不希望有一个像序列计数器这样的中央协调瓶颈(例如,您可能有一个自动递增的主键),并且您希望插入新文档而不会有新标识符会变成重复。
ObjectId 通常由您的 MongoDB client driver 生成,但如果您的客户端驱动程序或应用程序代码或尚未添加 _id
字段,也可以在 MongoDB 服务器上生成。
我必须使用默认的 ObjectId 吗?
没有。如果您有更合适的唯一标识符来使用,您可以随时为 _id
提供您自己的值。这可以是单个值,也可以是使用多个字段的复合值。
_id
值的主要限制是它们对于集合必须是唯一的,并且您不能更新或删除现有文档的 _id
。
关于mongodb - MongoDB中的集合ID长度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25356211/