1

集計データを含むいくつかのデータベース テーブルがあります。それらのレコード (数千/テーブル) は、外部の .NET アプリによって定期的に再計算されるため、古いデータを削除し、新しいデータを定期的に挿入する必要があります。この場合、更新はオプションではありません。

削除/挿入の間には、レコードの状態が一貫していない (古いレコードは削除され、新しいレコードはまだテーブルにない) 中間の時間があるため、その状態で選択クエリを作成すると、誤った結果が生じます。

データベース機能を処理するために subsonic simplerepository を使用しています。

この状態を回避/処理するためのベストプラクティス/パターンは何ですか?

4

1 に答える 1

3

次の 3 つのオプションが思い浮かびます。

  1. 完了するまで読み取りをロックするトランザクションを作成します。これは、プロセスが比較的高速な場合にのみ機能します。一度にテーブルをトランザクション/ロックする場合、数千のレコードはそれほど悪くないはずです-プロセス全体をロックすると、コストがかかる可能性があります! しかし、データが関連している場合、これはあなたがしなければならないことです
  2. テーブルの一時バージョンに書き込み、古いテーブルを削除して一時テーブルの名前を変更します。
  3. 上記と同じですが、一時テーブル (必ずしも SQL 一時テーブルではなく、補助的な保持テーブルで十分です) から正しいテーブルに一括コピーし、最初にメイン テーブルから削除します。これにはまだトランザクションを使用したいと思うでしょう。
于 2012-12-11T21:19:04.930 に答える