下面首先是我由Ops Manager创建的分片集群:
我有2个Mongos和2个Shard(每个shard配置重复集)。我没有配置任何分片键,我的意思是我的群集中没有分片集合esxit。
当我使用mongos插入数据库以进行测试时,数据库只存储一个Shard。
所以我想在插入数据库时,数据可以在两个分片上分割并存储余额。我可以从mongos查询以获得准确的数据。
有人有同样的问题吗?
您需要实现区域范围,以便根据范围为每个碎片存储数据。
代码波纹管可帮助您创建区域:
对于zone01:
sh.addShardTag("rs1", "zone01")
sh.addTagRange("myDB.col01", { num: 1 }, { num: 10 }, "zone01")
对于zone02:
sh.addShardTag("rs2", "zone02")
sh.addTagRange("myDB.col01", { num: 11 }, { num: 20 }, "zone02")
这将帮助你Manage Shard Zones
数据库和集合不会自动分片:分片部署可以包含未分片和分片数据。对于给定的数据库,将在primary shard上创建非聚合集合。
如果要对集合进行分片,则需要在连接到mongo
进程的mongos
shell中执行几个步骤以进行分片部署:
sh.enableSharding(<database>)
(这是每个数据库的一次性操作)sh.shardCollection()
有关具体步骤,请参阅MongoDB手册中的Shard a Collection。
为数据分发和用例选择一个好的分片键非常重要。选择糟糕的分片键可能会导致数据分布不均或限制分片性能。 MongoDB文档提供了有关选择分片键的注意事项和选项的更多信息。
如果您不确定集合是否收集了分片或想要查看当前数据分布的摘要,则可以在db.collection.getShardDistribution()
shell中使用mongo
。