Mongodb 集合复制和读取游标

Mongodb collection replication and read cursors

我想将一个集合从 mongodb 复制到其他数据接收器中。一种方法是获取最后一个 oplog 条目时间戳,记录它,然后对整个集合进行查找并迭代该游标,将文档发送到接收器。一旦该游标耗尽,我就会读取自开始时获得的时间戳以来的操作日志操作。 (类似于 mongo-connector 所做的事情) 在伪代码中:

lastTs = getLatestOplogTimestamp(); -> t1
doDumpOfCollection(collectionName);
streamOperationsFromOlog(since=lastTs); - t2

假设在 t1 和 t2 之间的时间内,对 collectionName 进行了更新,其中一个项目被添加到子文档数组,或者其他一些有状态的更新。

document1.items.append(item1);

问题是:

  1. Will/can 新数据出现在游标迭代中?

  2. 当我重播 oplog 时会发生什么 - 我可以在数组中有重复项吗?

documentation 表明其他操作可以 "interleaved" 与将表明对这两项的答案都是肯定的查询。

如果是这样,有没有办法从 mongo 可靠地复制单个集合?在我看来,像 Mongo Connector 这样的东西并没有很强的数据完整性。

我认为 snapshot reads 旨在满足您的要求。