0

マルチパーティションでいくつかのSpringバッチジョブを実行しています...バッチジョブのステージングテーブルとしてOracleのグローバル一時テーブルを使用して、ジョブの実行中にのみステージングテーブルが存続するようにしたかった...現在、物理テーブルがあります

これらすべてをTomcatで実行しています。Tomcat接続プールが実装されています...

したがって、私のステージング テーブルは、ステージング ライターによって設定されます。データを見ることができました。今まではすべて問題ないように見えます

この時点まで、私の仕事はシングル スレッドです。この後、ステージング テーブル内の異なる範囲のレコードを読み取るマルチリーダーがすべて存在します。

ステージング リーダーはパーティション分割されており、各パーティションはプールから 1 つの接続を使用しています。そのため、ほとんどのリーダーは一時テーブルのデータを見ることができません。テーブルが作成および挿入されたセッション

接続プールを使用してすべてのリーダーがデータを利用できるようにする方法はありますか?

4

1 に答える 1

2

グローバル一時テーブルのデータは、それを挿入したセッションでのみ表示されます。テーブル自体は、ローカルの一時テーブルを使用する他のデータベースとは異なり、常に存在します(「テーブルはジョブの実行中にのみ存続する」というコメントは正しくないようです)。

データをセッション間で表示したい場合は、実際にはデータを永続的なステージングテーブルにロードする必要があります。複数のセッション間でデータを共有する方法は他にもあります(たとえば、グローバルコンテキスト)が、データを処理するために複数のスレッドを生成する場合、これらのオプションはデータボリュームにとっておそらく実用的ではありません。処理の性質によっては、アプリケーションに1つのスレッドがあり、他のすべてのスレッドにデータを分散して、コーディネーターだけがステージングテーブルにクエリを実行する必要がある場合があります。

于 2013-03-21T18:04:13.927 に答える