2009-03-30 13 views
0

私は毎日再構築されるいくつかの非常に大きなMyISAMテーブル(主に最新の業界とサイトのデータを使って再構築されたテーブルの検索)を必要とするアプリケーションに取り組んでいます。これらのテーブルを再構築するために使用されるクエリは非常に重く、本稼動データベースに対して実行するには不適切です。大規模なMySQLテーブルを再生成する最良の方法

これらのテーブルを生成するための専用のサーバーがあり、master-slaveレプリケーションを使用して、本番データベースの最新のコピーを、再構築クエリの一部として使用する処理サーバーに保存します。私の質問は、いったんこれらのテーブルが構築されると、それらを本番データベースに移す最善の方法は何ですか(効果的に古いテーブルを削除し、新しいテーブルに置き換える)?

これまで、バイナリデータとインデックスファイルをサーバー間で移動し、場所にコピーしました。しかし、これは複製にはうまくいきません。

このタスクには他にどのような方法がありますか?プロダクションデータベースと処理データベースの間のマスターとマスターのレプリケーションは、どんな使い方ですか?

答えて

2

別のテーブルに新しいテーブルを作成する方法は? 「newfoo」、それは限り、あなたはそれを生成する必要があるとしてましょう、とするとき、あなたはそれを交換する準備ができている、単にrenameそれは

drop table if exists oldfoo; 
rename table foo to oldfoo, newfoo to foo; 
+0

を選択するために使用するコード - しかし、基本的には、大規模なクエリはまだ生産上で実行されますmysqldインスタンスは、(たとえそれがテーブルをロックしなくても)サーバーを壊します。 – DavidWinterbottom

0

は、私は長い時間前に同じ問題を持っていた、これは私がやったことです:2つのテーブルを使用します.1つは偶数日、もう1つは奇数日です。

コードやストア手順では、その日を2つに分けた日数を入力して挿入する場所を選択し、結果を確認することができます。

このように偶数日と偶数日を処理することができます。

この我々は我々はすでにこれをやっているテーブル

<?php 
$day_of_year = (int) date('z'); 
$table_sufix = $day_of_year % 2 ? "even" : "odd"; 
$insert_on = "table_" . $table_sufix; 

?> 

とプロセス

<?php 
$day_of_year = (int) date('z'); 
$table_sufix = $day_of_year % 2 ? "odd" : "even"; // note only this little change 
$process_table = "table_" . $table_sufix; 

?> 
関連する問題