ユーザーエクスペリエンスに影響を与えることなく、ライブマシン上のテーブルを更新する方法が必要です。
MyISAMエンジンには、15分ごとに更新されるテーブルがいくつかあります。更新スクリプトは、テーブルを切り捨てて、選択した文からデータを挿入するだけです。問題が発生した後、ユーザーは更新中のテーブルから情報を表示しようとします-ユーザーエクスペリエンスが遅れ、誤った情報が表示されます。
InnoDBトランザクションを使用するのは簡単ですが、MyISAMについてはどうでしょうか。
InnoDB に移行できない場合、私が考えられる唯一のことは、更新時にキャッシュのレイヤーを追加することです。(たとえば、APC または memcached?)
通常はキャッシュをスキップするものを作成することもできます。更新サイクルを開始すると、「遠い将来」の有効期限でキャッシュ内の現在のコンテンツを設定し、キャッシュからコンテンツを提供し、更新が完了するとそれらを無効にします。
追加の利点は、キャッシュシステムが機能するようになったことです。これにより、すべてが高速化される可能性があります:)
あなた自身が書いたように。InnoDB に移動するか、その移動を妨げている理由を説明してください。
一時テーブル名を操作して、ユーザーに VIEW を提示できます。
手順は次のとおりです。
CREATE TABLE newtable
INSERT INTO newtable
CREATE OR REPLACE VIEW
DROP TABLE oldtable
myISAM を使用する必要がある場合は、この種のことを試すことができます。バージョン 5.0 以降である必要があります。そうでない場合は、アップグレードしてください。
これを読み取るために使用しているソフトウェアを、テーブルが見つからないことを訴える SQL エラーに対して回復力のあるものにし、1 秒ほど後に再試行するだけでよい場合は、ロックとロック解除の手順をスキップできます。ただし、これらの手順により、名前の変更のシャッフル中に、運用テーブルの正しい名前のテーブルが存在しないという短い瞬間からシステムが保護されます。
これはモンキービジネスであり、少しデバッグが必要です。しかし、それは私にとって非常にうまく機能しました。
(私は「モンキー ビジネス」を、純粋でエレガントな SQL の範囲外のものと定義しています。)