面试题答案
一键面试用户信息集合
- 片键选择:
- 用户ID:以用户ID作为片键较为合适。因为在社交网络中,大部分对用户信息的操作都与特定用户相关,例如根据用户ID查询用户资料。按用户ID分片,可直接定位到对应的分片,减少查询范围。
- 对系统扩展性和读写性能的影响:
- 扩展性:当用户量增加时,可通过增加分片来均匀分配负载,因为用户ID是唯一标识,能保证数据均匀分布在不同分片中,易于扩展。
- 读写性能:读操作方面,由于可直接根据用户ID定位分片,读性能较好。写操作时,如果是新增用户,也能快速确定写入的分片;但如果涉及更新用户信息,可能会因为缓存等因素影响写入性能,但总体来说读写性能都较为高效。
动态发布集合
- 片键选择:
- 发布者ID:选择发布者ID作为片键。在查询用户动态时,根据发布者ID可快速定位到包含该用户动态的分片。例如,要查询某个用户发布的所有动态,以发布者ID分片可快速找到相关数据。
- 也可考虑动态ID:如果业务中有大量根据动态ID进行的操作,如查看特定动态详情,也可选择动态ID作为片键。
- 对系统扩展性和读写性能的影响:
- 扩展性:以发布者ID分片,当用户发布动态量增加时,通过增加分片可分摊负载。但如果某些用户发布动态量远高于其他用户,可能导致数据分布不均,影响扩展性。若以动态ID分片,能更好地均匀分布数据,扩展性更好。
- 读写性能:以发布者ID分片,查询用户动态的读性能较好;写操作时,发布新动态能快速确定分片。若以动态ID分片,查询特定动态详情读性能高,但查询用户所有动态时可能需跨分片查询,读性能可能受影响。写操作方面,两者都能较高效写入。
好友关系集合
- 片键选择:
- 用户ID:以用户ID作为片键。在获取好友列表时,根据用户ID可快速定位到存储该用户好友关系的分片。例如,要获取某个用户的好友列表,以用户ID分片能快速找到相关数据。
- 对系统扩展性和读写性能的影响:
- 扩展性:当用户好友关系数据量增加时,通过增加分片可分摊负载。由于用户ID唯一,能保证数据均匀分布在不同分片中,扩展性较好。
- 读写性能:读操作时,获取好友列表能快速定位分片,读性能好。写操作时,添加好友关系可快速确定分片写入,读写性能都较为高效。