MST

星途 面试题库

面试题:MongoDB中片键选择对数据分布的影响

请阐述在MongoDB中,不同类型的片键(如单调递增片键、随机片键等)是如何影响数据在集群中的分布的,并举例说明每种片键适用的场景。
30.2万 热度难度
数据库MongoDB

知识考点

AI 面试

面试题答案

一键面试

单调递增片键

  1. 对数据分布的影响
    • 数据会按照片键值的顺序依次分布在各个分片上。随着片键值单调递增,新的数据会不断添加到最后一个分片上。这可能导致数据写入热点,即最后一个分片承受过多的写操作,而其他分片利用率较低。例如,假设片键是时间戳字段,随着时间推移,新产生的数据都具有更大的时间戳值,这些数据都会被写入到最新的分片区域。
  2. 适用场景
    • 日志记录:如应用程序的日志数据,通常按时间顺序产生。使用单调递增的时间戳作为片键,可以让新的日志数据依次写入,并且便于按时间范围查询,例如快速查询最近一段时间内的日志。
    • 订单流水:订单数据一般按订单生成时间顺序产生,使用单调递增的订单生成时间作为片键,适合按订单时间进行分析和查询,如统计某时间段内的订单量。

随机片键

  1. 对数据分布的影响
    • 数据会较为均匀地分布在各个分片上。因为片键值是随机的,每个分片接收新数据的概率相对均衡,避免了某个分片成为写入热点。例如,使用UUID(通用唯一识别码)作为片键,UUID的生成是随机的,所以数据会随机分布在不同分片上。
  2. 适用场景
    • 实时数据分析:在实时收集大量数据并进行分析的场景下,如物联网设备实时上传的数据。使用随机片键能确保数据均匀分布,避免单个分片过载,保证系统的高并发写入性能。
    • 在线游戏数据:例如游戏中的玩家实时状态数据,每个玩家的状态更新都是随机的,使用随机片键可以使数据均匀分布在集群中,支持大量玩家同时在线的高并发场景。