假设我在某个网站上有一篇文章,并且想跟踪该文章的观看次数。在“文章”表中,有PK ID-int,名称-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
我担心的是,我最终将无法在此模型中计算PageViews。另一个可能的解决方案是模型的日志类型,在该模型中,我实际上将视图记录到文章,并使用功能和视图的组合来获取关于文章的视图数的数据。
可能更好的模型是每小时在某个地方的应用程序中缓存视图数,然后以批处理方式更新它们。
- 编辑:
要详细说明,一个简单的模型可能是:
对于给定页面,每个页面加载都会增加一个静态哈希图。同样,在每个负载上,检查自“上次更新”以来是否经过了足够的时间,如果是,则执行更新。
棘手,将基本值放在asp.net缓存(http://msdn.microsoft.com/en-us/library/aa478965.aspx)中,并且在超时时,[按照说明实现缓存删除处理程序在链接中]进行更新。将超时时间设置为一个小时。
在这两种模型中,您都将拥有要计数的静态页面图;您将更新每个视图,并且还将使用此视图以及缓存的数据库数量来获取当前的“实时”计数。