Time MongoDB';s ISODate()与UNIX时间戳

Time MongoDB';s ISODate()与UNIX时间戳,time,timestamp,mongodb,Time,Timestamp,Mongodb,将日期作为ISODate()存储在MongoDB中比将日期作为常规UNIX时间戳存储有什么好处(性能、索引、大小等)?与前者相比,ISODate的开销微不足道 ISO 8601格式的日期是人类可读的,它可以用来表示1970年1月1日之前的日期,最重要的是,它不受时间限制 这最后一点压力太大了。1960年,当世纪之交遥不可及时,在一个世纪数字上浪费一两个八重奏可能会带来任何好处,这似乎是可笑的。我们知道怎么做。2038年将比您预期的更早到来,而且时间已经不足以表示(例如)30年合同的付款计划。Mo

将日期作为ISODate()存储在MongoDB中比将日期作为常规UNIX时间戳存储有什么好处(性能、索引、大小等)?

与前者相比,ISODate的开销微不足道

ISO 8601格式的日期是人类可读的,它可以用来表示1970年1月1日之前的日期,最重要的是,它不受时间限制


这最后一点压力太大了。1960年,当世纪之交遥不可及时,在一个世纪数字上浪费一两个八重奏可能会带来任何好处,这似乎是可笑的。我们知道怎么做。2038年将比您预期的更早到来,而且时间已经不足以表示(例如)30年合同的付款计划。

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


一个可能的混淆点是名称“ISODate”。它只是外壳中的一个帮助函数,用于包装javascript可怕的日期构造函数。如果您调用“ISODate()”或“new Date()”,您将返回完全相同的日期对象,我们只是更改了它的打印方式。您仍然可以在不使用我们的构造函数的情况下自由使用正常的ISO日期戳或时间点,但您将无法使用您选择的语言返回良好的日期对象。

就我个人而言,当我在开发需要1970年1月1日之前日期的软件时,我使用的是负数。其次,我认为当他们开始使用unix时间戳时,使用int表示时间的想法非常好,并且适用于当时的计算机类型。我认为在现代,我们可以用两种方法轻松解决这个问题。首先,我们可以用Long代替Int。time是什么?这是mongodb中的类型吗?@JimThio,它是表示整秒的标准C类型。它被定义为32位或64位有符号整数。
time\t
指控虽然在几年前确实有效,但现在不再有效。在我的64位Debian系统中,时间被定义为
/usr/include/x86\u 64-linux-gnu/bits/{types.h,typesize.h}
中的
长int
长int
)的别名。现在,即使是智能手机也将使用64位,在2038年之前,仍有足够的时间将所有系统转换为64位整数。当然,传统系统可能会遇到困难,但有多少台计算机在实际使用中能够存活三十年?显然,BSON(以及Mongo)只允许32位的时间: