MST

星途 面试题库

面试题:MongoDB复杂业务场景下片键选型及影响

在一个社交网络应用中,有用户信息集合、动态发布集合和好友关系集合。用户信息包含用户ID、用户名、注册时间等;动态发布包含动态ID、发布者ID、发布时间、内容等;好友关系包含用户ID、好友ID。针对不同集合,结合业务操作(如查询用户动态、获取好友列表等),如何选择合适的片键,以及片键选择对系统扩展性和读写性能的影响是什么?
24.0万 热度难度
数据库MongoDB

知识考点

AI 面试

面试题答案

一键面试

用户信息集合

  1. 片键选择
    • 用户ID:以用户ID作为片键较为合适。因为在社交网络中,大部分对用户信息的操作都与特定用户相关,例如根据用户ID查询用户资料。按用户ID分片,可直接定位到对应的分片,减少查询范围。
  2. 对系统扩展性和读写性能的影响
    • 扩展性:当用户量增加时,可通过增加分片来均匀分配负载,因为用户ID是唯一标识,能保证数据均匀分布在不同分片中,易于扩展。
    • 读写性能:读操作方面,由于可直接根据用户ID定位分片,读性能较好。写操作时,如果是新增用户,也能快速确定写入的分片;但如果涉及更新用户信息,可能会因为缓存等因素影响写入性能,但总体来说读写性能都较为高效。

动态发布集合

  1. 片键选择
    • 发布者ID:选择发布者ID作为片键。在查询用户动态时,根据发布者ID可快速定位到包含该用户动态的分片。例如,要查询某个用户发布的所有动态,以发布者ID分片可快速找到相关数据。
    • 也可考虑动态ID:如果业务中有大量根据动态ID进行的操作,如查看特定动态详情,也可选择动态ID作为片键。
  2. 对系统扩展性和读写性能的影响
    • 扩展性:以发布者ID分片,当用户发布动态量增加时,通过增加分片可分摊负载。但如果某些用户发布动态量远高于其他用户,可能导致数据分布不均,影响扩展性。若以动态ID分片,能更好地均匀分布数据,扩展性更好。
    • 读写性能:以发布者ID分片,查询用户动态的读性能较好;写操作时,发布新动态能快速确定分片。若以动态ID分片,查询特定动态详情读性能高,但查询用户所有动态时可能需跨分片查询,读性能可能受影响。写操作方面,两者都能较高效写入。

好友关系集合

  1. 片键选择
    • 用户ID:以用户ID作为片键。在获取好友列表时,根据用户ID可快速定位到存储该用户好友关系的分片。例如,要获取某个用户的好友列表,以用户ID分片能快速找到相关数据。
  2. 对系统扩展性和读写性能的影响
    • 扩展性:当用户好友关系数据量增加时,通过增加分片可分摊负载。由于用户ID唯一,能保证数据均匀分布在不同分片中,扩展性较好。
    • 读写性能:读操作时,获取好友列表能快速定位分片,读性能好。写操作时,添加好友关系可快速确定分片写入,读写性能都较为高效。