MongoDB的ISODate()与UNIX时间戳

Jam*_*son 22 time timestamp mongodb

在MongoDB中将日期存储为ISODate()与存储为常规UNIX时间戳有什么优势(性能,索引,大小等)?

msw*_*msw 23

与time_t相比,ISODate的开销量与前者的优点相比是微不足道的.

ISO 8601格式日期是人类可读的,它可用于表示1970年1月1日之前的日期,最重要的是,它不是Y2038问题牺牲品.

最后一点不够强调.1960年,在一个世纪的数字上浪费一个或两个八位字节可能会带来任何好处,因为本世纪的转折是不可能的,这似乎是荒谬的.我们知道结果是多么错误.2038年将比您预期的更早到来,time_t已经不足以代表 - 例如 - 30年合约的付款时间表.

  • 什么是time_t?这是mongodb中的一种吗? (2认同)

mst*_*arn 20

MongoDB的内置Date类型与time_t中存储的unix时间戳非常相似.唯一的区别是日期是自1970年1月1日以来存储毫秒的64位字段,而不是自同一纪元以来存储秒数的32位字段.唯一的缺点是,对于当前版本,它将计数视为无符号,因此无法正确处理1970年之前的日期.这将在大约一个月内发布的MongoDB 2.0中修复.

可能的混淆点是名称"ISODate".它只是shell中的一个辅助函数来包装javascript的可怕Date构造函数.如果您调用"ISODate()"或"new Date()",您将返回完全相同的Date对象,我们只是更改了它的打印方式.您可以在不使用我们的构造函数的情况下自由使用正常的ISO Date stings或time_t ints,但是您将无法使用您选择的语言获得漂亮的Date对象.