1億行を超える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 スクリプトを試したことがありますが、これは非常に遅いようでした。