我正在编写一个应用程序,它具有类似于 Google Circle/FB 好友列表的某些功能。
- 用户可以将他们认识的人分组(家人、同事、朋友等)(目前不能嵌套组)
- 用户可以向群组发送消息、为每个群组设置隐私设置等
- 当帖子在组内共享时,这些组的用户可以评论并查看其他人的评论,无论他们与其他人(在该组内)的关系如何
目前,由于时间和资源的限制,我们正在使用关系数据库(mysql)。无论如何,我都在努力寻找构建数据库以平衡性能和清晰度的最佳方式。这是我们目前拥有的:
users:
user_id
default_group_id
friend_group_id
groups:
group_id
groups_to_users:
user_id
group_id
messages:
message_id
messages_to_groups:
message_id
group_id
galleries_to_groups:
gallery_id
group_id
首次创建用户时,他/她将有 2 个基本组:
- 仅包含该单个用户的默认组
- 将包含他/她是朋友的每个人的朋友组
我们将简单地使用 group_id 来确定“权限”,而不是使用 user_id。这样我们就可以跳过查询 2 个表的复杂性。
同时,使用上面的结构,我们也遇到了查询用户收到的所有消息的障碍,因为如果该用户有 100 个朋友,我们可能必须查询至少 100 个组。所以现在我们通过这个相当老套的方法来解决这个问题:
如果用户向组发送消息,那么我们会遍历该组中的成员列表并为每个用户保存一条记录(message_id,(default_)group_id)。问题是,如果该组有 1000 多个成员,那么我们必须为发送到该组的每条新消息插入 1000 多个记录,并且当该用户对组成员进行任何更改时,我们还必须更新大量的记录。
我想知道是否有更好的方法来构建我们的数据库以提高性能?