簡體   English   中英

如何讀取/寫入 MongoDB 副本集的次要成員?

[英]How to read/write to secondary member of a MongoDB replica-set?

我目前正在規划一些服務器基礎設施。 我在不同的位置有兩台服務器。 我的應用程序(api 和東西)都在它們上面運行。 客戶端連接到最近的(最佳連接)。 如果一台服務器發生故障,另一台服務器可以處理請求。 我想在我的項目中使用 mongodb。 第一個想法是使用副本集,因此我可以確保數據是一致的。 如果一台服務器出現故障,數據仍然可以訪問,並且輔助服務器切換到主服務器。 當主服務器上的應用程序想要使用數據時,這很好,但其他服務器必須連接到主服務器才能處理數據(這將解決故障轉移,但不是“最佳連接”問題)。 在 Mongodb 中有一個從輔助服務器讀取數據的選項,但是我必須確保插入(僅在主服務器上可能)在每個輔助服務器上都是一致的。 這個“writeConcern”還有一個選項。 是否有可能以某種方式指定“特定二級上的 writeConcern”? 因為如果在沒有應用程序的情況下添加第二個輔助節點,則不需要在每個輔助節點上“writeConcern”。 如果我指定一個特定的值,我真的不知道數據在哪個二級上可用,對吧?

摘要:我想在調用api時減少服務器之間的連接。

方案

請分享一些想法或想法來解決我的問題。

只能在初選上進行寫入。

要控制讀取定向到哪個二級,您可以使用最大陳舊度和標簽。

插入(僅可能在主節點上)在每個輔助節點上都是一致的。

我不明白你這句話是什么意思。

如果您有兩個地理上分開的數據中心 A 和 B,那么在物理上不可能在 A 中寫入數據並立即在 B 中看到它。您必須等待寫入傳播或等待讀取從遠程節點獲取數據。

要在寫入時支付成本,請將您的寫入關注點設置為部署中的節點數(在您的提案中為 2)。 要在讀取時支付成本,請使用主讀取。

請注意,僅將寫入關注點設置為等於節點數並不會使所有節點始終具有相同的數據——它只會使您的應用程序僅在所有節點都接收到它時才認為寫入成功。 就提交的操作而言,主節點仍然可以領先於特定的輔助節點。

而且,正如評論中所指出的,除非兩個成員都可操作,否則雙節點副本集將不接受寫入,這就是為什么它通常不是一個有用的配置。

摘要:我想在調用api時減少服務器之間的連接。

這與問題的 rest 無關,如果你真的是這個意思,這是一個過早的優化。

如果您想要更快的網絡 I/OI 建議考慮在您的應用程序和數據庫之間建立更好的連接(例如,我想 AWS 會在它們的各個區域之間提供相當好的連接)。

暫無
暫無

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

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