0

我有一个包含大约 5000 万行的请求数据的大型数据库表,类似于 Apache 请求日志:

request_url
user_agent
created

包含这样的数据:

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

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

然后我有我的用户数据库表,其中包含我的所有用户数据,包括用户名。

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

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

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

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

4

3 回答 3

1

在每个页面视图上增加总数是您的最佳选择。它为每个用户节省了以后“搜索”的麻烦。这只是对每次综合浏览量的一次额外更新查询,因此处理负载分散在全天而不是一次(此外,您的统计信息始终保持更新,而不是每天更新)

如果你坚持用 SQL 做,你可以考虑

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

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

于 2012-06-17T17:22:18.800 回答
1

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

于 2012-06-17T17:25:22.680 回答
0

开始研究像 Infobright 这样的分析数据库。基于列的存储引擎在大数据计划中非常重要,并且专为对聚合进行内存分析以及临时查询而构建。

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

于 2012-06-18T16:42:58.763 回答