0

レコードが既に存在するかどうかに基づいて、レコードを挿入または更新する必要があります。

JdbcBatchItemWriter を使用してレコードを書き込んでいます。しかし、主キーを持つレコードが既に存在する場合は、それを更新する必要があります...

したがって、1つの解決策は次のとおりです。

挿入用と更新用の 2 つの個別のリストを作成するには (注: レコードが既に存在するかどうかを毎回プロセッサでチェックして、リストの 1 つにレコードを追加する必要があります)、ライターに 2 つの異なる JdbcBatchItemWriter インスタンスを作成します。 、 例えば:

JdbcBatchItemWriter<insertList> insertWriter;
JdbcBatchItemWriter<updateList> updateWriter;

バッチ更新時にすでに存在するレコードに基づいてライターのクエリを切り替える他の方法はありますか...つまり、1つだけです

JdbcBatchItemWriter<mylist> allWriter...and 
allWriter.write(mylistallitems);

マージ クエリを使用することを考えていますが、パフォーマンスの問題はありますか?

4

1 に答える 1

0

2 つの異なるリストを使用することは、将来別の永続化メカニズムを使用する場合にアプリを再設計する必要がないため、より適切なオプションになる可能性があります。DB からすべての既存の主キーを取得し、コレクション ホルダーに格納して、プロセッサで参照する単一のクエリが必要な場合があります。

「Oracle Merge Performance」で SO を簡単に検索すると、さまざまな要因によるパフォーマンスの問題の複数のインスタンスが示され、巧妙に作成された挿入/更新 SQL よりも遅くなる可能性があります。

また、(更新のために) 完全なデータを再度受信する場合は、truncate-insert アプローチ [リスナーを追加して挿入前に削除] を検討することをお勧めします。

于 2014-03-10T21:50:36.437 に答える