MongoDB文档说当一个服务器/副本不足以存储所有数据时,应该使用分片。
鉴于可以扩展到100GB和100GB的数据集。 1GB并在两个数据集上执行相同的查询,我们可以说 -
在每个20GB的5个分片中分别削减100GB,相当于在每个200MB的5个分片中分割1GB。比例因子是否会影响Mongo执行分片的方式?如果是,将在何处观察变化?
答案 0 :(得分:0)
鉴于可以扩展到100GB和100GB的数据集。 1GB并在两个数据集上执行相同的查询,我们可以说 -
在每个20GB的5个分片中分别削减100GB,相当于在每个200MB的5个分片中分割1GB
从高级视图来看,sharded cluster architecture在两个示例中都可能类似:5个分片,3个配置服务器和一些mongos
个进程。我会毫不犹豫地称之为“等效”,就像轻便摩托车不等同于摩托车一样,虽然两者都是这种类比的两轮车,所以解释取决于你的观点。
但是,当然可以从配置了资源(RAM / CPU /存储)的5个分片群集开始,以满足特定的预期工作负载,然后使用资源升级(或降级)相同的群集,以满足不断变化的使用要求情况下。
比例因子会影响Mongo执行分片的方式吗?如果是,将在何处观察变化?
基于分片数据量的主要行为差异将是sharded cluster balancing活动。平衡基于块,块是逻辑连续的分片键值范围,默认情况下表示大约64MB的数据。
根据分片与最少和最多块之间的差异以及分片集合中的块总数,使用migration threshold来触发分片之间的块平衡:
| Number of Chunks | Migration Threshold |
|====================|=====================|
| Fewer than 20 | 2 |
| 20-79 | 4 |
| 80 and greater | 8 |
每个分片只有100MB的数据,大概是2个块(或整体约10个)。
每个分片有20GB的数据,每个分片至少会有312个块(可能更多,因为块是抢先分裂而不是总是满的。)
如果您选择一个好的分片密钥来有效地跨分片分发数据,则不应经常需要重新平衡。另一方面,糟糕的分片键需要更频繁的平衡,并且由于额外的I / O开销,问题在规模上会更加明显。