Mongodb 总是增加“_id”字段?

问题描述

即使我们有多个分片,mongodb 中的 _id 字段是否总是为集合中的下一个插入文档增加?因此,如果我有 collection.watch,下一个文档的 _id 字段是否总是比前一个文档更高?我需要这个来实现追赶订阅而不是丢失任何文件。因此,在来自 collection.watch 的每个处理过的文档中,我存储它的 _id,如果崩溃 - 除了 _id 之外,我还可以选择所有带有 last_seen_id > collection.watch 的文档。

或者我必须使用某种自动激活的值吗?我不想因为它会严重影响性能并杀死分片的原因。

解决方法

ObjectIds 保证在大多数时间单调增加,但不是所有时间。请参阅 What does MongoDB's documentation mean when it says ObjectIDs are "likely unique"?Can a 4 byte timestamp value in MongoDb ObjectId overflow?。如果您需要有保证的单调递增计数器,则需要自己实现。

正如您所指出的,在分布式环境中实现这不是一件小事,这就是 MongoDB 不提供此功能的原因。

一种可能的解决方案:

这不会让你排队。如果您需要队列,可以使用各种库和系统来提供队列。