参考 > MongoDB CRUD操作 > MongoDB CRUD概念 > 分布式查询
默认情况下,客户端从副本集的primary读取;但是,客户端可以指定读取首选项以将读取操作定向到其他成员。例如,客户端可以将读取首选项配置为从次要成员或最近成员读取以下内容:
来自副本集的辅助成员的读取操作可能无法反映主要对象的当前状态。将读取操作定向到不同服务器的读取首选项可能会导致非单调读取。
在3.6版中进行了更改:从MongoDB 3.6开始,客户端可以使用因果一致的会话,这提供了各种保证,包括单调读取。
您可以基于每个连接或每个操作配置读取首选项。有关读取首选项或读取首选项模式的更多信息,请参见读取首选项和 读取首选项模式。
在副本集中,所有写操作都进入该集的primary。主服务器应用写操作,并将操作记录在主服务器的操作日志或oplog上。操作日志是对数据集的可重复操作序列。 集的次要成员连续复制操作日志,并在异步过程中将操作应用于自身。
分片群集允许您mongod
以对应用程序几乎透明的方式在实例群集之间划分数据集。对于分片簇的概述,请参阅拆分本手册的部分。
对于分片群集,应用程序向mongos
与群集关联的实例之一发出操作
。
如果查询不包含分片键,则mongos
必须将查询定向到集群中的所有分片。这些分散的收集查询可能效率很低。在较大的集群上,分散收集查询对于常规操作是不可行的。
对于副本集分片,从副本集的辅助成员进行的读取操作可能无法反映主副本的当前状态。将读取操作定向到不同服务器的读取首选项可能会导致非单调读取。
注意
从MongoDB 3.6开始,
"available"
。在较早的版本中,无论是否考虑读取问题,从次要对象进行的读取都可能返回孤立的文档。有关分片群集中读取操作的更多信息,请参见 mongos和Shard Keys 部分。