我目前正在使用用户IP,查看日期等存储数据库中的每个视图。但是我的网站有大量的点击量,这增加了数据库锁定时间和性能下降。
我想将文件中的计数保存1小时,然后更新数据库,但有人告诉我,我们不会对重载网站使用文件操作。
请建议我这样做的最佳策略。
注意:我不需要计算独特的观点。
答案 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次,并且不会减慢任何速度。