MST

星途 面试题库

面试题:MongoDB中片键基数的概念及影响

请阐述MongoDB中片键基数的概念,以及它对分片集群性能有怎样的影响?
28.1万 热度难度
数据库MongoDB

知识考点

AI 面试

面试题答案

一键面试

片键基数概念

片键基数指的是片键所包含的唯一值的数量。在MongoDB分片集群中,片键用于决定文档被分配到哪个分片上。例如,如果以“user_id”作为片键,那么“user_id”所有不同值的数量就是该片键的基数。

对分片集群性能的影响

  • 基数高
    • 数据分布均匀:当片键基数高时,数据在各个分片上的分布会相对均匀。例如,以时间戳精确到毫秒作为片键,由于时间值的唯一性很强,基数高,数据会均匀分布在不同分片上。这样可以有效避免某个分片负载过高,提升整体集群的读写性能。
    • 查询效率提升:对于范围查询,如果片键基数高且分布合理,查询请求可以并行发送到多个分片上同时处理,提高查询的响应速度。例如,按时间范围查询日志数据,高基数的时间片键能让查询在多个分片并行执行。
  • 基数低
    • 数据分布不均:若片键基数低,可能导致大量数据集中在少数几个分片上。比如以“status”字段(只有“active”和“inactive”两个值)作为片键,大部分文档可能会集中在某一个或几个分片,造成分片负载不均衡,影响整体性能。
    • 查询性能受限:低基数片键在范围查询时,可能由于数据集中在少数分片,无法充分利用集群并行处理能力,导致查询效率低下。