在CouchDB中存储日期时间(时间戳)的最佳方法是什么?

dan*_*dan 26 datetime json couchdb

我认为UTC时间字符串2011-01-26 21:41:09 +0000可能没问题,因为它们在视图键中使用时排序正确,但存储时区(例如2011-01-26 16:41:09 -0500)会使文档更具可读性.从可读性的角度来看,将日期转换为纪元整数似乎是最不吸引人的,但也许最适合性能(或者它会有所作为?).这里的推荐做法是什么?

Jas*_*ith 33

时间是一个单一的东西.时间戳加时区是二维的,描述时间点和位置.Couch视图是一维的(但不是GeoCouch插件),因此存储在公共区域(UTC)是明智的.

可能最具前瞻性的格式是一个按时间顺序自然排序的字符串.JSON2输出的最方便的格式可能是:

> a = new Date();
Thu Jan 27 2011 18:40:52 GMT+0700 (ICT)
> JSON.stringify(a)
"2011-01-27T11:40:52.280Z"
Run Code Online (Sandbox Code Playgroud)


Big*_*Hat 6

如果您只是使用Map reduce的Map侧,那么这些建议可能就好了.但是,如果你想减少结果(_count,_stats,_sum),那么我建议你将日期作为数组发送,这样你就可以使用group_level.

例如,如果您在格式为"2011-02-14"的日期字符串上发出(doc.date.split(' - ')),那么您可以通过使用每天,每月和每年返回_count(例如) group_level = 3,2和1.

您可以通过将非日期数据添加到键的开头来进一步过滤数据.例如,如果您输出Twitter名称,您的密钥可能看起来像["bigbluehat","2011","02","14"]并且您的reduce可以返回用户"bigbluehat"的所有推文的总数以及该日期,月份和年份的该用户的统计信息.

如果你没有使用reduce方面的东西,那么基于字符串的键很可能.


Kri*_*ian 5

无论我使用什么类型的数据存储,我通常都希望在那里使用unix时间戳作为字段,其中我将包括一个用于创建日期,然后是一个更新的字段,我可以在文档更改时更改.

我更喜欢常规的"自纪元以来的秒"而不是"自纪元以来的毫秒"只是为了简单.

Math.round(new Date().getTime()/1000) 为我做的伎俩.

在可读性方面,我想将其存储为整数以便于比较,并使用前端来很好地显示它.

  • Unix时间戳通常是一种好方法,但在很多情况下它并非如此.例如,如果您在32位抵押贷款计算器上使用Unix时间戳,那么当抵押贷款运行超过2038年,当Unix时间戳耗尽时,您将度过一段美好时光. (2认同)