我想从头开始开发一个具有特殊需求和定制的论坛。
我想为频繁使用的论坛做准备,并想知道如何缓存用户帖子数和用户回复数之类的内容。
只有三个表,即tblForum,tblForumTopics,tblForumReplies,缓存用户主题和回复计数的最佳方法是什么?
考虑一个简单的情况:用户按下一个链接并打开Replies.aspx?id = x&page = y页面,然后开始阅读答复。在HTTP请求上,服务器将运行一条SQL命令,该命令将获取该页面的所有答复,还“与tblForumReplies进行内部联接,以找出每个答复用户的用户答复数量”。
select
tblForumReplies.*,
tblFR.TotalReplies
from
tblForumReplies
inner join
(
select IdRepliedBy, count(*) as TotalReplies
from tblForumReplies
group by IdRepliedBy
) as tblFR
on tblFR.IdRepliedBy = tblForumReplies.IdRepliedBy
不幸的是,这种方法占用大量的CPU资源,我想看看您关于如何缓存表计数之类的想法。
如果计算插入/删除操作中每个用户的答复并将其存储在单独的字段中,则如何与手动数据更改同步。假设我将从SQL手动删除“答复”。
最佳答案
这些是我要考虑的三种方法:
1)也许SQL Server的性能将足以使您不需要缓存。您可能低估了SQL Server可以很好地完成其工作的能力。如果您的连接正确,那么这只是一个查询,可以获取该线程中所有用户的所有计数。如果您将此视为每个用户一个查询,那是错误的。
2)不要缓存。将用户计数冗余存储在用户表上。每当插入或删除帖子时,更新用户行。
3)如果您有成千上万个用户,甚至有数千个,但没有数百万个,则可能会发现将用户及其数量缓存在Web层内存中是可行的-对于ASP.NET,即“应用程序”缓存。
关于sql-server-2005 - 从SQL表缓存计数的最佳方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1086503/