1

我们正在考虑使用 MongoDB capped collections 作为我们的 fifo 队列。我们的要求如下:

  1. 消息的处理应按插入顺序进行
  2. 不应丢失/跳过任何消息
  3. 我们应该能够从特定的偏移量开始消费

但是我们面临以下问题:上限集合保证按插入顺序读取。但是,_id 不能保证是单调的。这意味着如果有多个生产者,可能会出现以下情况:

[
  ...
  { 
    _id: 5b72f12599757c9e26c0946b,
    ...
  },
  { 
    _id: 5b72f12599757c9e26c0946d,
    ...
  },
  { 
    _id: 5b72f12599757c9e26c0946c,
    ...
  },
  { 
    _id: 5b72f12599757c9e26c0946e,
    ...
  },
  ...
]

这意味着如果我们开始使用以下代码:

const cursor = collection
  .find({ _id: { $gt: "5b72f12599757c9e26c0946d" } })
  .tailable()
  .cursor();

然后将跳过带有 5b72f12599757c9e26c0946c 的消息。

所以我的问题如下:

  1. 是否可以保证上限集合的单调 ID?
  2. 是否可以从特定偏移量开始消费而不跳过乱序 _id 的消息?
  3. 我们错过了什么吗?

提前致谢。

4

0 回答 0