我可以保持两个mongo数据库同步吗?

时间:2013-10-28 22:58:08

标签: mongodb pymongo

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

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

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

例如在一段时间内。

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

RUN SYNC

DB1 = DB2 = {B, C}

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

1 个答案:

答案 0 :(得分:0)

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

  • 两个优先级为1的节点将用作远程服务器
  • 单个仲裁器,以确保其中一个遥控器死亡时占多数
  • 5个本地dbs,优先级设置为0

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

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

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