MongoDB中的集合ID长度

ash*_*war 12 mongodb mongoid mongodb-query mongodb-.net-driver

我是mongodb和堆栈溢出的新手.

我想知道为什么mongodb集合ID是24个十六进制字符?这有什么重要意义?

Ste*_*nie 14

为什么默认_id为24个字符的十六进制字符串?

作为_idMongoDB文档的主键()生成的默认唯一标识符是ObjectId.这是一个12字节的二进制值,通常表示为24个字符的十六进制字符串,以及MongoDB BSON规范支持的标准字段类型之一.

ObjectId的12个字节使用以下内容构造:

  • 一个4字节的值,表示自Unix纪元以来的秒数
  • 一个3字节的机器标识符
  • 一个2字节的进程ID
  • 一个3字节的计数器(以随机值开始)

ObjectId的重要性是什么?

ObjectIds(或根据GUID公式生成的类似标识符)允许在分布式系统中独立生成唯一标识符.

当您扩展到多个应用程序服务器(或可能是分片集群中的多个数据库节点)时,独立生成唯一ID的能力变得非常重要.您不希望像序列计数器那样存在中央协调瓶颈(例如,您可能拥有自动递增主键),并且您将希望插入新文档而没有新标识符将成为一个新标识符的风险重复.

ObjectId通常由MongoDB 客户端驱动程序生成,但如果您的客户端驱动程序或应用程序代码或尚未添加_id字段,也可以在MongoDB服务器上生成.

我必须使用默认的ObjectId吗?

不可以.如果您有更合适的唯一标识符,您可以随时提供自己的值_id.这可以是单个值,也可以是使用多个字段的复合值.

_id值的主要限制是它们必须对于集合是唯一的,并且您无法更新或删除_id现有文档.