2016-08-24 65 views
1

我们使用Mongodb作为我们应用程序的中央数据库;面向移动应用的消费者。目前它的一个7人副本集,副本集1目前是主人。连接到mongo副本的后端是在Ruby on Rails中构建的,我们使用mongoid作为ODM。MongoDB:连接到不同副本的不同应用程序

主要有3件连接到MongoDB副本集。

  1. 客户应用
  2. 管理和客户服务管理应用
  3. 数据检索应用程序(分析和这样的目的)

所有这3个应用程序连接到相同的副本设置为现在。

我想知道的是是否有可能将不同的应用程序连接到特定的副本。

For example, the mobile app connects to the primary for writes and the replicas 2-4 
to read; the customer care management application connects to the primary 
(for writes) and replicas 5-7 for reads. 

我不认为明确提及具体的复制品在mongoid.yml配置工作。尽管我已经在数据检索应用程序的mongoid主机文件中仅提到了replica-set-7,但我确实在副本集2和3的日志文件中看到了某些查询。

很显然,尽管在客户端mongoid结束时指定了配置,MongoDB决定在其副本之间分配查询的标准。

我真的很想知道这样的事情是否可以使用MongoDb和mongoid,因为它可以帮助我们解决很多负载问题。目前,来自客户关怀和数据检索应用程序的大量查询也影响面向消费者的移动应用程序;因为阅读不分离。所以基本上想分开读取。另外,如果这一切都有可能的话,我会再次提出我对任何可能的陷阱的看法;特别是所有3个应用程序都可以写入数据库。例如,replica-3在选举后突然成为主数据,并且在数据检索应用程序的配置中没有明确提及。可能会发生什么会成为一个问题。

我完全不知道这是否可能;但只是想知道是否有办法解决这个问题。任何帮助都会非常可观。

回答

2

当您连接到副本集的任何成员时,客户端会被告知副本集的完整状态并可以连接到其中的任何副本集。最初的一组主机只是这个过程的种子 - 只要你的应用程序可以到达其中一个主机,那么哪个主机在那个配置中并不重要。

Mongo具有tagged replica set members的概念。在创建连接或执行查询时,您可以指定要用于选择要读取的副本集成员的标记。

+0

感谢您的建议。让我看看。 – Sunil

+0

http://stackoverflow.com/a/37999438/174843有一个很好的答案,它描述了使用标签来决定读取哪个节点。 –

相关问题