0

私は、データを継続的に取得し、それらを SQL データベース (MySQL または SQL Server - まだ不明) に書き込むマルチスレッド .NET 4 アプリケーションに取り組んでいます。

aが実行されるたびに、データベースと同期するためINSERTに少なくとも 1 つの前もって必要です。SELECTこれは、アプリケーションが新しいデータと古いデータを含むブロックを取得し、新しいデータ セットとデータベースに既に存在するデータ セットを確認する必要があることを意味します。

これは、多くのSELECTS場合、毎回多かれ少なかれ同じデータになることを意味します。

アプリケーション内のテーブルごとに最後の x エントリのコピーを保持することは良い考えでしょうか? このようにして、データベースではなくコピーで同期を行うことができます。

プロ:

  • もっと早く

反対:

  • 多くのメモリを使用します
  • データベースとの同期が取れなくなるリスク

どう思いますか?このようなユースケースのベストプラクティスは何ですか? 他の長所と短所はありますか?

4

2 に答える 2

1

データベースに書き込むプロセスが複数ある場合、メモリ内データとデータベースの間で完全な同期を維持することは簡単ではありません。実際、同期されていることを確認する唯一の方法は、データベースで SELECT クエリを作成することです。したがって、完全な同期と、非常に効率的なある程度の許容範囲を伴う同期との間にはトレードオフがあります。

どちらの場合にも役立つ可能性のある私の提案は次のとおりです。

  1. SELECT クエリを調整します。必要に応じてインデックスを追加します。
  2. バージョン番号などのメタデータを作成します。そのため、同期が必要かどうかを判断するために非常に些細なことを確認するだけで済みます。
  3. SELECT および INSERT ロジックを実装するストアド プロシージャを記述します。これにより、データベースに対して複数の呼び出しを行うことについて心配する必要がなくなります。
于 2012-11-01T17:59:21.817 に答える
1

同時にデータベースに書き込む外部プログラムがない限り、バッファリングを使用できます。

ただし、SELECT の結果をバッファリングする代わりに、最後の X (妥当な数) の挿入要求のバッファを挿入メソッドに追加し、そのリストにない場合にのみ新しい挿入要求を挿入します。

包含チェックが常に正しいことを確認するために、挿入メソッドをロックすることもできます。

于 2012-11-01T09:21:28.647 に答える