这是我参与「第三届青训营 -后端场」笔记创作活动的第5篇笔记,此系列笔记主要记录我们队伍在开发抖音项目过程中遇到的一些问题以及思考
技术说明
数据库设计
本项目我们小组一共设计实现了5张数据表
comment( 评论数据表):此表主要存储了评论的内容,以及评论与评论用户id之间的联系,在进行删除评论等操作时,根据对应联系删除即可user_table(用户信息表):此表存储用户必要的一些身份信息,如用户id、账号、密码等信息video(视频信息表):此表存储了视频的必要信息,通过设置video_id这个自增主键字段,来维护视频的唯一性,在查询视频时可通过该字段进行查询user_follow(用户关注表):此表主要目的是为了建立,点赞用户id与该用户粉丝id之间的联系user_favourite(用户点赞表):此表主要目的是为了建立,点赞用户id与用户点赞视频id之间的联系,主要服务于点赞列表接口的开发- 视图:在存储用户喜欢视频以及视频与视频作者之间关系的数据时,我们小组使用MySQL中视图,考虑使用视图主要基于简化代码编写操作、简化操作、减少冗余的数据表这几方面来考虑的
项目使用技术详细描述
- 将整个项目,部署到服务器,使用公网
ip即可访问 - 使用了阿里云OSS对视频以及视频封面进行了云端存储,缓解了服务器压力
- 使用云上数据库存储数据,缓解了服务器压力
- 粉丝列表,使用二分查找,优化了查找关注用户的时间消耗,减少对数据库的I/O操作,提升了性能
- 点赞操作,使用了基于DB层面的触发器进行操作,简化了业务逻辑,增加了开发效率
- 根据服务器性能考虑,抛弃了session验证的方式,采用了JWT校验的方式
- 在开发时考虑到拼接字符串进行数据库操作,可能带来的SQL注入问题,所有数据库操作都是基于Gorm和提前封装的结构体实现的,不存在SQL注入问题
项目不足方面及可优化的点
-
注册的方式是否跟过于单一,没有提供第三方注册以及登录的方式(客户端限制)
-
客户端是发送token字段到服务端的形式,来进行token的传输,这就意味着token在客户端是存放在localStorage中,这就带来了XSS注入的风险
-
密码在数据库中使用md5加密大方式,存在被黑客使用彩虹表进行暴力撞库而破解的风险
-
单机部署项目带来的性能瓶颈问题
-
视频投稿中,长视频上传速度过慢,带来的用户体验不佳的问题,以及对不同粉丝量用户上传视频的时间没有区分的问题
-
数据库中对点赞等字段的更新,在此版本中使用的是触发器进行更新,这种方式带来的性能问题,在这个版本由于并发量较小,没有明显突出出来
下个版本简要优化意见
- 针对注册方式单一的问题,应接入第三方登录方式,如短信验证登录等登录方式
- 应当在服务端进行特殊字符的过滤以防止XSS注入问题
- 采用哈希加盐值的方式,避免黑客使用彩虹表进行撞库
- 适当将服务器中可以进行远程部署的中间件进行拆分部署,或加机器做集群
- 对不同粉丝量的用户进行不同上传视频长度的限制,用以区分
- 采用Redis做缓存,对点赞数不实时进行落库操作,而是将点赞数先放入Redis逻辑落库,在一定的时间间隔内再做实际落库的操作