MST

星途 面试题库

面试题:MongoDB数据均衡中shard key的作用及选择原则

在MongoDB数据均衡机制里,shard key起着关键作用。请阐述shard key是什么,它对数据均衡有怎样的影响,以及在实际应用中选择shard key应遵循哪些原则?
41.0万 热度难度
数据库MongoDB

知识考点

AI 面试

面试题答案

一键面试

1. shard key 是什么

shard key 是 MongoDB 在进行数据分片时用于决定文档应被分配到哪个分片(shard)的字段或字段集合。它就像是一把“钥匙”,通过对文档中这个特定字段或字段组的值进行计算,从而确定该文档在整个分片集群中的存储位置。

2. 它对数据均衡的影响

  • 数据分布:shard key 直接决定数据在各个分片上的分布情况。如果 shard key 选择合理,数据会相对均匀地分布在各个分片上,实现负载均衡。例如,若以时间戳字段作为 shard key,随着时间推移,新数据会按时间先后均匀地分布到不同分片。
  • 读写性能:合理的 shard key 能将读写操作均匀分摊到不同分片,避免单个分片负载过高。例如按地理位置分片,查询不同地区数据时,负载会分散到相应地理位置对应的分片上,提高整体读写性能。若 shard key 选择不当,可能导致数据倾斜,部分分片负载过重,影响集群性能。

3. 在实际应用中选择 shard key 应遵循的原则

  • 基数原则:shard key 应该有较高的基数,即它的值应该有足够多的不同取值。这样可以保证数据在分片上更均匀地分布。例如,用用户 ID 作为 shard key 就比用性别(只有男/女两种取值)更合适,因为用户 ID 有大量不同的值,能更好地分散数据。
  • 访问模式原则:要结合应用的访问模式来选择 shard key。如果应用经常按某个字段进行查询,那么该字段或包含该字段的组合作为 shard key 可能更合适。例如,电商应用经常按订单号查询订单,订单号就可考虑作为 shard key 或 shard key 的一部分,这样查询时能快速定位到包含相关订单数据的分片。
  • 避免热点原则:避免选择可能产生热点数据的字段作为 shard key。例如,如果应用大部分读写操作都集中在某个时间段内的数据,以时间戳作为单一 shard key 可能导致新数据集中在少数分片上,产生热点。此时可结合其他字段,如用户 ID + 时间戳,分散热点。
  • 稳定原则:shard key 一旦确定,尽量不要修改。因为修改 shard key 需要对整个集群的数据进行重新分布,这是一个非常消耗资源且可能影响系统正常运行的操作。