2010-06-03 54 views
1

目前我正在使用mysql来记录所有用户进入我管理的网站的所有流量。数据库在一个月内增长到近1100万行,查询速度变得很慢。有没有更有效的方法来记录用户信息?我们所存储的是他们的请求,useragent和他们的ip,并将其与某个网站相关联。跟踪数据库中所有用户流量的最有效方式是什么

+0

你是如何查询这张桌子的? (例如,你总结整个表?为用户提取每个单独的记录吗?限制你的查询,例如时间范围? – nos 2010-06-03 17:03:22

回答

4

为什么不尝试Google Analytics(分析)?即使你认为这对你来说不足够,我敢打赌你可以跟踪99%的你想跟踪的东西。

2

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

+0

我通常需要提取唯一的匹配,或者有时候流量会有一个与它相关的数字,我需要找到一定数量以上的所有流量的总和(对不起,我故意模糊了网站的性质)lol – Brendan 2010-06-03 17:06:50

+0

如果你正在通过IP确定唯一性,请确保你正在使用inet_aton并存储为unsigned int 。然后索引这个字段。 – Gary 2010-06-03 17:32:08

0

想要在数据上运行哪种查询?我假设你的大部分查询都是在当前或最近的时间窗口中的数据。我建议使用基于时间的表格分区。这会使查询更快,因为查询只会触及具有数据的分区,因此磁盘搜索量减少。还要定期清除旧数据并将其放在汇总表中。一些有用的链接:

0

最有效的方式可能是让Apache(假设多数民众赞成在该网站上运行的是什么),只需使用其内置的日志记录文本日志,并配置如AWStats。这消除了您自己记录此信息的需要,并且应该为您提供您正在查找的信息 - 可能已在现有报告中完成配置。这样做比谷歌分析的好处将是它的服务器端跟踪 - 等

0

也许说明明显,但你有一个很好的索引与您正在查询的关系?

0

1)看看使用Piwik执行Google Analytic类型跟踪,同时保留对MySQL数据的控制。 2)如果您必须继续使用您自己的系统,请使用InnoDB Plugin来支持压缩的表类型。另外,将IP转换为无符号整数,将useragent和request转换为使用Innodb压缩或归档引擎压缩的无符号整型引用查找表。

3)跳过分区并按月分割数据库。

0

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

在某些“当前活动”模式中收集原始数据。 (a)从当前活动模式中分离出来,(b)针对计数/总和/分组查询进行优化。

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

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

相关问题