我有两个数据库,数据相同(约 1TB):一个用于写入,没有分片和索引,我需要更新;另一个用于读取,有分片和索引,仅用于读取。如何在两个数据库之间设置自动复制?我需要同步这些数据库。现在我使用消息队列和脚本来移动数据,但这个问题有通用的解决方案吗?
答案1
我有两个数据库,数据相同(约 1TB):一个用于写入,没有分片和索引,我需要更新;另一个用于读取,有分片和索引,仅用于读取。如何在两个数据库之间设置自动复制?我需要同步这些数据库。
您描述的是两个部署之间的同步。MongoDB 的内置复制仅支持同一部署的成员之间的复制,其中所有成员通过复制 oplog。由于每个独立部署都允许写访问,因此无法保证部署将(或保持)同步。
如果您使用的是相同的数据集,则更典型的做法是使用具有适当区域分片和读取首选项的单个分片部署来实现所需的工作负载隔离。
分片也更常用于水平写入扩展,每个分片由一个副本集支持,以实现冗余和读取扩展。
现在我正在使用消息队列和脚本来移动数据,但是这个问题有没有什么常见的解决方案?
如果你确实想维护单独的部署,你可以考虑使用以下方式编写监控脚本改变流监视单个集合(MongoDB 3.6+)或所有非系统集合(MongoDB 4.0+)。还有第三方工具,例如Mongo 连接器或者您可以使用消息队列推出自己的解决方案(正如您所做的那样)。
除非有充分的理由不使用内置复制,否则我会考虑这样做,以避免同步和维护两个部署的管理开销。