0

ユーザーエクスペリエンスに影響を与えることなく、ライブマシン上のテーブルを更新する方法が必要です。

MyISAMエンジンには、15分ごとに更新されるテーブルがいくつかあります。更新スクリプトは、テーブルを切り捨てて、選択した文からデータを挿入するだけです。問題が発生した後、ユーザーは更新中のテーブルから情報を表示しようとします-ユーザーエクスペリエンスが遅れ、誤った情報が表示されます。

InnoDBトランザクションを使用するのは簡単ですが、MyISAMについてはどうでしょうか。

4

4 に答える 4

2

InnoDB に移行できない場合、私が考えられる唯一のことは、更新時にキャッシュのレイヤーを追加することです。(たとえば、APC または memcached?)

通常はキャッシュをスキップするものを作成することもできます。更新サイクルを開始すると、「遠い将来」の有効期限でキャッシュ内の現在のコンテンツを設定し、キャッシュからコンテンツを提供し、更新が完了するとそれらを無効にします。

追加の利点は、キャッシュシステムが機能するようになったことです。これにより、すべてが高速化される可能性があります:)

于 2012-06-18T13:48:58.110 に答える
2

あなた自身が書いたように。InnoDB に移動するか、その移動を妨げている理由を説明してください。

于 2012-06-18T13:45:40.623 に答える
1

一時テーブル名を操作して、ユーザーに VIEW を提示できます。

手順は次のとおりです。

于 2012-06-18T14:07:06.117 に答える
1

myISAM を使用する必要がある場合は、この種のことを試すことができます。バージョン 5.0 以降である必要があります。そうでない場合は、アップグレードしてください。

  1. 一時的な名前で新しいテーブルを作成する
  2. 新しいテーブルにデータを入力します (これは時間のかかる操作です)
  3. 生産テーブルをロックします。
  4. 本番テーブルの名前を別の名前に変更します。
  5. 一時テーブルの名前を本番テーブルに使用されている名前に変更します。
  6. 生産テーブルのロックを解除します。
  7. 古い運用テーブルを削除します (または、ディスク領域を再利用するために何か他のことを行います)。

これを読み取るために使用しているソフトウェアを、テーブルが見つからないことを訴える SQL エラーに対して回復力のあるものにし、1 秒ほど後に再試行するだけでよい場合は、ロックとロック解除の手順をスキップできます。ただし、これらの手順により、名前の変更のシャッフル中に、運用テーブルの正しい名前のテーブルが存在しないという短い瞬間からシステムが保護されます。

これはモンキービジネスであり、少しデバッグが必要です。しかし、それは私にとって非常にうまく機能しました。

(私は「モンキー ビジネス」を、純粋でエレガントな SQL の範囲外のものと定義しています。)

于 2012-06-18T14:00:29.960 に答える