mysql - 类似于之类的通知系统如何设计数据库
问题描述
最近打算实现一个通知系统。就像segmentfault差不多。比如那个人顶了你的答案。那个人采纳了你的答案等。
而这些情况很多的时候如何去设计数据库的字段呢?
保存的时候需要保存关系吗?还是直接生成一个消息。显示消息就行了??
最近做这个。好迷茫的感觉
问题解答
回答1:可以使用 redis 的集合.
首先设置各种事件,比如0:关注1:采纳2:赞3:邀请
redis 中每个人的有一个集合. uid 为集合名
假设有如下事件:1.用户 A 赞了你在某个题目下的回答.2.用户 B 邀请你回答某个问题
redis集合中就保存:0:Auid:问题id3:Buid:问题id
回答2:谢邀。本人也没有相关经验。
建议保存关系,这对以后的数据分析比较有利。
redis是应用层面的优化,可以参考一下@悲惨的大爷 的答案。
SQL表有2种维度:第一种:只记录用户的关注, 采纳, 赞, 邀请的数量
id(pk) | user_id | count | type(user_id + type)做唯一索引;优点:简单;缺点:只能看到用户收到多少关注,但不知道收到谁的关注;
第二种:在第一种的基础上把count字段换成another_user_id(这个名称不好,随便想的,不要参考)(user_id + another_user_id + type)做唯一索引;优点:可以知道该用户被谁关注了;缺点:表数据量增长会很快,容易上千万甚至亿级,而且不便统计(性能差);
但第二种的缺点也不是不可解决,分库分区、水平分表、另起一个表专门存储统计数据等等,若干方法,等有需要的时候再考虑这个问题吧。
以上方案,视乎你们对业务的需求吧。
可能有更好的方法,此处仅供参考。
相关文章:
1. mysql - 以某网游举例子,谈数据库,这是我的猜想2. 关于用java中正则表达式匹配单个字符3. node.js - nodejs+express+vue4. html - 前端大牛都顶一下!CSS鼠标样式问题,如图所示5. mysql - 有张订单表,假设有个2个手机号,每个手机号都有5个订单,如何用一个sql实现每个手机号随机取3个订单?6. javascript - 百度地图一开始设置了中心点,怎么通过按钮在调转到对应的中心点????7. android - 微信的@功能如何实现的?8. css - div设置float:left后高度设置自动会无效 ?9. 微信浏览器怎么取消缓存?10. css - 为什么父级宽度固定且居中,但 input width: 100% 超出父级范围
