【发布时间】:2021-11-13 07:28:45
【问题描述】:
例如,考虑一个具有 2 个 MySQL 表的应用程序:posts 和 cmets。我想获取按最新评论时间排序的帖子。如果每个帖子有很多 cmets,这会很慢。我想在某处缓存每个帖子的最新评论时间。
如果我在 Redis 中缓存每个帖子的最新评论时间,那么我不能使用它在 MySQL 中进行排序。以下是我能想到的方法:
-
在帖子表中添加“最新评论时间”列,然后在创建新评论时更新此列(可能会出现性能问题,因为 MySQL 会锁定该行)
-
创建仅包含帖子 ID 和最新评论时间的新表,然后在创建新评论时更新此表(需要加入主帖子表)
-
将元组(最新评论时间,帖子ID)存储在Redis Sorted Sets中,然后从Redis中获取帖子ID(如果我在
where子句中有很多条件,那么很难表示这些条件在 Redis 中)
我主要关心的是更新最新评论时间的频率。即使我对它进行批处理(例如每分钟最多更新一次每个帖子),它仍然可能很慢。
这些方法中哪些是“好”或“坏”?有更好的方法吗?
【问题讨论】:
-
您需要执行的实际查询是什么?您是否考虑过为您的表编制索引?
-
查询是否仅限于单个
user?Comments表中有user_id吗?请为相关表格提供SHOW CREATE TABLE。