1

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

主要有 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 hosts 文件中只提到了 replica-set-7,但我确实在 replica-set-2 和 3 的日志文件中看到了某些查询

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

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

此外,如果这一切都是可能的,我会再次关注任何可能的陷阱;特别是所有 3 个应用程序都可以写入数据库。例如,replica-3 在选举后突然成为主节点,并且在数据检索应用程序的配置中没有明确提及。那里可能发生的事情将成为一个问题。

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

4

1 回答 1

2

当您连接到副本集的任何成员时,客户端会被告知副本集的完整状态,并且可以连接到其中的任何一个。最初的主机集只是该过程的种子 - 只要您的应用程序可以访问其中一个主机,该配置中的哪些主机都没有关系。

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

于 2016-08-24T07:37:40.350 回答