每次 COUNT() 评论 vs 在 count_comments 列中缓存 vs 使用另一种类型的缓存
COUNT() comments each time vs cache in count_comments column vs use another type of cache
我有一个共同的疑问。
猜猜我正在用 post 创建一个社交网络或博客,每个 post 都有评论。
如果我想对 post 的列表进行分页和过滤,并显示每个 post
的评论数量
我是否应该在我的 posts table 中添加一个 count_comments 列(就像 WP 所做的那样)并在那里缓存评论数量(即每次有人发表评论时如果有人添加 1删除 count_comments 列的评论 sub 1)
我是否应该每次都执行 SUBSELECT 来计算评论数量,然后用另一种形式缓存结果或缓存
或者你有什么推荐的?
绝对使用触发器缓存它们,为将来安全高效。但请记住,您不需要分页计数,可能只是为了在某些统计信息中显示计数
简而言之:两者都可以,并且两种变体各有优缺点。
您几乎肯定会对这两种方式都有争论。
如果您经常需要评论计数,并且需要大量 system/application 资源才能通过简单的 sql 语句获取该值(p.e。按该值排序可能是一种痛苦),将值存储在像 WordPress 那样的字段中是一种方法。
如果您不经常需要评论计数,and/or 获取值并不需要大量资源(SELECT COUNT(*) FROM yourcommenttable WHERE yourpostid = whatever
对于大多数系统来说应该不会太难),您可能会受益更多,同时避免使值与帖子中的实际评论保持同步的问题。
我有一个共同的疑问。
猜猜我正在用 post 创建一个社交网络或博客,每个 post 都有评论。
如果我想对 post 的列表进行分页和过滤,并显示每个 post
的评论数量我是否应该在我的 posts table 中添加一个 count_comments 列(就像 WP 所做的那样)并在那里缓存评论数量(即每次有人发表评论时如果有人添加 1删除 count_comments 列的评论 sub 1)
我是否应该每次都执行 SUBSELECT 来计算评论数量,然后用另一种形式缓存结果或缓存
或者你有什么推荐的?
绝对使用触发器缓存它们,为将来安全高效。但请记住,您不需要分页计数,可能只是为了在某些统计信息中显示计数
简而言之:两者都可以,并且两种变体各有优缺点。
您几乎肯定会对这两种方式都有争论。
如果您经常需要评论计数,并且需要大量 system/application 资源才能通过简单的 sql 语句获取该值(p.e。按该值排序可能是一种痛苦),将值存储在像 WordPress 那样的字段中是一种方法。
如果您不经常需要评论计数,and/or 获取值并不需要大量资源(SELECT COUNT(*) FROM yourcommenttable WHERE yourpostid = whatever
对于大多数系统来说应该不会太难),您可能会受益更多,同时避免使值与帖子中的实际评论保持同步的问题。