8.3. 分片策略

MongoDB 支持两种分片策略:Hash 分片和范围分片

Hash 分片

Hash 分片策略会先计算分片 Key 字段值的哈希值;然后,根据分片键值为每个 chunk (opens new window)分配一个范围。

注意:使用哈希索引解析查询时,MongoDB 会自动计算哈希值,应用程序不需要计算哈希。

尽管分片 Key 范围可能是“接近”的,但它们的哈希值不太可能在同一 chunk (opens new window)上。基于 Hash 的数据分发有助于更均匀的数据分布,尤其是在分片 Key 单调更改的数据集中。但是,Hash 分片意味着对分片 Key 做范围查询时不太可能针对单个分片,从而导致更多的集群范围内的广播操作。

范围分片

范围分片根据分片 Key 值将数据划分为多个范围。然后,根据分片 Key 值为每个 chunk (opens new window)分配一个范围。

值比较近似的一系列分片 Key 更有可能驻留在同一 chunk (opens new window)上。范围分片的效率取决于选择的分片 Key。分片 Key 考虑不周全会导致数据分布不均,这可能会削弱分片的某些优势或导致性能瓶颈。