Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
418 views
in Technique[技术] by (71.8m points)

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

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

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就麻烦了。。。。还是存在问题


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

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

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


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...