分佈式查詢:mongodb的分佈式模型分爲replica set和sharded cluster。mongodb
sharded集羣中將read根據sharding key(分片鍵)轉發到指定的shard節點,read操做很是高效;固然若是query中沒有包含sharding key,那麼這次read將會被轉發到全部的shard節點上,並有mongos server負責merge結果(包括排序),因此這種狀況性能較差(俗稱scatter、gather),對於大型集羣,這種查詢一般是不可行的。
對於replica set而言,只是涉及到將read操做路由到哪一個secondary上,默認狀況下,read請求老是在primary上發生,咱們能夠經過指定「read preference mode」來調整這一行爲。網絡
Java代碼分佈式
collection.withReadPreference(ReadPreference.secondaryPreferred()).find();
上述代碼表示儘量從 secondary上讀取,若是全部的secondary都失效則從primary上讀取。能夠實現「讀寫分離」。性能
目前支持的read模式:
1)primary:讀操做只發生在primary上,默認的read模式。若是primary失效,則返回error。
2)primaryPreferred:讀操做發生在primary上,若是primary失效,則由secondary接收read請求。這是一種比較良好的模式,
3)secondary:讀操做只發生在secondary上,若是所欲哦的secondary都失效,則返回error。
4)secondaryPreferred:讀操做一般發生在secondary上,若是全部的secondary都失效,則由primary接收read請求。
5)nearest:讀取「最近」的節點,mongodb客戶端將評估與每一個節點的網絡延遲,有限選擇延遲最小的節點,primary和secondary都有可能接收到read請求(不一樣的Client或許延遲不一樣)。rest