0

いくつかのログ ファイルに基づいていくつかのレポートを作成しようとしています (最大 5,000 万レコードで、今後 10 倍になる可能性があります)。これをテーブルにロードし、必要な変更を加えます (複製の削除など)テーブルは、製品ごとのタイプ別および日別のリクエスト数を保持することになっているため、リクエスト数を表すカウント列を使用して、これを個別の製品に切り詰めようとしています

ログ データを含む元のテーブルは次のとおりです。

*************************** 1. row ***************************
       Table: cdnlog2
Create Table: CREATE TABLE `cdnlog2` (
  `serial` int(32) DEFAULT NULL,
  `ip` varchar(100) DEFAULT NULL,
  `country` varchar(100) DEFAULT NULL,
  `productid` int(11) DEFAULT NULL,
  `type` varchar(100) DEFAULT NULL,
  `query_date` date DEFAULT NULL,
  KEY `aaa` (`country`),
  KEY `ccc` (`productid`),
  KEY `type` (`type`),
  KEY `date_index` (`query_date`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1

宛先テーブル:

*************************** 1. row ***************************
       Table: cdnlogfinal
Create Table: CREATE TABLE `cdnlogfinal` (
  `country` varchar(100) DEFAULT NULL,
  `productid` int(11) DEFAULT NULL,
  `type` varchar(100) DEFAULT NULL,
  `request_count` int(11) DEFAULT NULL,
  `query_date` date DEFAULT NULL,
  KEY `aaa` (`country`),
  KEY `ccc` (`productid`),
  KEY `type` (`type`),
  KEY `date_index` (`query_date`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1

個別の行とその数だけでグループ化された値にレコードの数を削減しようとしています (同じ製品が同じ日に複数回選択される可能性があるため、ログには重複が含まれる可能性があります)。ただし、セカンダリ テーブルへの挿入は、「ディスク上の tmp テーブルにコピーしています」というステータスで数時間実行されています - 十分なスペースを確保するために一時ディレクトリを変更しました - 何かポインタはありますか?

前もって感謝します

4

1 に答える 1

0

あなたのアイデアは素晴らしいものであり、最終的な結果はレポート クエリを大幅に高速化します。パズルを解くには、あと 1 個のピース​​が必要です。

問題は、1 回のクエリで派生テーブルのすべての行を作成するには、ベース テーブルに行が多すぎることです。トランザクションを超えています。

代わりに、これを 1 日 1 日行う必要があります。

insert into cdnlog2 (country, productid, type, query_date)
select country, productid, type, date(transaction_time)
from cdnlog
where transaction_time between '2012-01-01 00:00:00' and '2012-01-01 23:59:59'
group by country, productid, type

データ範囲内の毎日に対してこのクエリを個別に実行し、それに応じて開始/終了タイムスタンプを変更します。

履歴データが計算されたら、バッチ処理の一環として、前日にこれを 1 日 1 回実行します。


あなたがしているのは、データ ウェアハウスの作成です。このデータを別の専用サーバーに配置することを強く検討してください。これを行うことには多くの利点があります - 何を見つけるために読んでください。

于 2012-06-03T19:07:01.403 に答える