1

定期的に新しいデータが完全に再入力される db テーブルがあります。次に、このデータを対応するライブ データベース テーブルにプッシュして、以前のライブ データを上書きする必要があります。

テーブルのサイズが大きくなると、データをライブ テーブルにプッシュするのに必要な時間も長くなり、アプリは欠落したデータのように見えます。

1 つの解決策は、新しいデータを live_temp テーブルにプッシュし、このテーブルで SQL RENAME コマンドを実行して、名前を live テーブルとして変更することです。通常、名前の変更は 1 秒未満で実行されます。これは、この問題を解決する「正しい」方法ですか?

この問題に取り組むための他の戦略やツールはありますか? ありがとう。

4

3 に答える 3

1

複製テーブルを作成します-正確なコピー。

「最新の」テーブルを追跡するだけの新しいテーブルを作成します。MostCurrent(テーブル)id(列)-「最新」のデータを保持するテーブルの名前を保持します。

再入力するときは、古いテーブルにデータを入力し、このテーブルを反映するようにMostCurrent.idを更新します。

次に、データをページにバインドするアプリで、最新のテーブルをバインドします。

于 2011-06-25T00:01:09.703 に答える
1

このようにスキーマ オブジェクトをいじるのは好きではありません。クエリ オプティマイザを混乱させる可能性があり、名前変更の実行中に実行中のトランザクションがどうなるかわかりません。

テーブルにバージョン列を追加し、現在のバージョンを保持する別のテーブルを用意することをお勧めします。

そうすれば、クライアントコードは次のようになります

select * 
from myTable t, 
     myTable_currentVersion tcv
where t.versionID = tcv.CurrentVersion

これにより、履歴も保持されます-これは役立つ場合とそうでない場合があります。CurrentVersion 列を設定した後に古いレコードを削除しない場合。

于 2011-06-24T23:47:57.840 に答える
0

変更をライブ データベース テーブルにのみプッシュすることは適切でしょうか? 私が取り組んできたほとんどのアプリケーションでは、変更は最小限で済みました。1 回のトランザクションですべての変更を適用できるはずです。トランザクションをコミットすると、テーブルが停止することなく表示されます。

データが完全に変更された場合は、単一のトランザクションですべてのデータを置き換えることができるようにデータベースを構成できます。

于 2011-06-24T23:24:32.990 に答える