【问题标题】:Are Mongo ObjectID's Supposed To Spell Words?Mongo ObjectID 是否应该拼写单词?
【发布时间】:2014-10-18 06:58:39
【问题描述】:

今天我正在做一些工作,突然发现我的一个 MongoDB 文档中有一些奇怪的东西:

Mongo 在 ObjectID 中拼写单词是否正常,或者这是否表明生成 _id 字段的随机化存在问题?

我会密切注意这一点,但如果有人知道这是否应该引起关注,请提前感谢您的帮助。

【问题讨论】:

标签: mongodb mongohq compose-db


【解决方案1】:

嗯,这只是一个没有认真意图的有趣的复活节彩蛋。欢迎来到 8 月 25 日。

这里纯粹的机会是“53facade”恰好对应于纪元时间:

“格林威治标准时间 2014 年 8 月 25 日星期一 05:34:22”。

查看整个部分:

ObjectId 是一个 12 字节的 BSON 类型,构造使用:

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

因此,开头的 4 字节表示(在所有字符中都是有效的十六进制)是从创建时的当前时间戳值派生的,恰好在发生这种情况时是 1408944862

无非是巧合而且完全有效。正如您所看到的,它是标识符的“其余部分”,它决定了 ObjectId 的“随机性”和“唯一”属性,因为此时创建的所有 ObjectId 值在 1000 毫秒的时间间隔内都是相同的。

这里没有错误或弱点,只是一天中的一个有趣的点。

【讨论】:

  • 哈。很酷。感谢尼尔的出色回答。我将以此作为更好地理解 ObjectId 的一个很好的理由。
猜你喜欢
  • 1970-01-01
  • 2011-05-30
  • 2011-05-28
  • 1970-01-01
  • 2021-07-30
  • 1970-01-01
  • 2015-05-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多