进入MongoDB中文手册(4.2版本)专栏

1 副本集的读操作

默认情况下,客户端从副本集的主节点读取;但是,客户端可以指定读优先,来直接向其他成员读取。例如,客户端可以将配置读优先,从次节点或最近节点读取以下内容:

  • 减少多数据中心部署(multi-data-center deployments)中的延迟,
  • 通过分配高读取量(相对于写入量)来提高读取吞吐量,
  • 执行备份操作,
  • 和/或允许读取,直到选举出新的主节点(new primary is elected)
    分布式查询
    来自副本集的次节点成员的读操作可能无法反映主节点的当前状态。将读操作定向到不同服务器的读取首选项可能会导致非单调读取。
    在3.6版中进行了更改:从MongoDB 3.6开始,客户端可以使用因果一致的会话,这提供了各种保证,包括单调读。
    您可以基于每个连接或每个操作配置读优先。有关读优先或读优先模式的更多信息,请参见读优先读优先模式

2 副本集的写操作

副本集中,所有写操作都进入主节点。主节点执行写操作,并将操作记录在主节点的操作日志或oplog上。oplog是对数据集的可重复操作序列。次要节点连续复制操作日志,并在异步进程中自动执行这些操作。
分布式查询
有关副本集和写入操作的更多信息,请参见复制写策略

3 分片集群的读操作

分片群集允许以对应用程序几乎透明的方式在mongod实例群集之间分区数据集。对于分片集群的概述,请参阅本手册的分片部分。
对于分片群集,应用程序向与群集关联的其中一个mongos实例发出操作 。
分布式查询
当分片群集上的读取操作定向到特定分片时,读操作效率最高。分片集合的查询应包含集合的分片键。当查询包含分片键时,mongos可以使用配置数据库( config database)中的群集元数据将查询路由到分片。
分布式查询
如果查询不包含分片键,则mongos必须将查询定向到集群中的所有分片。这些分散的收集查询可能效率很低。在较大的集群上,分散收集查询对于常规操作是不可行的。
分布式查询
对于副本集分片,从副本集的次节点成员进行的读操作可能无法反映主节点的当前状态。将读取操作定向到不同服务器的读优先可能会导致非单调读取。

注意
从MongoDB 3.6开始,
  * 客户端可以使用因果一致的会话,从而提供各种保证,包括单调读取。
分片副本集的所有成员(不仅是主节点)都维护有关块元数据的元数据。如果不使用读策略"available",这可以防止从次节点读取返回孤儿数据( orphaned data )。在较早的版本中,无论是否考虑读策略,从次节点进行的读操作都可能返回孤儿文档。
有关分片群集中读取操作的更多信息,请参见 mongos分片键部分。

2 分片集群的写操作

对于分片群集中的分片集合,mongos将写操作从应用程序定向到负责数据集的特定部分的分片。mongos使用来自配置数据库的集群的元数据,来路由写操作到适当的分片。
分布式查询
MongoDB 根据分片键的值将分片集合中的数据划分为多个范围。然后,MongoDB将这些块分配给分片。分片键决定到分片的块的分布。这会影响群集中写操作的性能。
分布式查询

重要
影响单个文档的更新操作必须包含分片键或_id 字段。如果具有分片键,则影响多个文档的更新在某些情况下会更有效,并能广播到所有分片。

如果分片键的值在每次插入时增加或减少,则所有插入操作都将针对单个分片。结果,单个分片的容量成为分片集群的插入容量的限制。
要了解更多信息,请参阅分片批量写入操作

进入MongoDB中文手册(4.2版本)专栏

相关文章:

  • 2021-11-28
  • 2022-12-23
  • 2022-02-23
  • 2021-07-25
猜你喜欢
  • 2022-03-03
  • 2021-10-13
  • 2021-11-17
相关资源
相似解决方案