面试题答案
一键面试导致片键热点产生的原因及应对策略
- 单调递增的片键
- 原因:如使用时间戳、自增ID等单调递增的字段作为片键,新写入的数据会持续发往同一分片,导致该分片负载过高形成热点。
- 应对策略:采用哈希分片,对单调递增的字段进行哈希运算,将数据均匀分布到各个分片。例如对时间戳字段
timestamp
,使用hash(timestamp)
作为片键。
- 不均匀的数据分布
- 原因:数据本身在某些值上分布不均匀,比如某个业务字段的特定值出现频率极高,若以此为片键,包含该值的数据会集中在某个分片。
- 应对策略:引入额外的随机前缀或后缀。例如,业务字段
category
分布不均匀,在插入数据时,给category
字段添加随机前缀randomPrefix + category
作为片键,使数据更均匀分布。
- 高并发写入同一范围
- 原因:应用程序在高并发场景下,大量写入操作集中在片键的某一范围,造成该范围对应的分片成为热点。
- 应对策略:将大的写入操作拆分成多个小的写入任务,并分散在不同的时间段执行,降低同一时间对特定范围的写入压力。