为何MongoDB规范禁止访问ObjectId中的进程ID?
关于MongoDB ObjectId中5字节随机值的疑问
根据MongoDB ObjectId官方文档,ObjectId由三部分组成:
12字节的ObjectId包含:
- 4字节的时间戳,代表ObjectId的创建时间,以Unix纪元以来的秒数计算。
- 5字节的随机值,每个客户端进程生成一次。该随机值对机器和进程唯一,进程重启或主节点变更时会重新生成。
- 3字节的递增计数器,每个客户端进程单独维护,初始值为随机数,进程重启时重置。
我试图理解第二部分即5字节进程标识的用途(除避免重复外),但发现:
- Java驱动未提供便捷的访问方式;
- 据我所知,没有操作符可通过ObjectId的进程ID提取文档。
ObjectId规范中规定:
随机值
5字节字段,包含每个进程生成一次的随机值,该值对机器和进程唯一。
驱动程序不得在ObjectID类中提供获取该值的访问器方法。
我对最后一句尤为困惑:既然这5字节被指定为进程标识,为何要禁止访问?
我原本认为进程标识可用于记录同一进程中发生的事件,但这些限制似乎表明并非如此。
如果这5字节无法使用,为何不直接采用8字节计数器(而非5字节随机值+3字节计数器)?
内容的提问来源于stack exchange,提问作者CLOVIS
相关产品推荐
相关产品推荐

