搜索

首页  >  问答  >  正文

redis - 数据库表设计的一些疑问,比如一篇文章(点赞数,浏览数,评论数要不要存在文章的表里)

一直以来都有这个疑问
一张文章表,文章有点赞、浏览记录,评论,都是三个独立的表,查询文章列表数据时需要展示这三个数量。


两种方案:

  1. 在文章表里增加三个数量字段,每次被点赞(取消点赞)/评论(删除评论)/浏览,都去更新这个字段,这样未免效率过低了,尤其是浏览量每次都要更新,而且冗余了字段

  2. 每次去关联查询总数,这样速度太慢。
    如果放到缓存/搜索引擎里,那还需要每次都去更新吗,这样也太浪费了

phpcn_u1582phpcn_u15822794 天前1446

全部回复(2)我来回复

  • 高洛峰

    高洛峰2017-04-28 09:05:59

    当评论表的数量增长到一定程度时,增加冗余字段是有必要的。虽然多了几个冗余字段要维护,但对于性能的提升很明显,毕竟没人会希望数据库被压垮的吧?

    另外,点赞数、评论数、阅读数 这些不是实时性要求很高的数据,所以不需要每次点赞(取消点赞)/评论(删除评论)/浏览 都去更新这个字段,你可以写个定时脚本,每半小时或一小时去更新那些冗余字段就可以了

    回复
    0
  • 黄舟

    黄舟2017-04-28 09:05:59

    分表的设计是没错的,当你考虑到数据量增大,一张很重的表并不好用。如果考虑到点赞等以后还有其他额外信息,这样做就更有必要了。

    推荐做缓存,并只实时更新缓存,具体持久化可以定时跑。

    回复
    0
  • 取消回复