Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Database 写入MongoDB的多个副本_Database_Mongodb_Deployment_Database Replication_Replicaset - Fatal编程技术网

Database 写入MongoDB的多个副本

Database 写入MongoDB的多个副本,database,mongodb,deployment,database-replication,replicaset,Database,Mongodb,Deployment,Database Replication,Replicaset,假设我有一个分布式应用程序,可以写入数据库。为了减少延迟,其中一个实例(app+数据库)位于澳大利亚,另一个位于欧洲。数据库的两个实例需要共享相同的数据 因此,我们在这里关注的是数据局部性。原因很明显:我们不希望澳大利亚的用户向我们在欧洲的数据库发送请求,因为这会增加延迟 自然的选择是在一个副本集中部署数据库的两个实例。但似乎使用MongoDB,您可以在副本集中写入 MongoDB有哪些策略可以让两个数据库实例共享相同的数据,您可以向其中写入数据?还是MongoDB只是对这个需求的一个错误选择?

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

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

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


MongoDB有哪些策略可以让两个数据库实例共享相同的数据,您可以向其中写入数据?还是MongoDB只是对这个需求的一个错误选择?

这是一个巨大的主题,但我会尝试给你一个简短而简单的答案:

由于您的两个实例必须共享同一sata,因此无法使用。但可以是您的解决方案:

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

    • “中立”区域中的服务器。它将是主服务器(设置更高的优先级)。只要此服务器仍然是主服务器,它将处理您的写操作

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

  • 在应用程序中设置为“最近”。这样,您的读取操作将由具有割草机网络延迟的服务器处理,而不考虑服务器的主/辅角色

但我强烈建议您检查文档,看看如何正确地部署此体系结构

编辑

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

  • 这个用例是一个罕见的用例,在这个用例中,最好从第二方读取。一般来说,您更喜欢从主服务器读取数据,因为复制集是为了高可用性而不是可伸缩性

  • >P>如果你的一些数据可以被“定位”得更快,请考虑将SARDIN集合作为一个更好的解决方案


谢谢!有没有比Mongo更好或更差的数据库?或者每个主流数据库都有相同的问题?不幸的是,我无法回答,因为我对数据库的了解基本上与mongodb有关。我会在我的回答中加上一些考虑——链接是正确的。复制副本是为了确保高可用性,在某些情况下还用于繁重的查询。您的用例属于切分主题:实际上,他们从客户机的角度“共享”数据,只是从澳大利亚查询欧洲数据比向本地切分请求要花多一点时间。