面试题答案
一键面试MongoDB片键分发基本原理
- 目的:MongoDB 采用分片技术将数据分布在多个服务器(分片)上,以实现水平扩展。片键是决定数据如何分布到各个分片上的关键因素。
- 工作方式:当写入数据时,MongoDB 根据文档中的片键值计算出一个哈希值(对于哈希片键直接计算哈希,对于范围片键按其值的范围规则),然后根据这个哈希值或范围将文档路由到对应的分片上。每个分片负责存储一部分按片键划分的数据,查询时也依据片键快速定位到相关分片获取数据。
不同类型片键在数据分布上的区别
- 哈希片键
- 分布特点:哈希片键通过对片键值计算哈希值来决定数据分布。这种方式能实现数据较为均匀的分布在各个分片上,无论片键值的实际分布情况如何。它可以有效避免数据热点,因为每个哈希值都有大致相同的概率被分配到任何一个分片。
- 适用场景:适用于写操作频繁且希望均匀分布负载的场景,比如日志记录系统,新数据不断写入,哈希片键能让数据均匀落在不同分片,减少单个分片的写入压力。
- 范围片键
- 分布特点:范围片键根据片键值的范围来分布数据。具有相近片键值的数据会被存储在同一个分片上。随着数据的增长,可能会在某一个或几个分片上形成数据热点,因为新插入的数据如果片键值集中在某一范围,会持续写入特定分片。
- 适用场景:适用于基于范围查询频繁的场景,例如按时间范围查询的业务数据,使用时间作为范围片键,查询某时间段内的数据时,只需要访问存储该时间范围数据的分片,提高查询效率。