前言
此篇博文是 Mongdb 基础系列之一;
本文为作者的原创作品,转载需注明出处;
在分片集中进行查询操作
如图,这时一个典型的 MongoDB 的分片集群的架构,Application 通过 Router 将查询分发到不同的分片中;
当查询语句中包含了分片的键( shard key ),那么 mongos 可以从 config database 中使用集群的元数据直接将该 query 路由到指定的分片中;如图所示,
如果查询语句中不包含分片的键( shard key ),那么 mongos 必须将该查询分发到各个不同的分片中去进行查询,这叫做 分散聚集( scatter gather) 查询,这个在大规模的 mongodb 的分片集群中性能将会异常的糟糕;如图所示,
注意,
在分片集群的查询过程中,若读取操作发生在从节点上,该查询操作并不能反映主节点上的情况;
Read preferences that direct read operations to different servers may result in non-monotonic reads. 如果直接在不同的服务器上进行直接读取,那么数据很有可能不一致
For more information on read operations in sharded clusters, see the mongos and Shard Keys sections.
在主从集群中的查询操作
默认情况下,客户端是从集群中的 primary 节点中开始读取;不过,客户端也可以通过指定一个 read reference 向集群中的一个节点进行直接读取;比如,客户端可以通过配置 read references 的方式就近从最近的一个从节点开始读取,可以:
- reduce latency in multi-data-center deployments,
- improve read throughput by distributing high read-volumes (relative to write volume),
- perform backup operations, and/or
- allow reads until a new primary is elected.
但是,直接从从节点开始读取会遗漏当前主节点的状态