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

时间:2017-02-07 18:58:36

标签: mongodb timestamp

根据MongoDB official docs,它声明:

  

ObjectId值由12个字节组成,其中前四个字节是a   反映ObjectId创建的时间戳,具体为:

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

我只是想知道什么会发生在星期二,2038年1月19日03:14:08 GMT 当unix时间等于 2147483648 适合ObjectId * philosoraptor meme中的4字节时间戳 *

1 个答案:

答案 0 :(得分:0)

无符号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")