有人可以推荐一种策略,用于汇总存储在超过100,000,000行的MySQL表中的原始“点击”和“展示”数据吗?
这是表结构。
CREATE TABLE `clicks` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`companyid` int(11) DEFAULT '0',
`type` varchar(32) NOT NULL DEFAULT '',
`contextid` int(11) NOT NULL DEFAULT '0',
`period` varchar(16) NOT NULL DEFAULT '',
`timestamp` int(11) NOT NULL DEFAULT '0',
`location` varchar(32) NOT NULL DEFAULT '',
`ip` varchar(32) DEFAULT NULL,
`useragent` varchar(64) DEFAULT NULL,
`processed` tinyint(1) NOT NULL DEFAULT '0',
PRIMARY KEY (`id`),
KEY `type` (`type`),
KEY `companyid` (`companyid`),
KEY `period` (`period`),
KEY `contextid` (`contextid`)
) ENGINE=MyISAM AUTO_INCREMENT=21189 DEFAULT CHARSET=latin1;
我想要做的是让这些数据更容易使用。我想从中提取每周和每月的聚合,按类型,companyid和contextid分组。
理想情况下,我想从生产服务器上取下这些数据,将其聚合然后再合并。
我真的有点挑剔,想知道是否有人有任何好的起点或实际聚合数据的策略,以便可以使用MySQL快速查询。我不要求对这些数据进行“实时”报告。
我过去曾尝试批量PHP脚本,但这看起来很慢。
答案 0 :(得分:1)
您可以使用整个月/周数据聚合逻辑实现一个简单的PHP脚本,并使其在给定时间通过cron作业执行。根据软件环境,可能会安排在晚上运行。此外,您可以在请求中传递GET参数以识别请求源。
答案 1 :(得分:0)
您可能对MySQL复制感兴趣...设置第二台服务器,其唯一的工作就是在数据集的复制副本上运行报告,因此您可以专门针对该作业进行调整。如果将复制方案设置为主 - 主,则当报表服务器根据报表结果更新其自己的表时,这些数据库更改将自动复制回生产服务器。
此外,我强烈建议您阅读High Performance MySQL, 3rd Ed.,并查看http://www.mysqlperformanceblog.com/以获取有关在MySQL中使用大量数据集的更多信息