0

私は、いくつかのシステムで DB 相互作用を行うインターフェースに取り組んでいます。私の仕事の一環として、ソース データベースにクエリを実行し、いくつかのプロシージャを呼び出し、参照カーソルでデータを取得し、宛先データベースにデータを入力することになっています。

データ量が膨大になる可能性があるため、宛先データベースでマルチスレッドを使用してプロシージャを呼び出しています。たとえば、ロードされると想定されるエントリの総数が 100 万の場合、宛先データベースで、プロシージャはそれぞれ 100K レコードで 10 回呼び出されます。

この配置は、ソース データベースのデータ ボリュームが膨大な場合 (例: 200 万を超えるエントリ) を除いて、正常に機能しています。レコードを処理するために約 20 GB のヒープ スペースを設定しましたが、プログラムがヒープ メモリ エラーで失敗します。

ソース データベースから並列モードでデータをクエリする方法があるかどうかを知りたい (たとえば、ソース ストアド プロシージャから合計 200 万件のレコードがフェッチされると仮定すると、私のプログラムは最初にこのレコードのサブセットをフェッチする必要があります)そして次に進むか、そのようなものです)。

私が提案した解決策の 1 つは、データベース側を介してこの方法でレコードを送信することですが、より良い代替手段があるかどうかを知りたいです。提案してください

4

1 に答える 1

0

これに対する解決策を見つけました。Spring API の BeanPropertyRowMapper クラスを拡張する必要があり、mapRow メソッドをオーバーライドする必要があります。データをフェッチする準備ができると、mapRow メソッドが呼び出されます。この段階で、ある種のバッチ処理メカニズムを適用できます。データはストアド プロシージャを使用してフェッチされ、出力は参照カーソルの形式で取得されるため、質問を投稿したことに注意してください。

于 2013-04-24T17:33:10.573 に答える