分布式查询: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