在数据库中有效地记录和存储页面视图计数?

时间:2009-07-24 16:14:07

标签: database

StackOverflow等网站会计算,保存并显示网页的查看次数。你怎么有效地做到这一点?我们以StackOverflow问题的视图计数为例。我看到以下选项。

选项1。当应用收到问题请求时,请在问题表中增加计数。这是非常低效的!绝大多数查询都是只读的,但您正在对每个查询进行更新。

选项2。维护某种将新视图计数映射到questionIds的缓存。当应用收到问题请求时,请增加问题ID的缓存视图计数。你正在缓解视图的边际增长。到现在为止还挺好。现在,您需要定期刷新缓存中的计数。这是问题的第二部分。您可以使用第二个线程或某种调度组件。这真的是一个单独的问题,部分取决于您的服务器平台(我正在使用Java)。或者,在缓存中存储一​​定数量的计数之后,您可以在达到阈值的请求线程内进行更新,而不是使用单独的线程。更新功能可以在缓存中封装,为缓存提供一些IQ点。

我喜欢在达到阈值时刷新缓存的想法。我很想知道其他人做了什么以及是否有更好的方法。

1 个答案:

答案 0 :(得分:1)

我同意将每个页面加载写入数据库是低效的。我的方法是缓存请求,然后每小时提交一次。每次我更新缓存时,我都会将当前时间与LastWriteTime进行比较,如果超过一个小时,我会写。它是一个ASP.NET应用程序,所以我在Application的shutdown方法中有一个最终提交。后者不能保证运行,但被认为是可接受的损失。