后端基础day13 大项目模块2 | 青训营笔记

68 阅读2分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 14 天

互动模块

  • 主要需要4个功能性接口:
    1. 喜欢: 登录用户对视频的点赞和取消点赞操作
    2. 喜欢列表: 用户的所有点赞视频
    3. 评论: 登录用户对视频进行评论
    4. 评论列表: 查看视频的所有评论,按发布时间倒序

社交模块

  • 主要需要4个功能性接口:
    1. 关注操作: 已登录的用户对其他用户的关注
    2. 关注 / 粉丝 / 好友 列表: 返回对应的用户列表
    3. 聊天操作: 可以给目标用户发送消息
    4. 聊天记录: 保存两用户之间的聊天记录

在本系统中, 可关联两个用户的操作不多, 只有关注操作, 所以简单地把关注列表和被关注列表归类为好友列表. 聊天系统的存储本质上是一个有向图的存储, 所以我们采用了nosql MongoDB进行存储. 由于消息记录条数可能非常多, 所以务必进行Collection的分片, 此处我们采用的是id绝对差区分.

image.png

点赞操作设计

  • 设计需求

    • 某视频的点赞数
    • 用户所有视频的点赞数
    • 用户点赞的视频
    • 持久化到MySQL数据库
  • 设计分析:

点赞操作在该应用中是一个非常频繁的操作, 如果每次都直接请求到MySQL数据库, 则会造成很大的性能损失和并发问题, 所以点赞操作在这里被我们设计成首先写入缓存数据库redis, 然后准备采用定时任务持久化到MySQL数据库(暂未开发).

在应用中, 视频的vedio_id和用户的user_id是可以分别不同的, 我们暂时采用直接作为kv存入redis的方案. 本质上是一个图的存储的问题, 而由于点赞和用户的数量, 即图的节点可能非常多, 所以后续持久化的时候很可能需要分库分表. 由于我们在后续的查询中需要的数据分别是: 1. 某视频的点赞数用户 2. 所有视频的点赞数 3. 用户点赞的视频. 所以可以在redis存储的时候即把这三个数据做提前计算并存储.