MongoDB:连接到不同副本的不同应用程序

时间:2016-08-24 06:26:04

标签: ruby-on-rails mongodb mongoid mongodb-replica-set database

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

主要有3个连接到MongoDB副本集的部分。

  1. 消费者应用程序
  2. 管理员和客户服务管理应用程序
  3. 数据检索应用程序(用于分析和此类用途)
  4. 所有这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,但我确实在replica-set-2和3 的日志文件中看到了某些查询。

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

    我真的很想知道使用MongoDb和mongoid是否可以使用这样的东西,因为它可以帮助我们解决很多负载问题。此时,来自客户服务和数据检索应用程序的大量查询也会影响面向消费者的移动应用程序;因为读取没有被分解。所以基本上想分开阅读。

    此外,如果可能的话,我会再次睁大眼睛看看任何可能存在的陷阱;特别是所有3个应用程序都可以写入数据库。例如,replica-3突然成为选举后的主要内容,并且在数据检索应用程序的配置中没有明确提及。可能会发生什么会成为一个问题。

    我不确定这是否可行;但只是想知道是否有办法弄明白这一点。任何帮助都会非常明显。

1 个答案:

答案 0 :(得分:2)

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

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