【发布时间】:2020-04-28 04:07:30
【问题描述】:
我想将 mongodb 中的集合复制到其他数据接收器中。一种方法是获取最后一个 oplog 条目时间戳,记录它,然后对整个集合进行查找并遍历该游标,将文档发送到接收器。一旦该游标用尽,我从一开始得到的时间戳开始读取 oplog 操作。 (类似于mongo-connector 所做的事情) 在伪代码中:
lastTs = getLatestOplogTimestamp(); -> t1
doDumpOfCollection(collectionName);
streamOperationsFromOlog(since=lastTs); - t2
假设在 t1 和 t2 之间的时间段内,collectionName 发生了更新,也就是说,一个项目被添加到子文档数组中,或者其他一些有状态的更新。
document1.items.append(item1);
问题是:
新数据会/可以显示在光标迭代中吗?
当我重放 oplog 时会发生什么 - 我可以在数组中有重复的项目吗?
documentation 表明其他操作可以与查询“交错”,这表明这两个项目的答案都是肯定的。
如果是这样,有没有办法可靠地从 mongo 复制单个集合?在我看来,像 Mongo 连接器这样的东西并不具备强大的数据完整性。
【问题讨论】:
标签: mongodb replication isolation-level