假设我在网站上有一篇文章,我想跟踪该文章的浏览量。在 Articles 表中,有 PK ID - int、Name - nvarchar(50) 和 ViewCount - int。每次查看页面时,我都会增加 ViewCount 字段。我担心更新字段时发生冲突。我可以在存储过程中使用如下事务运行它:
CREATE PROCEDURE IncrementView
(
@ArticleID int
)
as
BEGIN TRANSACTION
UPDATE Article set ViewCount = ViewCount + 1 where ID = @ArticleID
IF @@ERROR <> 0
BEGIN
-- Rollback the transaction
ROLLBACK
-- Raise an error and return
RAISERROR ('Error Incrementing', 16, 1)
RETURN
END
COMMIT
我担心的是,最终页面浏览量将不计入该模型中。另一种可能的解决方案是日志类型的模型,我实际上将视图记录到文章中,并使用函数和视图的组合来获取有关文章视图数量的数据。
也许更好的模型是将每小时的视图数量缓存在应用程序中的某个位置,然后以批处理方式更新它们。
-- Edit:
为了更详细地说明,一个简单的模型可能是:
对于给定页面,每个页面加载都会增加一个静态哈希图。另外,在每次加载时,检查自“上次更新”以来是否已经过去了足够的时间,如果是,则执行更新。
有点棘手,并将基值放入 asp.net 缓存中(http://msdn.microsoft.com/en-us/library/aa478965.aspx http://msdn.microsoft.com/en-us/library/aa478965.aspx)并且,当超时时,[按照链接中的描述实现缓存删除处理程序]执行更新。将超时设置为一小时。
在这两种模型中,您都将拥有页面计数的静态映射;您将更新每个视图,并且还将使用它以及缓存的数据库量来获取当前的“实时”计数。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)