参考
https://www.harris1024.com/archives/71.html
https://www.jianshu.com/p/e37bd781e6dd
创建表
消息表
CREATE TABLE user_message (
id bigint(15) NOT NULL AUTO_INCREMENT COMMENT '主键',
uid bigint(15) DEFAULT NULL COMMENT '用户id',
content varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL,
picture varchar(200) CHARACTER SET utf8 COLLATE utf8_unicode_ci DEFAULT '' COMMENT '图片',
location varbinary(100) DEFAULT '' COMMENT '位置',
create_time datetime DEFAULT NULL COMMENT '创建日期',
PRIMARY KEY (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
朋友圈展示时间轴
CREATE TABLE user_friend_timeline (
id int(10) NOT NULL,
uid int(10) NOT NULL COMMENT '用户id',
message_id int(10) DEFAULT NULL COMMENT '消息id',
message_uid int(11) DEFAULT NULL COMMENT '消息发布者',
create_time datetime DEFAULT NULL COMMENT '发布消息时间',
PRIMARY KEY (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='用户朋友圈消息列表';
评论表
CREATE TABLE user_comment (
id int(10) NOT NULL,
mid int(10) DEFAULT NULL COMMENT '信息id',
uid int(10) DEFAULT NULL,
content varchar(255) DEFAULT NULL COMMENT '评论内容',
reply_comment_id int(10) DEFAULT NULL COMMENT '被回复的评论id',
replay_uid int(10) DEFAULT NULL COMMENT '被回复的评论的uid',
is_deleted tinyint(1) DEFAULT NULL,
create_time datetime DEFAULT NULL,
PRIMARY KEY (id),
KEY mid (mid) USING BTREE,
KEY uid (uid) USING BTREE,
KEY parent_id (parent_id) USING BTREE,
KEY replay_comment_id (reply_comment_id) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='评论表';
好友关系表
CREATE TABLE friend_relation (
id int(10) NOT NULL,
uid int(10) DEFAULT NULL,
frind_uid int(10) DEFAULT NULL,
is_deleted tinyint(1) DEFAULT NULL,
create_time datetime DEFAULT NULL,
PRIMARY KEY (id),
KEY uid (uid) USING BTREE,
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='好友关系表';
表设计
使用说明
1.新增
发朋友圈
场景一、生日到了,老公精心准备,我感到心情小好,发了一条朋友圈抒发一下感情,记录生活点滴。
我的照片和抒情文字 -insert-> user_message表
我的时间轴 -insert-> user_friend_timeline表
我的好友们时间轴 -insert-> user_friend_timeline表
评论回复
场景二、好友们翻看自己朋友圈的时间轴,发现了我的动态,纷纷评论表示祝福。
评论文字 -insert-> ussr_comment表(无需记录回复内容:reply_comment_id、reply_uid)
场景三、我看到好友们的祝福甚是开心,赶紧回复一下联络联络感情。
回复文字 -insert-> ussr_comment表(需要记录回复内容:reply_comment_id、reply_uid)
添加好友
场景四、家中七大姑八大姨慢慢跟上潮流,开始使用微信,想到我的生日到了,加个好友也祝福一下。
彼此建立好友关系,各自插入一条好友维护数据 -insert-> friend_relation表
彼此各自朋友圈发布信息同步 -insert-> user_friend_timeline表
2.查询
场景五、朋友圈里大家交流的差不多了,我也来刷刷贵圈还有什么新鲜事儿。
入参:自己的uid -select-> friend_relations表 未删除的所有好友(friend_uid)
入参:自己的uid,friend_uid -select-> user_friend_timeline表 uid为自己&muid包含在uid,friend_uid中所有未删除数据(按照时间倒叙显示,获取mid)
入参:查询到的mid列表 -select-> user_message表 所有未删除数据(再次过滤,获取mid)
入参:再次过滤的mid列表 -select-> user_comment表 再次过滤的mid列表&只有评论里的uid 和 reply_uid (或为空)都是自己好友的未删除数据才展示出来
拼接user_message 和user_comment然后返回给时间轴展示
3.删除 / 修改
场景六、突然刷到一个好友发了一条伤感主题的朋友圈消息,瞬间好多朋友给予暖心的安慰。其中有一条评论略失妥当,该条评论的回复更是有过之无不及,最后激怒了圈主。于是有了这样一系列操作:
1.回复人删除回复内容
入参:user_comment表的id -update-> user_comment表 id与入参一致则将is_deleted置为1(一条)
2.评论人删除不当评论
入参:user_comment表的id -update-> user_comment表 id或者reply_comment_id与入参一致则将is_deleted置为1(评论及对应回复,多条同时被删除)
3.圈主删除所发的主题
入参:user_message表的id -update-> user_message表 id与入参一致则将is_deleted置为1(一条)
入参:user_message表的id -update-> user_friend_timeline表 message_id与入参一致则将is_deleted置为1(一条)
入参:user_message表的id -update-> user_comment表 message_id与入参一致则将is_deleted置为1(多条)
4.圈主删除两位好友
friend_relation表:圈主与两个好友的friend_relation表的的关联关系互相被逻辑删除
user_friend_timeline表:彼此各自朋友圈发布信息同步逻辑删 -update> user_friend_timeline表
TODO
记个待办,刷朋友圈的性能问题分析,敬请期待... ...