【问题标题】:Can I keep two mongo databases synced?我可以保持两个 mongo 数据库同步吗?
【发布时间】:2019-02-14 18:59:57
【问题描述】:

我有一个可以在离线模式下运行的应用程序。如果离线,它使用本地 mongo 数据库,如果它有数据连接,它将使用远程 mongo 数据库。

有没有一种简单的方法可以同步这两个数据库并确保它们都具有它们的集合和文档的联合?

编辑:实际上,有两个数据库可能同时发生插入和删除,而另一个数据库不会发生。在固定的时间点,我希望两个数据库都显示它们的联合。

例如在一段时间内。

DB1.insert(A)
DB1.insert(B)
DB2.insert(C)
DB1.remove(A)

运行同步

DB1 = DB2 = {B, C}

EDIT2:一直在阅读。这不是预期目的,但可以将它们设置为远程的从属副本集并以这种方式使用吗?问题是我认为副本需要有一个副本主机必须可以通过可解析的 DNS 访问。不确定远程如何访问本地主机。

【问题讨论】:

  • 你能补充一些细节吗?现在还不清楚你需要什么。
  • 添加了更多细节,有帮助吗?
  • 您计划在每个远程数据库中使用多少个应用程序以及数据库的预期大小?
  • 每个远程数据库最多可能有 5 个应用程序。而且数据库会比较小(50MB)。

标签: mongodb pymongo


【解决方案1】:

您可以使用副本集,但 MongoDB 不支持 master-master 复制。假设您有这样的设置:

  • 两个优先级为 1 的节点将用作远程服务器
  • 如果一个遥控器死了,单个仲裁器确保多数
  • 5 个本地数据库,优先级设置为 0

当您的应用程序离线时,它将保持辅助状态,因此您将无法执行写入操作。当您上网时,它将同步来自远程数据库的更改,但您仍然需要某种方式来同步本地更改。处理之一可能是使用本地后备数据库,当您离线时将用于写入。当您上线时,您会将所有新记录推送到 master。处理更新可能有点棘手,但它是可行的。

另一个问题是,如果您需要添加更多应用程序,它就无法扩展。如果我没记错的话,每个副本集限制有 12 个节点。对于小型集群,DNS 解析可以通过使用 ssh 隧道来解决。

另一种处理问题的方法是使用小型的 restful 服务和文档时间戳。每当应用程序在线时,它可以定期将本地插入推送到远程并从远程数据库中提取数据。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-06-12
    • 1970-01-01
    • 1970-01-01
    • 2012-10-04
    • 2021-01-03
    • 2014-10-21
    • 2010-09-14
    • 2023-03-10
    相关资源
    最近更新 更多