我正在分析不同的方法来显示最近的 20 个帖子以及每个帖子的最新 4 条评论。这是一些类似于 facebook 墙的东西,但不会有喜欢、分享和其他任何东西
示例表结构
帖子p_id
=该帖子的编号user_id
=他们发布的用户poster_user_id
= 发帖人post
comment_id
=该评论的数量post_id
=评论相关的帖子编号commenter_user_id
= 发表评论的人comment
我想到了这些方法
1)查询 POST 表并获取最近的 20 条帖子,将帖子 ID 发送到数据库并从 COMMENT 表中获取评论。但是对于这个总电话将是
1(帖子)+20(评论)=21 数据库调用
2) 加入 POST 和 COMMENT 表并获取最近 20 个帖子的所有评论,并在显示前一个 POST_ID 时检查,如果相同则不显示帖子,而只显示评论。但这种做法
获取大量不必要的数据
3)查询POST表并获取最近20个帖子,获取帖子ID,动态构建评论查询(在PHP中创建以下类型的查询)
SELECT comment FROM comments WHERE post_id=<1st latest_id> ORDER BY comment_id desc LIMIT 4
UNION ALL
SELECT comment FROM comments WHERE post_id=<2nd latest_id> ORDER BY comment_id desc LIMIT 4
UNION ALL
SELECT comment FROM comments WHERE post_id=<3rd latest_id> ORDER BY comment_id desc LIMIT 4
....................up to 20
在这里你将只有
1(posts)+1(comment) = 两次数据库调用
这种方法看起来不错
4)使用第三种方法并将结果存储在 memcached 中一分钟或 30 秒。如果用户发表任何评论或新帖子,请使用 jquery 并在浏览器中更新他的条目。如果他按下刷新,则向服务器发送一个标志以再次查询数据库并将它们存储在 memcached 中。
这种方法在一分钟内只需要 1 或 2 次数据库调用,但用户再次获得一分钟前发布的数据,而不是最近发布的数据 .. 这对于常规论坛来说很好
5)即使不是每分钟查询数据库,第一次从数据库中获取前 20 个帖子并将它们与评论一起保存在 memcached 中。每当用户写新帖子时,从 memcached 中删除第 20 个帖子并将新帖子添加为第 1 个顶部帖子。同样对于评论,请删除第 4 条评论并将新评论附加到帖子中。但这需要一个开发工作。当然,我们必须将记录保存到数据库(或者在需要时可以遵循一些组提交)。
如果我们编码完美的话,这对我来说似乎是最好的方法
任何人有任何其他方法或任何良好的链接来实施第 5 种方法?(更新内存缓存)
感谢你的帮助