- MongoDB官方文档中文版
- MongoDB中文手册说明
- MongoDB简介
- 安装 MongoDB
- The mongo Shell
- MongoDB CRUD 操作
- 聚合
- 数据模型
- 事务
- 索引
- 安全
- 安全检查列表
- 启用访问控制
- 身份验证
- 基于角色的访问控制
- TLS / SSL(传输加密)
- 静态加密
- 客户端字段级加密
- 审计
- 网络和配置强化
- 实现字段级别修订
- 安全参考
- 附录
- 变更流
- 复制
- 分片
- 分片键
- 哈希分片
- 范围分片
- 区
- 管理分片区
- 按位置细分数据
- 用于更改SLA或SLO的分层硬件
- 按应用或客户细分数据
- 仅插入工作负载的分布式本地写入
- 管理分片区
- 使用块进行数据分区
- 在分片集群中拆分数据块
- 管理
- 存储
- 存储引擎
- 日志记录
- 管理日志记录
- GridFS
- FAQ:MongoDB 存储
- 存储引擎
- 参考
- 运算符
- 查询与映射运算符
- 更新运算符
- 聚合管道阶段
- 聚合管道操作符
- $abs (aggregation)
- $acos (aggregation)
- $acosh (aggregation)
- $add (aggregation)
- $addToSet (aggregation)
- $allElementsTrue (aggregation)
- $and (aggregation)
- $anyElementTrue (aggregation)
- $arrayElemAt (aggregation)
- $arrayToObject (aggregation)
- $asin (aggregation)
- $asinh (aggregation)
- $atan (aggregation)
- $atan2 (aggregation)
- $atanh (aggregation)
- $avg (aggregation)
- $ceil (aggregation)
- $cmp (aggregation)
- $concat (aggregation)
- $concatArrays (aggregation)
- $cond (aggregation)
- $convert (aggregation)
- $cos (aggregation)
- $dateFromParts (aggregation)
- $dateToParts (aggregation)
- $dateFromString (aggregation)
- $literal (aggregation)
- 查询修饰符
- 数据库命令
- 聚合命令
- 地理空间命令
- 查询和写操作命令
- 查询计划缓存命令
- 认证命令
- 用户管理命令
- 角色管理命令
- 复制命令
- 分片命令
- 会话命令
- 管理命令
- 诊断命令
- 免费监控命令
- 系统事件审计命令
- mongo Shell 方法
- 集合方法
- db.collection.aggregate()
- db.collection.bulkWrite()
- db.collection.copyTo()
- db.collection.count()
- db.collection.countDocuments()
- db.collection.estimatedDocumentCount()
- db.collection.createIndex()
- db.collection.createIndexes()
- db.collection.dataSize()
- db.collection.deleteOne()
- db.collection.deleteMany()
- db.collection.distinct()
- db.collection.drop()
- db.collection.dropIndex()
- db.collection.dropIndexes()
- db.collection.ensureIndex()
- db.collection.explain()
- db.collection.find()
- db.collection.findAndModify()
- db.collection.findOne()
- db.collection.findOneAndDelete()
- db.collection.findOneAndReplace()
- db.collection.findOneAndUpdate()
- db.collection.getIndexes()
- db.collection.getShardDistribution()
- db.collection.getShardVersion()
- db.collection.insert()
- db.collection.insertOne()
- db.collection.insertMany()
- db.collection.isCapped()
- db.collection.latencyStats()
- db.collection.mapReduce()
- db.collection.reIndex()
- db.collection.remove()
- db.collection.renameCollection()
- db.collection.replaceOne()
- db.collection.save()
- db.collection.stats()
- db.collection.storageSize()
- db.collection.totalIndexSize()
- db.collection.totalSize()
- db.collection.update()
- db.collection.updateOne()
- db.collection.updateMany()
- db.collection.watch()
- db.collection.validate()
- 词汇表
- 默认的MongoDB端口
- 默认的MongoDB读/写关注
- 服务器会话
- MongoDB驱动
- FAQ
- 联系我们
- 更多资料
- [快学Mongo]
- [Mongo问题讨论区]
- [Mongo 驱动使用手册]
- 本书使用 GitBook 发布
分布式查询
分布式查询
在本页面
读取复制集的操作
默认情况下,客户端读取复制集的主副本;但是,客户端可以指定一个读首选项 ,以便对其他成员进行直接读操作。例如,客户端可以配置读取偏好,从二级或从最近的成员读取到:
- 减少多数据中心部署中的延迟,
- 通过分配高读取量(相对于写入量)来提高读取吞吐量,
- 执行备份操作,和/或
- 允许读取直到选择一个新的主节点。
来自复制集的次要成员的读取操作可能无法反映主要数据库的当前状态。将读取操作定向到不同服务器的读取首选项可能会导致非单调读取。
在3.6版中进行了更改:从MongoDB 3.6开始,客户端可以使用因果一致的会话,这提供了各种保证,包括单调读取。
您可以基于每个连接或每个操作配置读取首选项。有关读取首选项或读取首选项模式的更多信息,请参见读取首选项和 读取首选项模式。
在复制集上进行写操作
在复制集,中,所有的写操作都指向集合的主节点。主服务器应用写操作并将操作记录在主服务器的操作日志或oplog上。oplog是对数据集的可重复操作序列。集合中的次要成员不断复制oplog,并在一个异步进程中将这些操作应用到自己身上。
读取分片群集的操作
分片集群允许您以一种对应用程序几乎透明的方式在mongod实例集群之间划分数据集。有关分片集群的概述,请参阅本手册的分片部分。
对于分片群集,应用程序向mongos与该群集关联的实例之一发出操作 。
当分片群集上的读取操作定向到特定分片时,效率最高。分片集合的查询应包含集合的分片键。当查询包含分片键时,mongos
可以使用配置数据库中的群集元数据将查询路由到分片。
如果查询不包含分片键,则mongos
必须将查询定向到集群中的所有分片。这些分散的收集查询可能效率很低。在较大的群集上,分散收集查询对于常规操作是不可行的。
对于复制集分片,从复制集的辅助成员进行的读取操作可能无法反映主副本的当前状态。将读取操作定向到不同服务器的读取首选项可能会导致非单调读取。
[success] 注意
从MongoDB 3.6开始,
客户端可以使用因果一致的 会话,从而提供各种保证,包括单调读取。
分片复制集的所有成员(不仅是主节点)都维护有关块元数据的元数据。如果不使用读取关注点,这将防止从辅助节点读取返回孤立的数据
"available"
。在较早的版本中,无论是否关注读操作,从辅助对象进行的读操作都可能返回孤立的文档。
有关分片群集中读取操作的更多信息,请参见 mongos和Shard Keys 部分。
在分片群集上写操作
对于分片群集中的分片集合,该 mongos
指令将写操作从应用程序定向到负责数据集特定部分的分片。在mongos
使用来自集群的元数据 的配置数据库以路由写操作到适当的分片。
MongoDB根据分片键的值将分片集合中的数据划分为范围。然后,MongoDB将这些块分配为分片。分片键决定块到分片的分布。这可能会影响集群中的写操作的性能。
[warning] 重要
影响单个文档的 更新操作必须包含分片键 或
_id
字段。如果具有分片键,则影响多个文档的更新在某些情况下会更有效,但可以广播到所有分片。
如果分片键的值在每次插入时增加或减少,则所有插入操作都将针对单个分片。结果,单个分片的容量成为分片簇的插入容量的限制。
也可以看看:
可重试写入
译者:杨帅
校对:杨帅
Copyright © 上海锦木信息技术有限公司 all right reserved,由 MongoDB汉化小组 提供技术支持文件修订时间: 2020-10-11 20:53:05