在本页面
读取复制集的操作
在复制集上进行写操作
读取分片群集的操作
在分片群集上写操作
默认情况下,客户端读取复制集的主arrow-up-right副本;但是,客户端可以指定一个读首选项arrow-up-right ,以便对其他成员进行直接读操作。例如,客户端可以配置读取偏好,从二级或从最近的成员读取到:
减少多数据中心部署中的延迟,
通过分配高读取量(相对于写入量)来提高读取吞吐量,
执行备份操作,和/或
允许读取直到选择一个新的主节点arrow-up-right。
来自复制集的次要成员的读取操作可能无法反映主要数据库的当前状态。将读取操作定向到不同服务器的读取首选项可能会导致非单调读取。
_在3.6版中进行了更改:_从MongoDB 3.6开始,客户端可以使用因果一致的arrow-up-right会话,这提供了各种保证,包括单调读取。
您可以基于每个连接或每个操作配置读取首选项。有关读取首选项或读取首选项模式的更多信息,请参见读取首选项arrow-up-right和 读取首选项模式arrow-up-right。
在复制集arrow-up-right,中,所有的写操作都指向集合的主arrow-up-right节点。主服务器应用写操作并将操作记录在主服务器的操作日志或oplogarrow-up-right上。oplog是对数据集的可重复操作序列。集合中的次要成员不断复制oplog,并在一个异步进程中将这些操作应用到自己身上。
有关复制集和写入操作的更多信息,请参见复制arrow-up-right和 写入问题arrow-up-right。
分片集群arrow-up-right允许您以一种对应用程序几乎透明的方式在mongodarrow-up-right实例集群之间划分数据集。有关分片集群的概述,请参阅本手册的分片arrow-up-right部分。
对于分片群集,应用程序向mongosarrow-up-right与该群集关联的实例之一发出操作 。
当分片群集上的读取操作定向到特定分片时,效率最高。分片集合的查询应包含集合的分片键arrow-up-right。当查询包含分片键时,mongosarrow-up-right可以使用配置数据库中的arrow-up-right群集元数据将查询路由到分片。
mongos
如果查询不包含分片键,则mongosarrow-up-right必须将查询定向到集群中的_所有分_片。这些_分散的收集_查询可能效率很低。在较大的群集上,分散收集查询对于常规操作是不可行的。
对于复制集分片,从复制集的辅助成员进行的读取操作可能无法反映主副本的当前状态。将读取操作定向到不同服务器的读取首选项可能会导致非单调读取。
[success] 注意从MongoDB 3.6开始,客户端可以使用因果一致的arrow-up-right 会话,从而提供各种保证,包括单调读取。分片复制集的所有成员(不仅是主节点)都维护有关块元数据的元数据。如果不使用读取关注点,这将防止从辅助节点读取返回孤立的数据arrow-up-right["available"](https://docs.mongodb.com/manual/reference/read-concern-available/#readconcern."available")。在较早的版本中,无论是否关注读操作,从辅助对象进行的读操作都可能返回孤立的文档。arrow-up-right
[success] 注意
从MongoDB 3.6开始,
客户端可以使用因果一致的arrow-up-right 会话,从而提供各种保证,包括单调读取。
分片复制集的所有成员(不仅是主节点)都维护有关块元数据的元数据。如果不使用读取关注点,这将防止从辅助节点读取返回孤立的数据arrow-up-right["available"](https://docs.mongodb.com/manual/reference/read-concern-available/#readconcern."available")。在较早的版本中,无论是否关注读操作,从辅助对象进行的读操作都可能返回孤立的文档。arrow-up-right
"available"
有关分片群集中读取操作的更多信息,请参见 mongosarrow-up-right和Shard Keysarrow-up-right 部分。
对于分片群集arrow-up-right中的分片集合,该 mongosarrow-up-right指令将写操作从应用程序定向到负责数据集特定部分的分片。在mongosarrow-up-right使用来自集群的元数据 的配置数据库arrow-up-right以路由写操作到适当的分片。
MongoDB根据分片键arrow-up-right的值将分片集合中的数据划分为范围。然后,MongoDB将这些块分配为分片。分片键决定块到分片的分布。这可能会影响集群中的写操作的性能。
[warning] 重要影响_单个_文档的 更新操作必须包含分片键arrow-up-right 或_id 字段。如果具有分片键arrow-up-right,则影响多个文档的更新在某些情况下会更有效,但可以广播到所有分片。
[warning] 重要
影响_单个_文档的 更新操作必须包含分片键arrow-up-right 或_id 字段。如果具有分片键arrow-up-right,则影响多个文档的更新在某些情况下会更有效,但可以广播到所有分片。
_id
如果分片键的值在每次插入时增加或减少,则所有插入操作都将针对单个分片。结果,单个分片的容量成为分片簇的插入容量的限制。
欲了解更多信息,请参阅分片arrow-up-right和 批量写入操作arrow-up-right。
也可以看看:
可重试写入arrow-up-right
译者:杨帅
校对:杨帅
最后更新于4年前