|
TOracleDirectPathLoader component |
Top Previous Next |
|
Unit 説明 ToracleDirectPathLoaderコンポーネントでアプリケーションが、SQL*Loaderにも使われているOracle ServerのDirect Path Loadエンジンをアクセスすることが出来ます。 これは外部データをメモリからデータベースへ可能な限り高速に読み込めるようにします。 個々のレコードを挿入するのにInsert SQL命令を使う代わりに、メモリ内の外部データはテーブルの実際のデータベースブロックにすぐさま書き込まれる書式に変換されます。 これにより、基本的にはInsert命令を処理するArray DMLよりも速くなります。 この速度の利点がある代わりにいくつかの制約があります:
これらの難点がDML配列に助けを求める理由かもしれません。DML配列はこれら制約の影響をうけませんし、その上最高のバッチ読み込みパフォーマンスを提供してくれます。 しかしながら、ToracleDirectPathLoaderの速度の優位性は考慮すべきものがあります。 例えば、ペンティアムIIIクラスサーバーの機器設定でローカルのデータベースへインデックスなしの40バイトの2カラムを持つテーブルへ10,000レコードの読み込みは、次のベンチマーク結果を示します: Single Inserts: 1,500 records / second Array Inserts: 15,000 records / second Direct Path Loading: 60,000 records / second 結果はパラメーターの違いにより変わってきます。 例えば、テーブルが一つ以上のインデックスを持っていると、それぞれの挿入された列に対してよりオーバーヘッドが発生します。そしてそれぞれの結果はより近いものとなるでしょう。 ToracleDirectPathLoaderコンポーネントを使う TOracleDirectPathLoaderコンポーネントを使っているテーブルへ外部データを読み込むために、次のタスクを実行する必要があります:
設計時にToracleDirectPathLoaderインスタンスを作成したあと、それをSessionにリンクしてTableNameを規定します。 次にColumnsプロパティエディタを通じて読み込みたいカラムを定義し、ます。それぞれのカラムに対して、外部data typeとdata sizeとデータに対して外部date formatを定義する必要があります。
Prepareプロシージャーの呼び出しはレコードのバッチに対する配列を作成します。 この配列にフィットするレコードの数はBufferSizeプロパティとカラムの数、データサイズによります。
データ配列にフィットするバッチに外部データを分割する必要があります。Prepareを呼び出したあと、 データ配列のサイズはMaxRowsプロパティによって定義されます Direct Path Loadエンジンはメモリ内の配列からしかデータを読み込むことが出来ないので、それぞれのバッチは完全にメモリに読まれないといけません。Columns[Index].SetDataプロシージャーを呼ぶことで配列にそれぞれの要素を満たします。 配列からデータをテーブルに読み込むためにLoadプロシージャーを呼ぶことが出来ます。
全ての外部データを個々のバッチとして処理したあと、読み込まれたデータをコミットするためにはFinishプロシージャーを呼んでください。 読み込み操作をアンドゥするためには、代わりにAbort プロシージャーを呼んでください。 |