跟踪数据库中所有用户流量的最有效方法是什么

时间:2010-06-03 16:56:03

标签: mysql logging performance

目前我正在使用mysql记录进入我管理的网站的所有用户的所有流量。数据库在一个月内增长到近1100万行,查询变得非常缓慢。是否有更有效的方式来记录用户信息?我们所存储的只是他们的请求,使用者和他们的IP,并将其与某个网站相关联。

7 个答案:

答案 0 :(得分:4)

为什么不试试Google Analytics?即使您可能认为这对您来说不够,我敢打赌,它可以跟踪您想要跟踪的99%。

答案 1 :(得分:2)

答案完全取决于您希望在查询方面检索的内容。您是在寻找汇总信息,您在寻找所有历史记录还是只寻找一部分?通常,如果您需要查看每一行以找出所需内容,那么存储在基本文本文件中的速度最快。

答案 2 :(得分:0)

您希望在数据上运行哪种查询?我假设您的大多数查询都是在当前或最近时间窗口中的数据。我建议使用基于时间的表格分区。这将使这样的查询更快,因为查询将仅访问具有数据的分区,因此更少的磁盘搜索。还定期清除旧数据并将它们放在汇总表中。一些有用的链接是:

答案 3 :(得分:0)

最有效的方法可能是使用apache(假设网站正在运行的内容),只需使用其内置的日志记录文本日志,并配置AWStats之类的内容。这样就无需自行记录此信息,并且应该为您提供所需的信息 - 可能已在现有报告中准备好配置。与谷歌分析相比,这样做的好处就是它的服务器端跟踪等等。

答案 4 :(得分:0)

也许说明显了但是你有一个好的索引与你正在制作的查询有关吗?

答案 5 :(得分:0)

1)看看使用Piwik执行Google Analytic类型跟踪,同时保留对MySQL数据的控制。

2)如果您必须继续使用自己的系统,请查看使用InnoDB插件以支持压缩表类型。此外,将IP转换为无符号整数,将useragent和request转换为unsigned int引用使用Innodb压缩或归档引擎压缩的查找表。

3)跳过分区并按月对数据库进行分片。

答案 6 :(得分:0)

这就是“数据仓库”的用途。考虑买一本关于仓储的好书。

在一些“当前活动”模式中收集原始数据。

定期将其移至“仓库”(或“datamart”)星型模式,该模式(a)与当前活动架构分开,(b)针对计数/总和/分组优化查询进行优化。

移动,BTW,表示插入仓库模式并从当前活动模式中删除。

将正在进行的交易处理与查询/分析处理分开。