分片机制概述
MongoDB 的分片是一种水平扩展技术,用于将大型数据集分割成更小的部分,分布在网络中的多个服务器(即分片)上,以提高性能和可扩展性。分片机制的核心是将数据块(chunks)分散到不同的分片上,以便实现负载均衡。
平衡策略变化
自MongoDB 6.0.3版本起,分片集群中数据的分布方式经历了显著变化:
迁移阈值与Chunk的变化
迁移阈值的变化
Chunk管理的变化
开启集合分片变化
创建集合分片前无需对db执行enableSharding操作
集合分片查询变化
1、不再显示集合分片信息
> sh.status()
2、查询集合分片情况
下面的SQL将"MOnoDB"更换为所需要查询的DB名称即可
var dbName = "MOnoDB";
db.getSiblingDB(dbName).getCollectionNames().forEach(function(collName) {
print("————————————————————————");
print("Collection: " + collName);
db.getSiblingDB(dbName).getCollection(collName).getShardDistribution();
});
3、无需关注之前的chunk数据块,只需关注集合的大小
Collection: prom_report
Shard d-88888894 at mgset-78435829/21.0.0.37:3000,21.0.0.39:3000
data : 1.78GiB docs : 1526137 chunks : 0
estimated data per chunk : InfinityGiB
estimated docs per chunk : Infinity
Shard d-2ze567564 at mgset-78435832/21.0.0.42:3000,21.0.0.45:3000
data : 1.84GiB docs : 1536972 chunks : 0
estimated data per chunk : InfinityGiB
estimated docs per chunk : Infinity
Shard d-2z5756704 at mgset-78435831/21.0.0.46:3000,21.0.0.48:3000
data : 2.37GiB docs : 2128734 chunks : 0
estimated data per chunk : InfinityGiB
estimated docs per chunk : Infinity
Totals
data : 6GiB docs : 5191843 chunks : 0
Shard d-88888894contains 29.7% data, 29.39% docs in cluster, avg obj size on shard : 1KiB
Shard d-2ze567564 contains 30.78% data, 29.6% docs in cluster, avg obj size on shard : 1KiB
Shard d-2z5756704 contains 39.5% data, 41% docs in cluster, avg obj size on shard : 1KiB
总结
这些变化反映了MongoDB在分片机制上的持续优化,目的是为了提供更高效、更平衡的数据分布,减少不必要的数据块分裂,简化集群管理,同时增强数据分布的均匀性和性能。通过关注数据范围而非数据块,MongoDB的分片机制变得更加智能和灵活,有助于提高大规模数据集的处理能力和可扩展性。