我有一个web服务,每天处理500k+的唯一点击量(将增加到4m)。每个访问者(~5行/访问者)有大量的日志数据来记录关于每个访问者的各种信息(用户代理、IP、位置等)。每天凌晨1点,我让PHP & mySQL将日志表中的所有数据(# uniques,us,average time)汇总到另一个汇总表中。每个访问者在访问站点时与大约1k个不同的“组”中的一个相关联,这取决于某些特征(用户代理、操作系统、位置)。汇总所有数据需要很长时间,有时还会在我们为这1k个组中的每个组运行摘要查询时杀死DB服务器,然后将数据插入到汇总表中。有没有更有效的方法在mySQL数据库中存储和汇总超大数量的日志数据?
发布于 2010-11-09 04:45:47
如果你正在处理非常大的数据集,也许你可以看一看非关系型数据库。
这在思想上是不同的,需要一点学习,但最终证明,当处理大量流量时,它会相当大地提升您的网站的性能。
这里有一些关于Cassandra的更多信息,从这里开始,如果听起来很有趣,可以看看其他NoSQL解决方案
发布于 2010-11-09 04:46:37
对于这种规模的问题,没有通用的解决方案,但您是否考虑过,不要存储日志数据,而是立即更新相关记录,而不是每天进行汇总?
您还可以将触发器放在日志表上。尽管保持你的数据更新可能会有点繁重,但至少你把它分散在一天的过程中。
如果你考虑了所有常用的选项,分片可能是一种选择。通过分区或物理mysql实例将您的数据划分为较小的组。
发布于 2010-11-09 05:49:24
一种选择是将日志表设为“哑巴”。完全不需要索引,也不需要事务,为了简单起见,它可以是MyISAM。这将允许快速插入。为了进行分析,您从日志表向另一个具有索引的表(最好是完全位于另一台服务器计算机上)执行一次批量传输,然后在那里运行分析。
https://stackoverflow.com/questions/4127864
复制相似问题