考虑一下微信朋友圈的设计与实现

背景

由于最近的公司的项目有涉及到类似的微信朋友圈的功能, 于是最近开始研究数据库层面的朋友圈的设计。

思考

  1. 订阅与发布
  2. 分享与朋友圈
  3. 评论
  4. 朋友圈的时间轴

开始

数据库设计

用户表 users

id
phone
email
password

关注表 subscriptions

id
user_id
subscriber_id

朋友圈 moments

id
user_id
content
images
sharing_id

分享 sharings

id
title
thumbnail
link

评论表 replies

id
user_id
moment_id
to_user
content

业务实现

  1. 朋友圈的时间轴
    根据登录用户查询关注列表的 subscriber_id 的集合,根据集合使用 where in 查询朋友圈,根据发布时间排序取分页。
    给订阅人数增加上线,避免 where in 数据量过大,微信的朋友上线为1000
  2. 朋友圈的发布
    images 以 json 形式存储, {[id, path]},id 可以排序,最多是 9 张图片,图片不涉及到单独查询,所以可以用 json。
  3. 分享
    朋友圈有分享也是朋友圈发布,但是要补充一部分数据:分享的标题、链接、缩略图。所以添加额外 sharings 表存储,评论就是朋友圈的 content 主题内容,sharing_id 就是分享具体内容。
  4. 评论
    记录评论者,以及需要 @ 的人和具体内容部分。

效率考虑

  1. 使用 redis(或其他缓存) 做朋友圈时间轴的缓存,但要记住用户删除、发布朋友圈时的更新和删除
  • 可以使用 LIST 和 HASH,LIST键:list:{$user_id} => [moment_id, ...],HASH键:hash:moment:{$id} => 朋友圈数据表一行数据
  1. 使用 redis 做关注表缓存
  • 可以使用 LIST ,LIST 键:list:{$user_id} => [subscriber_id, ...]
  1. 使用 redis 做评论表缓存
  • 可以使用 LIST 和 HASH;LIST 键:list:{$moment_id} => [reply_id, ...],HASH键:hash:reply:{$id} => 评论表一行数据
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。