设计朋友圈

需求:

已经有一个查询好友的接口,设计一个微信朋友圈,可以实现发表朋友圈,添加评论,查看评论等功能。主要是设计数据结构

数据结构

  • 消息表

    • 存储用户发布的信息,utf8m64 可以存表情包
字段 类型 备注
id bigint 自增主键
uid varchar(20) 用户id
content varchar(500) 内容
picture varchar(200) 图片
location varbinary(100) 位置
create_time detetime 创建日期
  • 时间轴表:

    • 存储这所有有用时间轴的信息,用户拉取朋友圈是查的这张表,根据type判定是否是自己发的

字段 类型 备注
id bigInt(15) 自增主键
fcm_id bigint 朋友圈信息id,消息表中的id
uid  varchar(20) 用户id
type tinyInt 0 表示自己的,1表示朋友发的
create_time datetime 创建时间
     
  • 评论表

    • 记录评论和点赞数的
字段 类型 备注
id bigInt 自增主键
fcm_id bigInt 朋友圈信息id,消息表中id
uid varchar 用户id
content varchar(200) 评论内容
like_count int(10) 点赞数
create_time datetime 时间

朋友圈逻辑

  • 发朋友圈

    • 用户A发布一条朋友圈,消息表写数据
    • 时间轴表增加一条数据,uid=A, type=1,表示增加一条自己发的信息
    • A查询好友 发现 B C D
    • 时间轴表加入三条数据,uid=B,type=0,表示B的时间轴中增加一条好友发布的消息
  • 添加好友

    • 当用户A 添加 E 为好友之后,触发同步好友时间轴操作
    • 把消息表 好友 C 发布的所有消息 加到自己的时间轴中;
    • 再把自己发布的消息 添加到C的时间轴中;
  • insert into t_friend_circle_timeline (uid,fcmid,type,create_time)
         select #{uid},'id',0,create_time from t_friend_circle_message where uid=#{fid};

    分表 

水平分表,按照时间,可以一个月一张表 

缓存

  • 点赞人数

    • 不排序 set ,  incrby
    • 排序 zset ,可以看到热点评论
  • 查看朋友圈

 

你可能感兴趣的:(系统设计)