最佳视图计数策略

时间:2012-04-12 17:11:13

标签: mysql wordpress optimization

我目前正在使用用户IP,查看日期等存储数据库中的每个视图。但是我的网站有大量的点击量,这增加了数据库锁定时间和性能下降。

我想将文件中的计数保存1小时,然后更新数据库,但有人告诉我,我们不会对重载网站使用文件操作。

请建议我这样做的最佳策略。

注意:我不需要计算独特的观点。

3 个答案:

答案 0 :(得分:1)

您的网络服务器日志已经为您跟踪了大部分数据。

我建议每小时轮换一次日志,然后有一个计划作业,生成聚合统计数据并将其存储在数据库中。

答案 1 :(得分:0)

直接在MySQL中保存和更新此信息应该没有任何问题。每小时3000次点击意味着每秒少于一次查询。对此表使用InnoDB存储引擎应该可以消除锁定问题。然而,InnoDB有很多选项,需要正确配置才能高效工作 - 这很重要。

根据您的评论,我认为您正在寻找的结构类似于:

id - page id
type - period length, could be 'day', 'week', 'month'
period - date when period starts, could be integer written as YYYYMMDD or YYYYMM 
       - depending on the contents of 'type' field
count - hit count for a url over given period

主键是(type, period, id)。同时在(id, period)(type, period, count)上建立索引以实现高效:

SELECT * 
FROM ... 
WHERE type='week' 
  and period = 20120409 
ORDER BY count DESC

创建页面时,插入每个句点的记录,其中count = 0.当页面被点击时,运行一个简单的更新:

UPDATE table 
SET count = count + 1 
WHERE id = $page_id 
  AND period IN (201204, 20120409) 

它将更新“日”,“周”和“月”统计信息的所有三个记录。

答案 2 :(得分:0)

已经有一个插件可以非常有效地执行此操作(尽管您必须使用数据来对帖子进行排序等):BAW Post Views Count。它将所有内容存储在postmeta中,因此很容易访问,并在单独的元条目中维护每日和其他总计。我在几个网站上使用它,每天的页面浏览量为50,000次,并且不会减慢任何速度。

相关问题