【发布时间】:2020-01-08 11:04:49
【问题描述】:
当将文档插入 MongoDB 并且没有明确分配 _id 时,会自动分配一个。我的问题是,这个分配是在哪里进行的,ID 是在哪里生成的?是客户端在发送插入请求之前生成的,还是在服务器端生成的?
我的问题的上下文是我想使用 MongoDB 来构建一个“事件存储”(在“事件源”的意义上)。部分原因是商店强制对事件进行排序。 MongoDB中已经有一个内部排序,这就足够了。但是,在某些时候,我可能不得不在某些时候恢复阅读活动。为此,我不能在过滤器表达式中使用最后处理的 ID,因为 ID 的进程唯一和随机部分不保证任何排序。但是,ID 的时间戳部分可以做到这一点,只要它保证单调上升。
如果 ID 是由服务器生成的(并且该服务器没有做任何有趣的事情,比如有一个向后跳跃的系统时钟),那么只有一个地方可以生成这些 ID。不同系统之间的系统时钟和延迟差异变得无关紧要。随后,我可以依靠 ID 的时间戳部分单调递增。
【问题讨论】:
标签: mongodb