【发布时间】:2022-11-14 18:04:08
【问题描述】:
我了解自动创建的唯一 ID 的数量是有限制的。如果我没记错的话,我想是1600万。如果唯一实体的数量增加,这是否可以扩展,或者一个用户 GUID 也可以提供更多的唯一性?
因此,如果我使用开箱即用的默认对象 _id,我可以将多少个独特的项目放入一个集合中。我读到有 12 个字节,但根据这些字节的使用方式,可能会有不同数量的唯一文档。如何计算可以存储多少个唯一文档?
【问题讨论】:
我了解自动创建的唯一 ID 的数量是有限制的。如果我没记错的话,我想是1600万。如果唯一实体的数量增加,这是否可以扩展,或者一个用户 GUID 也可以提供更多的唯一性?
因此,如果我使用开箱即用的默认对象 _id,我可以将多少个独特的项目放入一个集合中。我读到有 12 个字节,但根据这些字节的使用方式,可能会有不同数量的唯一文档。如何计算可以存储多少个唯一文档?
【问题讨论】:
理论最大值约为 7.9228162514e+28。你哪来的1600万?
实际上,ObjectID 包括
一个 4 字节的时间戳,表示 ObjectId 的创建,以自 Unix 纪元以来的秒数为单位。
每个进程生成一次的 5 字节随机值。这个随机值对于机器和过程是唯一的。
一个 3 字节递增计数器,初始化为随机值。
因此,仅 3 字节计数器就是每秒 16777216 个唯一 ID。
一个 5 字节的值将是 1.0995116277e+12 种可能性。因此,仅机器和流程的独特价值就有大约 160 亿个独特组合。
【讨论】: