谁能推荐一种策略来聚合存储在超过 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 脚本,但这似乎很慢。