真实查system.clusters看清楚shard_num和replica_num是两个独立维度,说明混淆分片和副本会导致对集群数据量的错误理解。
代码SELECT cluster, shard_num, replica_num, host_name, port FROM system.clusters WHERE cluster='mycluster';
shard_num replica_num host port 1 1 127.0.0.1 19110 ← node1,分片1的第1个副本 1 2 127.0.0.1 19120 ← node2,分片1的第2个副本 2 1 127.0.0.1 19130 ← node3,分片2的第1个副本
真实的拓扑是:shard_num只有1和2两个值——意味着数据被真实切成了两个不重叠的子集;replica_num在shard_num=1下有两个值(1和2)、shard_num=2下只有一个值——意味着分片1的数据真实保存了2份拷贝(在node1和node2上),分片2的数据真实只有1份拷贝(在node3上)。
每一步都是本文上面用真实system.clusters跑出来的原始结果。
system.clusters(shard_num/replica_num)