- 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 发布
 
在分片集群中拆分数据块
在分片集群中拆分数据块
通常,如果某个数据块超过最大块大小,则MongoDB会在插入后对数据块进行拆分。但是,在以下情况下,您可能需要手动拆分数据块:
- 您的集群中有大量数据,并且只有很少的数据块,就像使用现有数据部署集群后的情况一样
 - 您希望添加大量最初驻留在单个数据块或分片中的数据。例如,您计划插入大量数据,这些数据的分片键值在
300到400之间,但是所有分片键的值在250到500之间都在一个块中(且落在一个分片上)。 
注意
MongoDB提供了
mergeChunks命令以将连续的块范围合并为一个块。有关更多信息,请参考在分片群集中合并数据块。
如果移动有利于接下来的插入,则平衡器可以立即将最近拆分的数据块迁移到新的分片上。平衡器不会区分是手动拆分的数据块还是系统自动拆分的数据块。
警告
在分片集合中拆分数据以创建新数据块时,请务必小心。当你对一个已有数据的集合进行分片操作时,MongoDB会自动创建数据块以均匀分布该集合。为了有效地在分片群集中拆分数据,必须考虑单个数据块中的文档数和平均文档大小才能创建统一的数据块大小。当数据块的大小不规则时,分片间可能具有相同数量的数据块,但它们的数据大小却大不相同。应避免由于创建时的拆分而导致的分片集合具有大小不同的数据块现象。
使用sh.status()来确定当前集群中的数据块范围
想要手动进行数据块的拆分,使用带middle或者find字段的split命令。mongos shell提供了sh.splitFind()和sh.splitAt()帮助方法。
splitFind()将包含与该查询匹配的返回的第一个文档的数据块拆分为两个大小相等的数据块。 您必须将分片集合的完整命名空间(即“<数据库>.<集合>”)指定给splitFind()。 splitFind()中的查询可以不使用分片键,尽管这样做几乎总是有意义的(指可以利用到分片键索引)。
示例
下面的命令对
records数据库的people集合为包含zipcode字段值为63109的数据块进行拆分:
sh.splitFind( "records.people", { "zipcode": "63109" } )
使用splitAt()将大块一分为二,将查询的文档用作新的块的下限:
示例
下面的命令对
records数据库的people集合为包含zipcode字段值为63109的数据块进行拆分:
sh.splitAt( "records.people", { "zipcode": "63109" } )注意
splitAt()不一定会将数据块平均为两个大小相等的块。拆分发生在于查询匹配的文档的位置,而不会考虑该文档在整个数据块中的位置。
另请参考空集合
原文链接:https://docs.mongodb.com/manual/tutorial/split-chunks-in-sharded-cluster/index.html
译者:刘翔
校对:徐雷
Copyright © 上海锦木信息技术有限公司 all right reserved,由 MongoDB汉化小组 提供技术支持文件修订时间: 2020-10-11 20:53:05
