这是我参与「第五届青训营 」伴学笔记创作活动的第 14 天
互动模块
- 主要需要4个功能性接口:
-
- 喜欢: 登录用户对视频的点赞和取消点赞操作
- 喜欢列表: 用户的所有点赞视频
- 评论: 登录用户对视频进行评论
- 评论列表: 查看视频的所有评论,按发布时间倒序
社交模块
- 主要需要4个功能性接口:
-
- 关注操作: 已登录的用户对其他用户的关注
- 关注 / 粉丝 / 好友 列表: 返回对应的用户列表
- 聊天操作: 可以给目标用户发送消息
- 聊天记录: 保存两用户之间的聊天记录
在本系统中, 可关联两个用户的操作不多, 只有关注操作, 所以简单地把关注列表和被关注列表归类为好友列表. 聊天系统的存储本质上是一个有向图的存储, 所以我们采用了nosql MongoDB进行存储. 由于消息记录条数可能非常多, 所以务必进行Collection的分片, 此处我们采用的是id绝对差区分.
点赞操作设计
-
设计需求
- 某视频的点赞数
- 用户所有视频的点赞数
- 用户点赞的视频
- 持久化到MySQL数据库
-
设计分析:
点赞操作在该应用中是一个非常频繁的操作, 如果每次都直接请求到MySQL数据库, 则会造成很大的性能损失和并发问题, 所以点赞操作在这里被我们设计成首先写入缓存数据库redis, 然后准备采用定时任务持久化到MySQL数据库(暂未开发).
在应用中, 视频的vedio_id和用户的user_id是可以分别不同的, 我们暂时采用直接作为kv存入redis的方案. 本质上是一个图的存储的问题, 而由于点赞和用户的数量, 即图的节点可能非常多, 所以后续持久化的时候很可能需要分库分表. 由于我们在后续的查询中需要的数据分别是: 1. 某视频的点赞数用户 2. 所有视频的点赞数 3. 用户点赞的视频. 所以可以在redis存储的时候即把这三个数据做提前计算并存储.