首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >两个亚马逊EC2实例如何共享相同的数据?

两个亚马逊EC2实例如何共享相同的数据?
EN

Stack Overflow用户
提问于 2013-01-31 21:14:24
回答 2查看 575关注 0票数 1

我正在开发一个部署在亚马逊EC2服务器实例上的解决方案,该实例的区域设置为美国西部。该解决方案使用mongodb进行数据存储,并包含移动应用程序使用的web服务。移动应用程序的用户群在美国和亚洲之间的比例为40:60,因此我需要在亚太地区设置另一个EC2实例,以降低他们的延迟和连接时间。

由于数据存储位于美国西部的实例上,我如何在亚太地区设置一个新实例,以便与美国西部实例共享相同的数据?我对将mongodb数据库迁移到其他地方持开放态度,但我不想更改为不同的NoSQL解决方案。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-01-31 23:34:32

这里有各种不同的解决方案。我将尝试提供一些。

副本集

也许最简单的解决方案是使用副本集,其中您在美国东部有两台服务器,在亚洲有一台。MongoDB中的副本集至少需要三个节点才能工作,而且由于您在美国东部附近有更多的用户,因此将其放在那里是有意义的。

现在,只需解决三个节点,就可以使用其中一个节点获得更接近亚洲的数据。然后,您需要使用Read Preferences来指示您的应用程序从US-EAST或ASIA节点之一进行读取。我在http://derickrethans.nl/readpreferences.html上写了一篇关于PHP如何处理这些阅读偏好的文章--其他语言驱动程序也会有类似的解决方案。

所有驱动程序都将维护到每个副本集节点的连接,因此连接开销应该不是太大的问题。但至少您可以从最近的节点进行读取,以解决延迟问题。写操作始终必须转到主节点(很可能在美国东部)。

  • 优点:设置相当简单,只需要三个节点
  • 缺点:仅适用于直接读取,但不适用于写入

分片

分片是MongoDB中的一种方法,它允许您将整个数据集分成较小的部分,以便可以在MongoDB中容纳一个巨大的数据集,而不受一台服务器资源的限制。通常,分片设置至少由两个分片组成,每个分片包含一个(3个节点)副本集,但也可以让一个副本集只由一个节点组成,这意味着您最终将拥有两个分片,每个分片包含一个数据节点。

MongoDB中的分片支持“标签感知分片”(http://mongodb.onconfluence.com/display/DOCS/Tag+Aware+Sharding),它可以根据文档中的字段将特定的文档重定向到特定的分片。如果您的单据是f.e.如果您有一系列的用户想法或国家代码,您可以使用它们将文档重定向到正确的分片。

然而,设置它并不是很容易,因为它需要对使用MongoDB进行分片有相当好的理解。在http://www.kchodorow.com/blog/2012/07/25/controlling-collection-distribution/上有一个非常好的介绍

  • 优点:允许您将数据本地化到一个特定位置进行读写
  • 缺点:不容易设置,您需要两个数据节点、配置服务器和代理服务器。

希望这能有所帮助!

票数 4
EN

Stack Overflow用户

发布于 2013-01-31 22:46:59

如果你的应用程序读起来很重,我会使用mongodb的Replica sets:

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14626653

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档