踩了 MongoDB 的一个小坑

2015-05-15 14:51:19 +08:00
 sing1ee

先了解几个基本点:
1. MongoDB默认生成的ObjectId是在客户端完成的,时间戳+host+进程id等,详情见文档
2. ObjectId生成的时候,是根据当期那服务器时间所在的时区
3. 从collection中读出ObjectId,读取generation_time属性,默认是UTC
4. 北京时间比UTC时间早了八个小时

我们两台服务器,一个是北京时间,一个比北京时间早了八个小时。。。从这两个服务器入库MongoDB,并且根据generation_time读,就彻底乱了,结果
1. 北京时间的服务器,得到的generation_time时间比北京时间晚了八个小时
2. 比北京早了的服务器,得到的generation_time时间和北京时间相同

我们以为2是正确的。。。

我们用的是pymongo

5411 次点击
所在节点    程序员
21 条回复
springwarm
2015-05-17 17:00:57 +08:00
@Cu635 @sing1ee
知道我的问题出在哪了,我自行换做另外一种说法来理解:同一个时刻,用UTC表示比用北京时间表示,数值“小” (无所谓早晚之分,只是表示法不同)

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/191317

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX