2011-07-07 20 views
1

膨大な量のデータを処理する必要がある新しいデータベースの設計に取り組んでいます。これは、データウェアハウスシステムとなり、ひいては中央ハブテーブルを中心に構成されます。別のテーブルのカラムに基づいてMySQLテーブルを分割する

create table hub(id BIGINT NOT NULL AUTO_INCREMENT PRIMARY KEY, 
date_time DATETIME NOT NULL, bit_of_data INT NOT NULL); 

このテーブルは非常に大きく成長し、DATE_TIME」列に基づいて、それを分割する必要がありますようです各パーティションは、例えば、1ヶ月のデータである。しかし、また別のテーブルがあるでしょう:

create table other_data(id BIGINT NOT NULL PRIMARY KEY, 
more_data INT NOT NULL, FOREIGN KEY(id) REFERENCES hub(id)); 

この2番目の表は、主な「ハブ」テーブルに表示されたIDの約90%のレコードが含まれています。私は 'other_data'テーブルだけでなく、 'ハブ'テーブルを分割し、パーティションが基本的にお互いに一致するようにしたいと思います。ある期間に 'hub'テーブルを分割し、同じ日付範囲で 'other_data'テーブルを分割する方法はありますか?

ありがとうございます!

+1

パーティショニングは、テーブル自体の内容に基づいて行われなければならず、他のテーブルの内容に基づいて行われる必要があります。月に2番目のテーブルに入っている標準の行数がある場合は、挿入レートにほぼ一致するIDの範囲でパーティション化できます。 –

答えて

1

これは、other_dataテーブルに(還元剤)日付列を追加することによってのみ実行できます。

+0

この戦略には、データベースで採用できる可能性のある変更が1つあります。 「other_data」表に日付列全体を格納する代わりに、「hub」表に年、月、および自動増分フィールドで構成される複合主キーを保持させることができます。これはother_data表の主キーとして使用されます同じように。パーティショニングは、すべてのテーブルで月単位で行うことができます。年/月のコンボの代わりに、年を指定しないで月の列だけを使用して、毎月の列の増分を渡すこともできます。 – bnsmith

関連する問題