mongodb 如何处理 2038 年 1 月 19 日星期二之后的 ObjectId 时间戳



根据MongoDB官方文档,它指出:

ObjectId 值由 12 个字节组成,其中前四个字节是 反映对象 ID 创建的时间戳,具体而言:

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

我只是想知道格林威治标准时间 2038 年 1 月 19 日星期二 03:14:08 会发生什么,当 unix 时间等于不符合 ObjectId 中的 4 字节时间戳的 2147483648 *philosoraptor meme*

无符号 2,147,483,648 完美地适合 4 个字节。 4 个字节足以容纳高达 4,294,967,295 的值,这是 2106 年 2 月 7 日星期日 06:28:16 GMT 的 unix 纪元。

如果 ObjectID 在此之前没有更改而幸存下来,时间戳部分将从 0 开始,如果您关心:

> new Date();
ISODate("2106-02-08T12:41:20.450Z")
> db.t.insert({welcome:"from the future"});
WriteResult({ "nInserted" : 1 })
> db.t.find().pretty();
{
    "_id" : ObjectId("0001a7b306c389186a3a9323"),
    "welcome" : "from the future"
}
> db.t.find()[0]._id.getTimestamp();
ISODate("1970-01-02T06:07:47Z")

相关内容

最新更新