2016-08-24 63 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有一個很好的答案,它描述了使用標籤來決定讀取哪個節點。 –

相關問題