我们正在考虑使用 MongoDB capped collections 作为我们的 fifo 队列。我们的要求如下:
- 消息的处理应按插入顺序进行
- 不应丢失/跳过任何消息
- 我们应该能够从特定的偏移量开始消费
但是我们面临以下问题:上限集合保证按插入顺序读取。但是,_id 不能保证是单调的。这意味着如果有多个生产者,可能会出现以下情况:
[
...
{
_id: 5b72f12599757c9e26c0946b,
...
},
{
_id: 5b72f12599757c9e26c0946d,
...
},
{
_id: 5b72f12599757c9e26c0946c,
...
},
{
_id: 5b72f12599757c9e26c0946e,
...
},
...
]
这意味着如果我们开始使用以下代码:
const cursor = collection
.find({ _id: { $gt: "5b72f12599757c9e26c0946d" } })
.tailable()
.cursor();
然后将跳过带有 5b72f12599757c9e26c0946c 的消息。
所以我的问题如下:
- 是否可以保证上限集合的单调 ID?
- 是否可以从特定偏移量开始消费而不跳过乱序 _id 的消息?
- 我们错过了什么吗?
提前致谢。