MST

星途 面试题库

面试题:MongoDB多热点片键设计中常见热点产生原因及简单应对策略

在MongoDB多热点片键设计场景下,请阐述常见的导致片键热点产生的原因有哪些?并针对每种原因,简要说明一种相对简单的应对策略。
35.8万 热度难度
数据库MongoDB

知识考点

AI 面试

面试题答案

一键面试

导致片键热点产生的原因及应对策略

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