我有一个大型数据库表的请求数据,很像Apache请求日志,大约有5000万行:
request_url
user_agent
created
包含如下数据:
/profile/Billy
Mozilla.....
2012-06-17...
/profile/Jane
Mozilla.....
2012-06-17...
然后我有了我的用户数据库表,我的所有用户数据都包括用户名。
目前,每天晚上,我会逐行处理前一天的请求数据,看看它是否包含与users表中某个用户名匹配的URL。如果是这样,我会在另一个存储统计信息的表中增加一个总数,这个数据库允许用户查看他们在任何特定日期获得的网页浏览量。
然而,随着数据集的增长,这变得非常耗费资源,并且还需要很长时间才能完成,即使通过URL对请求数据进行分组并获取该组的计数也是如此。
有没有更好的方法来处理这些信息以获得我需要的最终结果?无论如何都会记录请求数据,因此最好在事后生成统计数据,而不是在每个页面视图上增加总数。
我在一台服务器上运行它,因此不需要在多台服务器上分布式处理数据。
答案 0 :(得分:2)
每个页面视图增加总数是您的最佳选择。它为以后为每个用户分别省去了“搜索”的麻烦。这只是每次网页浏览的一次额外更新查询,因此处理负荷全天分散而不是一次性(加上你的统计数据一直保持更新,而不是每天更新)
如果您坚持使用SQL,可以考虑
SELECT COUNT(request_url) FROM your_table WHERE request_url LIKE %/profile/username%
(虽然我不确定你是否已经在做什么?)
答案 1 :(得分:2)
每天从新的日志表开始。当一天结束时,使用它来递增总计,然后将其附加到那个巨大的主日志表并删除它。
答案 2 :(得分:0)
开始研究像Infobright这样的分析数据库。基于列的存储引擎在大数据计划中是巨大的,并且用于在聚合上进行内存分析以及即席查询。
免责声明:作者隶属于Infobright。