2

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

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

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

例如在一段时间内。

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

运行同步

DB1 = DB2 = {B, C}

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

4

1 回答 1

1

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

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

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

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

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

于 2013-10-29T00:54:02.073 回答