- 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 发布
区
Zone
本页内容
在分片集群中,您可以基于 shard key 创建分片数据的 zones 。您可以将每个区域与集群中的一个或者更多分片关联起来。一个分片可以和任意数目的非冲突区域关联。在一个均衡的集群中,MongoDB只会将一个区域包含的 chunks 迁移到与该区域相关联的分片。
可以运用区域的一些常见开发模式如下:
- 在一个特定的分片集合中分隔一个特定的数据子集。
- 保证最相关的数据存储于与应用服务器地理上最相近的分片上。
- 基于硬件/分片硬件的性能将数据路由到分片。
下图展示了一个拥有三个分片和两个区域的分片集群。A
区域表示下限为 1
、上限为 10
的范围。B
区域则表示下限为 10
、上限为 20
的范围。 分片 Alpha
和 Beta
有 A
区域。分片 Beta
还拥有 B
区域。 分片 Charlie
没有区域与之相关、该集群在一个稳定的状态,没有数据块违背任何区域。
行为和操作
范围
每个区域设计一个或多个 shard key 值范围。每个区域覆盖的每个范围一般包含其下界,不包含其上界。
区域不能共享范围,它们也不能有交叉的范围。
均衡器
The balancer attempts to evenly distribute a sharded collection’s chunks across all shards in the cluster.
对于每一个标记为要迁移的 chunk ,均衡器检查所有配置区域内的每一个可能的目标分片。如果数据块范围属于某一个区域,那么均衡器就会将该数据块迁移到该区域上的一个分片。不属于任何区域的数据块可以存在于集群中的 任何 分片,并且正常迁移。
在均衡过程中,如果均衡器检测到任何违背已配置区域上给定的分片,均衡器将会把这些数据块迁移到不存在冲突的分片上。
在使用一个片键范围配置区域,并且将它与一个或多个分片关联起来之后,集群可能会花费一些时间来迁移影响的数据。这依赖于数据块的划分以及目前集群中数据的分布。当均衡完成之后,在某一给定区域的文档读取和写入将只会路由到该区域内的一个分片或几个分片。
一旦配置完成后,均衡器将在 balancing rounds 中重新检查区域。
片键
在定义一个区域覆盖的新范围时,您必须使用包含在 shard key 中的字段。如果使用一个 [compound]片键,则该范围必须包含该片键的前缀。
例如,给定一个片键 { a : 1, b : 2, c : 3 }
,创建或更新一个区域来覆盖 b
的值要求包括 a
作为前缀。创建或更新一个区域来覆盖 c
的值要求包括 a
和 b
作为前缀。
您不能使用片键中部包含的字段创建区域。例如,如果您先使用区域来对数据进行地理位置进行分区,片键中需要至少包括一个包含地理数据的字段。
为集合选择分片键时,请考虑您可能要用于配置区域的字段。有关选择分片键的注意事项,请参阅选择分片键。
哈希片键和区域
当在哈希片键上使用区域时,每个区域覆盖 哈希 片键值。给定一个片键值 { a : 1 }
和区域一个下界为 1
上界为 5
的区域 alpha
,边界表示 a
的 哈希 值,而不是真实值。因此,并不能保证 MongoDB将 a
值为 1
到 5
之间的文档路由到 alpha
区域。MongoDB将任何 哈希 片键值落入到 1
到 5
范围内的文档路由到区域 alpha
内的分片上。
一般说来,一个覆盖哈希片键值顺序范围的区域可能会出现一些预计不到的行为。
可以通过使用 minkey
和 maxkey
创建覆盖片键值整个范围的区域,以保证MongoDB将某个特定集合的所有数据控制存储在该区域的一个分片或几个分片上。
分片区域边界
区域范围一般包含下界,不包含上界。
参见
[Manage Shard Zones]
译者:王恒
Copyright © 上海锦木信息技术有限公司 all right reserved,由 MongoDB汉化小组 提供技术支持文件修订时间: 2020-10-11 20:53:05