Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
聚合MySQL数据的建议(百万行)_Mysql_Aggregate - Fatal编程技术网

聚合MySQL数据的建议(百万行)

聚合MySQL数据的建议(百万行),mysql,aggregate,Mysql,Aggregate,有谁能推荐一种策略来聚合存储在超过100000000行的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', `per

有谁能推荐一种策略来聚合存储在超过100000000行的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;
我想做的是让这些数据更容易处理。我想从中提取每周和每月的聚合,按类型、公司ID和上下文ID分组

理想情况下,我希望将这些数据从生产服务器上取下,进行聚合,然后将其合并回来

我真的有点为难,想知道是否有人有什么好的起点或策略来聚合数据,以便使用MySQL快速查询数据。我不要求对这些数据进行“实时”报告


我过去曾尝试过批处理PHP脚本,但速度似乎很慢。

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

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


另外,我强烈建议您阅读并查看有关在MySQL中使用海量数据集的更多信息

我已经看到这可以在夜间运行的例程中实现,并使用每月和每周聚合的数据填充表。也许这是你的一个选择。显然,在这种情况下,性能没有被视为批评点,因为系统没有在夜间使用。感谢您的评论-有关于实施的建议吗?语言?我经历了两种方法。第一个是调度oracle作业,这些作业执行的存储过程完成了我们需要完成的所有工作,它工作起来很有魅力,而且非常简单,因为RDBMS可以处理所有事情。第二个是实现PHP脚本,该脚本是通过服务器上的cron作业执行的,发送GET参数以提高安全性。我真的不知道你的可能性。当然PHP是一种可能性。我想没有框架的纯PHP对性能来说是最好的。确切地说,一个只有聚合逻辑的简单PHP脚本是理想的。但是我会小心处理这个问题,请记住,在聚合数据时,可以存储在内存中的量是有限制的。有一亿条记录,这绝对是个问题。