1

ファイルからデータをロードし、レコードをテーブルに挿入しようとするプロセスがあります。

ファイルが大きすぎると、XYZ テーブルのすべてのデータをロードするのに時間がかかります。テーブルにレコードを挿入するためにバッチを使用しています。

その間、別のプロセスが起動し、XYZ テーブルから何らかの条件に基づいてデータを読み取ろうとします。これは、1 番目のプロセスがテーブルへのデータの書き込みを完了しておらず、2 番目のプロセスが同じデータを読み取ろうとするためです。 、使用中のオブジェクトエラーが発生します。

この問題を解決するには、次の 2 つのオプションを考えていました。

  1. すべてのレコードがプロセス 1 によって挿入されない限り、プロセス 2 がレコードを取得できないように、ステータス列の 1 つを別のものにしておきます。

  2. データをチャンクで挿入します。何かが失敗した場合、最後に挿入されたレコードから再試行するメカニズムがあります (これにはメカニズムが必要です)。

DB2 とプレーンな jdbc を使用してレコードを挿入しています。

この問題を解決する最善の方法を教えてください

4

2 に答える 2

0

どの DB やライブラリを使用しているかはわかりませんが、トランザクションを使用して同時読み取りと書き込みを制御することを検討する必要があります。プロセス 1 は、単一のトランザクションでデータのチャンクを書き込む必要があります。このデータは、すべてが書き込まれるまでプロセス 2 からは見えないため、2 つの間で競合が発生することはありません。これは、データに正しいトランザクション分離レベルが設定されていることを前提としています。

たとえば、Spring を使用している場合、関数を @Transactional でマークするのは簡単です。これにより、tat 関数内のすべての DB 呼び出しが単一のトランザクションで動作します。

于 2013-10-07T20:32:29.747 に答える