MST

星途 面试题库

面试题:MongoDB片键设计中基数的重要性及一般原则

在MongoDB片键设计里,基数扮演着怎样的角色?请阐述选择片键时关于基数的一般原则。
22.8万 热度难度
数据库MongoDB

知识考点

AI 面试

面试题答案

一键面试

基数在 MongoDB 片键设计中的角色

  1. 数据分布均匀性:基数指的是一个字段中不同值的数量。基数较高意味着有较多不同的值,这有助于在分片集群中更均匀地分布数据。例如,如果以用户 ID 作为片键,由于每个用户 ID 通常是唯一的,基数高,数据能均匀分散在各个分片上,避免数据倾斜。
  2. 查询性能:合适基数的片键能优化查询性能。当查询条件与片键相关时,MongoDB 可以快速定位到包含相关数据的分片。若片键基数过低,大量查询可能集中在少数分片上,导致负载不均衡,影响整体性能。

选择片键时关于基数的一般原则

  1. 避免过低基数:避免选择基数极低的字段作为片键,如性别字段(通常只有“男”“女”两个值)。低基数片键会导致大部分数据集中在少数几个分片上,造成数据倾斜,降低系统的扩展性和查询性能。
  2. 适度高基数:选择具有适度高基数的字段作为片键。例如,时间戳字段(精确到秒或更小粒度)在一定时间范围内有较多不同值,适合作为片键。它既能保证数据相对均匀分布,又能利用时间序列相关的查询特性。但基数也并非越高越好,过高基数(如 UUID)可能导致数据过于分散,在一些聚合查询等场景下性能不佳。
  3. 结合业务场景:要结合业务查询模式来选择片键基数。如果业务经常按某个特定范围查询,如按日期范围查询订单数据,那么选择日期相关字段作为片键,即使基数不是极高,但只要能满足业务查询需求且保证数据分布相对合理即可。