MST

星途 面试题库

面试题:MongoDB中挑选合适片键需考虑哪些使用情况因素

在MongoDB分片环境下,依据常见的使用情况,如读写模式、数据分布特点等,阐述挑选合适片键时需要重点考虑的因素有哪些。
45.2万 热度难度
数据库MongoDB

知识考点

AI 面试

面试题答案

一键面试

数据分布均匀性

  1. 读写负载均衡:片键应能使数据在各个分片上均匀分布,避免某些分片负载过高,而其他分片闲置。例如按时间戳分片时,如果时间跨度较大且数据集中在近期,可能导致近期数据所在分片负载过重。
  2. 数据增长趋势:考虑数据未来的增长方向,确保片键能持续维持数据均匀分布。若业务数据持续按某个维度增长,如用户注册量随时间递增,以时间作为片键要考虑是否能在未来保持良好的分布。

读写模式

  1. 读操作
    • 范围查询:如果应用经常进行范围查询,片键应能有效支持。例如,电商应用常按订单金额范围查询订单,选择订单金额作为片键有助于提升查询效率,减少跨分片查询。
    • 随机读:对于随机读操作,片键的选择应尽量减少单个分片的热点读。例如,以用户ID随机分布在各分片,可分散读请求。
  2. 写操作
    • 写入频率:避免将写入频率高的字段作为片键,否则可能导致单个分片成为写热点。如在日志记录系统中,将记录时间作为片键可能造成写入集中在最新时间所在分片。
    • 批量写入:片键应支持批量写入高效执行,尽量减少写入时的跨分片操作,以提高写入性能。

数据关联性

  1. 关联查询:如果业务中存在关联查询,片键选择要尽量使关联数据分布在同一分片或少量分片内,减少跨分片的关联操作。例如订单与订单详情数据,若经常关联查询,可选择订单ID作为片键,确保订单及其详情数据在同一分片。
  2. 数据一致性:对于需要强一致性的数据,片键应保证相关数据在同一分片,便于维护一致性。如银行账户操作,账户相关的余额变更等数据应通过合适片键集中在同一分片。

基数

  1. 高基数与低基数:高基数片键有大量不同值,能更好实现数据均匀分布,但可能增加元数据管理开销;低基数片键值种类少,可能导致数据分布不均。例如以性别作为片键(低基数),数据可能集中在两个分片;以手机号作为片键(高基数),数据分布更均匀。需根据具体业务权衡。

稳定性

  1. 字段变更:选择的片键字段应相对稳定,不频繁变更。因为片键变更会导致数据在分片中重新分布,代价高昂。例如,若将用户昵称作为片键,而昵称可能频繁修改,不适合作为片键。