一张表实现短视频"评论区"完整功能
前言
现如今,不管是哪种类型的应用,评论区都少不了。从工具类的到媒体信息流类的,评论留言都是最基本的互动环节。比如抖音短视频下,针对视频每个用户都可以发表自己的观点;而针对用户的评论,其他的用户又可以对其进行评论,依次回复下去。
那么,一个视频的评论回复的表如何设计?功能如何实现呢?如标题,这里是用一张表完成,但是在我完成功能后发现拆成两个张更合适(评论表和回复表),这个后面已经改了,最后也会说一下。
效果
页面上展示是,视频下分页展示第一级的评论列表,评论下的评论是进行折叠,点击“查看全部”分页显示所有层级的评论。一张表的设计下,评论下的评论下……的评论是通过关联上一级主键的,也就是递归的方式。
但是下面的是只要是对评论进行评论都放在第一级的评论下,而递归是树形结构。虽然也能通过对树形结构数据处理拉伸到二季下,但是在底下评论特别多的情况就会体验特别差。所以针对这个我对表格加了一个面包屑字段,表结构如下,然后再分次完成评论数据的如何添加,按页面方式查询的。
表结构
如上图的 “crumbs” 字段是一个数组方式的 json,也就是添加时会记录当前评论的关系链,从最顶层 ID 到最近的上一级。而实现分页显示第二级下的所有评论,只需要把 “crumbs” 索引为 1 的 pid 作为查询条件就能找到该 id 下的所有评论,如下是查询二级评论 ID 为 285 的所有评论列表。
而对于关于 crumbs 如何存入和谁回复谁,就只需要在评论添加的时候,对上一级评论 ID 进行递归查询所有上级 ID 放入 "crumbs", 被回复者就更好办了,查询上一级评论的评论者 ID(user_id),放入当前评论记录的 "commented_user_id",展示的时候只需要关联一下用户信息表就可以了,接下来就是业务代码演示了。
代码演示
▲评论添加
▲获取面包屑
▲数据查询
写在最后
以上是初版时候根据业务设计的表格,后来的评论区完全仿照某音,所以也就对表格进行了拆分。分成了评论表和回复表,只要是对评论进行评论就是回复,这样在后面数据庞大的时候,性能会更好一点。但是如何是前期设计的就是一张表,而迭代的时候也要有某音评论的效果,可以作为解决方法尝试滴。
版权声明: 本文为 InfoQ 作者【北桥苏】的原创文章。
原文链接:【http://xie.infoq.cn/article/c1365d4a72321361c7a90751b】。文章转载请联系作者。
评论