0

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

4

2 回答 2

1

您可以使用整个月/周数据聚合逻辑实现一个简单的 PHP 脚本,并使其在给定时间通过 cron 作业执行。根据软件上下文,它可能被安排在夜间运行。此外,您可以在请求中传递 GET 参数以识别请求源。

于 2012-09-30T20:44:36.430 回答
0

您可能对 MySQL 复制感兴趣...设置第二台服务器,该服务器的唯一工作就是在数据集的复制副本上运行报告,因此您可以针对该工作专门调整它。如果您将复制方案设置为主-主,那么当报表服务器根据报表结果更新它自己的表时,这些数据库更改将自动复制回生产服务器。

此外,我强烈建议您阅读高性能 MySQL,第 3 版。,并查看http://www.mysqlperformanceblog.com/以获取有关在 MySQL 中处理大量数据集的更多信息

于 2012-10-02T19:06:00.040 回答