今天我正在做一些工作,当我注意到我的一个 MongoDB 文档中有一些奇怪的东西时:
Mongo 在 ObjectID 中拼写单词是否正常,或者这是否表明生成_id
字段的随机化存在问题?
我会密切关注这一点,但如果有人有任何关于这是否应该关注的信息,请提前感谢您的帮助。
今天我正在做一些工作,当我注意到我的一个 MongoDB 文档中有一些奇怪的东西时:
Mongo 在 ObjectID 中拼写单词是否正常,或者这是否表明生成_id
字段的随机化存在问题?
我会密切关注这一点,但如果有人有任何关于这是否应该关注的信息,请提前感谢您的帮助。
好吧,这只是一个没有认真意图的有趣的复活节彩蛋。欢迎来到 8 月 25 日。
这里纯粹的机会是“53facade”恰好对应于纪元时间:
“格林威治标准时间 2014 年 8 月 25 日星期一 05:34:22”。
纵观整个部分:
ObjectId 是一个 12 字节的 BSON 类型,使用以下方法构造:
- 一个 4 字节的值,表示自 Unix 纪元以来的秒数,
- 一个 3 字节的机器标识符,
- 一个 2 字节的进程 ID,以及
- 一个 3 字节的计数器,从一个随机值开始。
因此,开放的 4-btye 表示(在所有字符中都是有效的十六进制)是从创建时的当前时间戳值派生的,恰好是发生1408944862
这种情况的时候。
无非是巧合而且完全有效。正如您所看到的,它是标识符的“其余部分”,它决定了 ObjectId 的“随机性”和“唯一”属性,因为此时创建的所有 ObjectId 值在 1000 毫秒的时间间隔内都是相同的。
这里没有错误或弱点,只是一天中的一个有趣点。