0

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

4

2 に答える 2

1

毎月/毎週のデータ集計ロジック全体を備えた単純な PHP スクリプトを実装し、特定の時間に cron ジョブを介して実行することができます。ソフトウェアのコンテキストによっては、夜間に実行するようにスケジュールされる可能性があります。さらに、リクエスト ソースを認識するために、リクエストで GET パラメータを渡すこともできます。

于 2012-09-30T20:44:36.430 に答える
0

MySQL レプリケーションに興味があるかもしれません...データセットのレプリケートされたコピーでレポートを実行することだけが唯一の仕事である 2 番目のサーバーをセットアップするため、そのジョブ用に特別に調整できます。レプリケーション スキームをマスター-マスターとして設定すると、レポート サーバーがレポートの結果に基づいて独自のテーブルを更新するときに、それらのデータベースの変更が自動的に運用サーバーにレプリケートされます。

また、High Performance MySQL, 3rd Edを読むことを強くお勧めします。、MySQL で大量のデータセットを操作する方法の詳細については、 http://www.mysqlperformanceblog.com/を参照してください。

于 2012-10-02T19:06:00.040 に答える