【问题标题】:Writing to many replicas of MongoDB写入 MongoDB 的多个副本
【发布时间】:2018-10-05 12:24:18
【问题描述】:

假设我有一个写入数据库的分布式应用程序。为了减少延迟,其中一个实例(应用程序 + 数据库)托管在澳大利亚,另一个实例托管在欧洲。两个数据库实例需要共享相同的数据。

所以我们在这里追求的是数据局部性。原因很明显:我们不希望澳大利亚的用户向我们在欧洲的数据库发送请求,因为这会增加延迟。

自然的选择是将两个数据库实例部署在一个副本集中。但似乎使用 MongoDB,您可以在副本集中写入 only one Mongo instance

MongoDB 有什么策略可以让两个数据库实例共享相同的数据,您可以写入这些数据?或者 MongoDB 只是满足此要求的错误选择?

【问题讨论】:

  • 链接正确。副本是为了确保高可用性,并且在某些情况下用于繁重的查询。您的用例属于分片主题:docs.mongodb.com/manual/tutorial/… 实际上,他们从客户端的角度“共享”数据,只是从澳大利亚查询欧洲数据将比对本地分片的请求花费更多时间。

标签: database mongodb deployment database-replication replicaset


【解决方案1】:

主题很大,但我会尽量给你一个简短的答案:

由于您的两个实例必须共享相同的 sata,因此您不能使用 sharded cluster with zones 。但是replica set 可以成为您的解决方案:

  • 创建至少包含以下内容的副本集:

    • “中性”区域中的服务器。它将是主服务器(设置更高的优先级)。这个服务器,只要它仍然是主服务器,就会处理你的写操作。

    • 您现有的两个优先级较低的服务器。

  • 在您的应用程序中将Read Preference 设置为“最近”。这样,无论服务器的主/从角色如何,您的读取操作都将由具有割草机网络延迟的服务器处理。

但我强烈建议您查看文档,了解如何正确部署此架构。 Here's a good start

编辑

关于这个解决方案的一些考虑:

  • 此用例是一种罕见的用例,最好从辅助文件中读取。一般来说,更喜欢从 MASTER 读取数据,因为副本集是为了高可用性而不是可扩展性。

  • 如果您的某些数据可以“定位”以便更快地访问,请考虑将分片集合作为更好的解决方案

【讨论】:

  • 谢谢!有没有比 Mongo 处理得更好或更差的数据库?还是每个主流数据库都有同样的问题?
  • 不幸的是,我无法回答,因为我对数据库的了解基本上涉及 mongodb。我会在我的回答中添加一些考虑因素
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多