MongoDB中的比例因子会影响分片吗?

时间:2015-04-23 01:24:35

标签: mongodb scale sharding

MongoDB文档说当一个服务器/副本不足以存储所有数据时,应该使用分片。

鉴于可以扩展到100GB和100GB的数据集。 1GB并在两个数据集上执行相同的查询,我们可以说 -

在每个20GB的5个分片中分别削减100GB,相当于在每个200MB的5个分片中分割1GB。比例因子是否会影响Mongo执行分片的方式?如果是,将在何处观察变化?

1 个答案:

答案 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开销,问题在规模上会更加明显。