面试题答案
一键面试MongoDB中片键选择的一般规则
- 分布均匀性:片键应能确保数据在各个分片上均匀分布。避免数据倾斜,即大部分数据集中在少数几个分片上,影响性能和扩展性。例如,如果选择一个只有少数几个固定值的字段作为片键,那么拥有相同值的数据会集中在同一个分片上。
- 单调性:如果选择单调递增或递减的字段作为片键,如时间戳字段,新插入的数据会持续追加到某一个分片上,可能导致数据倾斜。但在某些特定场景下,如主要进行追加写操作,且后续查询也是按时间范围进行的,这种单调性片键也可接受。
- 查询相关性:片键字段应与常见查询条件相关,这样查询时可以快速定位到相关分片,减少跨分片查询的开销。例如,如果经常按用户ID查询数据,选择用户ID作为片键就比较合适。
- 基数合适:片键值的基数(不同值的数量)既不能太小(导致数据倾斜),也不宜过大(增加元数据管理开销)。合适的基数能在保证数据均匀分布的同时,有效管理分片元数据。
适合作为片键的字段类型及其原因
字段类型:地理位置信息(如经纬度组合)。 原因:
- 分布均匀:地球上的地理位置分布广泛,不同的经纬度组合几乎是无限的,能够保证数据在各个分片上均匀分布,避免数据倾斜。
- 查询相关性:在许多与地理信息相关的应用中,如位置服务、基于位置的社交网络等,经常会根据地理位置进行查询,如查找某个区域内的用户或地点。以地理位置信息作为片键,可以快速定位到包含相关地理数据的分片,提高查询效率。