sql-server-2005 - 从SQL表缓存计数的最佳方法?

标签 sql-server-2005 caching count

我想从头开始开发一个具有特殊需求和定制的论坛。

我想为频繁使用的论坛做准备,并想知道如何缓存用户帖子数和用户回复数之类的内容。

只有三个表,即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/

相关文章:

jquery - 先进的 ASP.NET 提高性能

sql - 如何查找影响特定列的存储过程列表?

sql-server-2005 - 如何加快运行速度非常慢的 SSIS 传输服务器对象任务?

http - Cache-Control : max-age=0 and no-cache?有什么区别

.net - C# 线程和 SQL 连接

postgresql - 外部数据包装器缓存机制支持

javascript - 尝试在 React w/Formik 中每次输入字段完成时创建一个计数器

python - 合并和总结 Pandas 中的几个值(value)计数系列

mysql - 我的 table 组织不当的另一个问题

c# - 如何缓存 HttpResponseMessage 返回的图像