zone区域
管理分片区域
在分片集群中,您可以创建代表一组分片的区域,并将一个或多个分片键值范围与该区域关联。MongoDB 只会将属于区域范围内的读取和写入路由到区域内的分片。
将分片添加到区域
当连接到mongos实例时,使用sh.addShardToZone()方法将Zone与特定的shard相关联。单个碎片可能具有多个区域,多个碎片也可能具有相同的区域。
以下示例将区域NYC添加到两个碎片,将区域SFO和NRT添加到第三个碎片: sh.addShardToZone("shard0000", "NYC") sh.addShardToZone("shard0001", "NYC") sh.addShardToZone("shard0002", "SFO") sh.addShardToZone("shard0002", "NRT")
当连接到mongos实例时,您可以使用sh.removeShardFromZone()方法从特定碎片中删除区域,如以下示例所示,该示例从碎片中删除NRT区域:
sh.removeShardFromZone("shard0002", "NRT")
创建区域范围
要定义区域的分片键范围,请在连接到mongos
实例时使用该sh.updateZoneKeyRange()
方法。任何给定的分片键范围只能有一个指定区域。您不能重叠定义的范围。
在记录数据库中给定一个名为users的集合,由zipcode字段进行分片。以下操作分配:
曼哈顿和布鲁克林的两个邮政编码NYC区域
旧金山的一个邮政编码SFO区域
sh.updateZoneKeyRange("records.users", { zipcode: "10001" }, { zipcode: "10281" }, "NYC")
sh.updateZoneKeyRange("records.users", { zipcode: "11201" }, { zipcode: "11240" }, "NYC")
sh.updateZoneKeyRange("records.users", { zipcode: "94102" }, { zipcode: "94135" }, "SFO")
区域范围始终包括下边界但不包括上边界。
删除集合会删除其关联的区域/标签范围。
删除区域范围
使用 shell 辅助方法sh.removeRangeFromZone()
从区域中删除范围。
sh.removeRangeFromZone("records.user", {zipcode: "10001"}, {zipcode: "10281"})
删除集合会删除其关联的区域/标签范围。
查看现有区域
使用sh.status()列出与集群中每个碎片关联的区域。您还可以通过查询配置数据库中的碎片集合来查看碎片区域。
以下示例使用该find()
方法返回该NYC
区域的所有分片。
use config db.shards.find({ tags: "NYC" })
您可以在配置数据库的标记集合中找到所有命名空间的区域范围。sh.status()的输出还显示所有区域范围。
下面的示例使用该find()
方法返回与NYC
区域相关的任何范围。
use config db.tags.find({ tag: "NYC" })
更新现有分片区域
sh.stopBalancer()
从区域中删除当前的 NYC 范围
sh.removeRangeFromZone("records.user", { zipcode: "10001" }, { zipcode: "10281" } )
更新纽约区域的区域键范围
sh.updateZoneKeyRange("records.users", { zipcode: "11201" }, { zipcode: "11240" }, "NYC" )
重启平衡器
sh.startBalancer()
按块划分数据
MongoDB 使用与集合关联的分片键将数据划分为特定分片所拥有的区块。区块由一系列分片数据组成。范围可以是区块的一部分或整个区块。平衡器在分片之间迁移数据。每个区块都有基于分片键的包含下限和排除上限。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了