处理和匹配大量数据

时间:2012-06-17 17:13:33

标签: php mysql database

我有一个大型数据库表的请求数据,很像Apache请求日志,大约有5000万行:

request_url
user_agent
created

包含如下数据:

/profile/Billy
Mozilla.....
2012-06-17...

/profile/Jane
Mozilla.....
2012-06-17...

然后我有了我的用户数据库表,我的所有用户数据都包括用户名。

目前,每天晚上,我会逐行处理前一天的请求数据,看看它是否包含与users表中某个用户名匹配的URL。如果是这样,我会在另一个存储统计信息的表中增加一个总数,这个数据库允许用户查看他们在任何特定日期获得的网页浏览量。

然而,随着数据集的增长,这变得非常耗费资源,并且还需要很长时间才能完成,即使通过URL对请求数据进行分组并获取该组的计数也是如此。

有没有更好的方法来处理这些信息以获得我需要的最终结果?无论如何都会记录请求数据,因此最好在事后生成统计数据,而不是在每个页面视图上增加总数。

我在一台服务器上运行它,因此不需要在多台服务器上分布式处理数据。

3 个答案:

答案 0 :(得分:2)

每个页面视图增加总数是您的最佳选择。它为以后为每个用户分别省去了“搜索”的麻烦。这只是每次网页浏览的一次额外更新查询,因此处理负荷全天分散而不是一次性(加上你的统计数据一直保持更新,而不是每天更新)

如果您坚持使用SQL,可以考虑

SELECT COUNT(request_url) FROM your_table WHERE request_url LIKE %/profile/username%

(虽然我不确定你是否已经在做什么?)

答案 1 :(得分:2)

每天从新的日志表开始。当一天结束时,使用它来递增总计,然后将其附加到那个巨大的主日志表并删除它。

答案 2 :(得分:0)

开始研究像Infobright这样的分析数据库。基于列的存储引擎在大数据计划中是巨大的,并且用于在聚合上进行内存分析以及即席查询。

免责声明:作者隶属于Infobright。