我想实现一个像大多数论坛、Youtube 和其他几个论坛一样的观看次数计数器。因此,每次用户阅读一篇文章时,都会存储并记住该文章。我也想知道谁看过这篇文章。
我的问题是:如何有效地实现这一点?最佳实践是什么?
一种方法是为每个 View 调用一个存储过程,但这会导致对数据库大量不必要的调用。
另一种方法是将其存储到某个全局应用程序对象,然后每 5 分钟左右存储在数据库中(您甚至可以用一种好的方式做到这一点吗?)
最好的方法是什么?
最佳答案
数据库操作非常便宜,而且确实不值得担心。如果数据库操作的成本稍高,那么您始终可以将阻塞操作委托(delegate)给新线程,从而释放页面生成线程(对于从数据库不返回任何内容的 UPDATE 和 INSERT 操作,您可以轻松地执行此操作 -它们是无关紧要的)。
存储过程现在并不流行 - 它们从预先计算的执行计划中获得的性能优势几乎被消除了,因为现代服务器缓存了所有先前查询的计划,并且对于简单的 SELECT、INSERT 和 UPDATE 操作,您可以开始遭受代码复杂性增加的困扰。现在内联 SQL 命令没有任何问题。
无论如何,回到主题并总结一下:您的假设是错误的。在每个页面 View 上运行 UPDATE Pages SET ViewCount = ViewCount + 1 WHERE PageId = @pageId
没有任何问题。这样做也没有任何问题:INSERT INTO UserPageviews (UserId, PageId, DateTime) VALUES (@userId, @pageId, NOW())
。这两个操作都非常便宜,即使在旧的数据库服务器上也能在 2-3 毫秒内执行。
关于asp.net - 一种在页面上存储 View 以及何时保存到数据库的快速方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12556367/