微信朋友圈评论功能设计实现

参考

https://www.harris1024.com/archives/71.html

https://www.jianshu.com/p/e37bd781e6dd

https://blog.csdn.net/weixin_31427047/article/details/113238285?utm_medium=distribute.pc_relevant.none-task-blog-baidujs_title-0&spm=1001.2101.3001.4242

创建表

消息表

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

记个待办,刷朋友圈的性能问题分析,敬请期待... ...

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值