簡體   English   中英

pymongo:使用MongoReplicaSetClient的優勢?

[英]pymongo: Advantage of using MongoReplicaSetClient?

似乎MongoClientMongoReplicaSetClient都可以連接到mongo副本集。 實際上,他們的文檔頁面幾乎相同 - 相同的選項,相同的方法等 - 除了后者的構造函數要求我指定replicaSet。

在這兩種情況下,我們都可以指定讀取首選項。 在這兩種情況下,如果發生降級,我們必須處理AutoReconnect異常。

所以我的問題是:

  1. 為什么一個人使用一個而不是另一個,因為一個人可以執行完全相同的操作?

  2. 兩者都可以執行二次讀取,對嗎? 文檔說ReplicaSetClient的優點是我們可以進行二次讀取,但顯然它們都受支持。

  3. 文檔說ReplicaSetClient具有“副本集健康監控”功能。 這到底是什么意思呢? 是否有我可以調用的新方法告訴我有關我不能用MongoClient做的replset的健康狀況?

  4. 理論上 ,MongoReplicaSetClient將連接到replset的所有成員,而不僅僅是一個。 這是錯誤的:您可能會刪除連接字符串中的任何服務器,MongoClient和MongoReplicaSetClient仍然可以連接。 我錯過了什么嗎?

這是一個令人困惑的API選擇,我們在PyMongo 2.x中感到遺憾。 我們將在2015年4月將所有客戶端類合並到PyMongo 3中的MongoClient:

http://emptysqua.re/blog/good-idea-at-the-time-pymongo-mongoreplicasetclient/

與此同時:

  1. 計划連接到整個副本集時,請使用MongoReplicaSetClient。 MongoClient僅連接到一個成員。
  2. 單個MongoReplicaSetClient可用於執行主要或次要讀取,以及使用讀取首選項的更復雜的決策,請參閱我關於該主題的博客文章 MongoClient將連接到副本集的一個成員(主要)並始終從中讀取,除非您使用MongoClient直接連接到輔助節點,在這種情況下,它將始終從該輔助節點讀取。
  3. MongoReplicaSetClient使用后台線程監視集合的運行狀況,后台線程定期檢查所有成員。 客戶端跟蹤成員是否已啟動,它是否跟蹤其ping時間,並在添加成員時發出通知。 這將減少您在片狀網絡上看到的異常數量,或者副本集的配置發生變化時,它允許客戶端正確實現讀取首選項。
  4. MongoReplicaSetClient實際上連接到所有成員,而MongoClient只連接到一個成員。 MongoReplicaSetClient嘗試連接到連接字符串中列出的每個成員; 一旦連接到一個,它就會要求該成員提供所有其他成員的列表。 從這一點開始,它會忽略您的連接字符串並使用它從連接到的成員獲得的列表。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM