面试题答案
一键面试选择合适片键的方法
- 基于时间字段:
- 如果应用有时间相关的字段,比如日志记录时间戳。选择时间字段作为片键,如
createdAt
。这是因为数据通常按时间顺序写入,时间戳递增,这样新写入的数据会均匀分布到各个分片上。随着时间推移,数据持续增长,新的数据会不断分配到不同分片,避免单个分片写入压力过大。
- 如果应用有时间相关的字段,比如日志记录时间戳。选择时间字段作为片键,如
- 基于高基数字段:
- 若数据中有唯一标识或基数较高的字段,如用户ID。选择这类字段作为片键,可使数据基于不同的ID值均匀分布。在高写入量场景下,不同用户的写入操作会分散到不同分片,防止数据倾斜。例如在社交应用中,以用户ID作为片键,每个用户的消息、动态等写入操作会分布到不同分片。
对性能和数据分布的影响
- 性能方面:
- 写入性能:合适的片键能有效提升写入性能。基于时间字段或高基数字段作为片键,写入操作能均匀分散到各分片,避免单个分片成为写入瓶颈。在高写入量场景下,减少了写入等待时间,提升整体写入速度。
- 读取性能:若查询经常基于片键字段,如按时间范围查询日志或按用户ID查询用户相关数据,由于数据按片键均匀分布,查询可快速定位到相关分片,提升读取效率。但如果查询不涉及片键字段,可能需要扫描多个分片,影响读取性能。
- 数据分布方面:
- 均匀性:恰当选择片键能确保数据在各分片间均匀分布。基于时间或高基数字段的片键,新写入数据会依据片键值均匀分配到不同分片,避免数据集中在少数分片,实现数据的良好平衡。
- 扩展性:随着数据量持续增长,以合适片键构建的分片方案可轻松扩展。新的分片可按需添加,数据可根据片键值重新平衡分布到新分片中,维持系统的高性能运行。