团队/用户/消息提醒,数据库及设计模式探讨

业务很简单:
组建团队,用户可被拉入多个团队,每次拉入或移出的时候有消息通知;
数据库设计:

team{id,uids}
user{id,tids}
msg{id,uid,title,content,status}

实际操作:
新建一个团队,team表更新一条数据,user表/msg表同时更新几条数据

最大的坑如下:
team表更新后,user表/msg表需要更新多条数据,循环里面更新数据库会影响性能;

目前利用mysql的WHEN THEN语句绕过了这个坑,不知道大家是怎么设计这种功能的;
另,利用redis把消息记录到硬盘而后再存数据库会不会提高性能呢?

更新下,出现的问题刚刚有人说没做过一下看不明白,我描述下当前的实现思路让大家更直观点:
提交数据更新(tid=7) =》
判断team是否有user变动 =》
若有,比较提交过来的n_uids(3,4,5)和原uids(1,2,3),结果放在c_uids =》
这里还要做比较,得出增(4,5)/删的uid(1,2) =》
循环c_uid,更新user表(1,2删除tids里面的7;4,5增加7)、msg表(...)

一楼给出的建议非常值得去尝试下,在此感谢各位的回答。

======================
按一楼的表设计,
user{id}
group{id,uids,tid}
team{id}
增删倒是没什么问题
但是读user所在的team就麻烦了。。。。还是存在问题

阅读 3.2k
2 个回答

MSG表可以和team表做关联,添加team id 和 action字段(移除增添组)
team 和 user属于多对多的关系,所以应该做多一张表,作为两个表的关联
这样team表和user在改动时候就不会出现多表修改

至于redis的话,你用户量较多,或者添加人员和删除人员频率多时候,可以考虑将信息保存redis,前端使用监听事件去轮询信息修改记录

用消息队列啊,team更新数据的时候触发一个时间扔到队列里面去,然后队列里面做通知的业务

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题