バッファを使用したデータのロード
次の例のMaxL操作は、一時的なロード・バッファを使用してEssbase集約ストレージ(ASO)データベースへのデータ・ロードを合理化する方法を示しています。
複数のImport Data (集約ストレージ)文を使用してデータ値を集約ストレージ・データベースにロードする場合、まず、値を一時データ・ロード・バッファにロードし、すべてのデータ・ソースが読み込まれてからストレージに最終書込みを行うことで、パフォーマンスを大幅に向上できます。
メモリー内にデータ・ロード・バッファが存在する間は、集約の構築やスライスのマージは大量のリソースを要する操作であるため行えません。ただし、他のデータ・ロード・バッファにデータをロードし、問合せやその他の操作をデータベース上で実行することは可能です。完全なデータ・セットがデータベースにコミットされて集約が作成されるまで、問合せに短い待機が生じる場合があります。
データ・ロード・バッファは、バッファ・コンテンツがデータベースにコミットされるか、アプリケーションが再起動されるまでメモリー内に存在します。このタイミングで、バッファは破棄されます。コミット操作が失敗した場合も、バッファは破棄されてデータはデータベースにロードされません。
複数のデータ・ロード・バッファが単一の集約ストレージ・データベースに存在できます。時間を節約するために、個別のMaxL Shellセッションを使用して同時に複数のデータ・ロード・バッファにデータをロードできます。データベース上でアクティブにできるデータ・ロード・コミット操作は常に1つだけですが、同じコミット操作で複数のデータ・ロード・バッファをコミットすることが可能で、このほうが個別にコミットするよりも高速です。
集約ストレージ・データベースに存在するデータ・ロード・バッファのリストと説明をデータベースに問い合せられます。「集約ストレージ・データ・ロード・バッファのリスト」を参照してください。
例:
例: 単一のデータ・ロード・バッファへの複数データ・ソースのロード
インポートする必要があるデータ・ファイルが3つあると仮定します。集約ストレージ・データベースでは、1回のインポート操作を使用してすべてのデータ・ファイルをロードするデータ・ロードが最も効率的です。このため、複数のデータ・ファイルをロードする場合はロード・バッファが便利です。
-
Alter Database (集約ストレージ)を使用して、ロード・バッファを作成します。
alter database ASOsamp.Basic initialize load_buffer with buffer_id 1;
-
Import Data (集約ストレージ)文を使用してバッファにデータをロードします。
import database ASOsamp.Basic data from server data_file 'file_1' to load_buffer with buffer_id 1 on error abort; import database ASOsamp.Basic data from server data_file 'file_2' to load_buffer with buffer_id 1 on error abort; import database ASOsamp.Basic data from server data_file 'file_3' to load_buffer with buffer_id 1 on error abort;
-
データをバッファからデータベースに移動します。
import database ASOsamp.Basic data from load_buffer with buffer_id 1;
データ・ロード・バッファが暗黙的に破棄されます。
-
手順2で、'file_2'をロード・バッファにロードした後、データをロードしないことに決めたと仮定します。データは、まだデータベースではなくバッファ内にあるため、Alter Database (集約ストレージ)を使用してデータをデータベースに移動せずにバッファを破棄します。
alter database ASOsamp.Basic destroy load_buffer with buffer_id 1;
例: 複数データ・ロードの並列実行
-
1つのMaxL Shellセッションで、ID 1でデータをバッファにロードします。
alter database ASOsamp.Basic initialize load_buffer with buffer_id 1 resource_usage 0.5;
import database ASOsamp.Basic data from data_file "dataload1.txt" to load_buffer with buffer_id 1 on error abort;
-
同時に、別のMaxL Shellセッションで、ID 2でデータをバッファにロードします。
alter database ASOsamp.Basic initialize load_buffer with buffer_id 2 resource_usage 0.5;
import database ASOsamp.Basic data from data_file "dataload2.txt" to load_buffer with buffer_id 2 on error abort;
-
データがデータ・ロード・バッファに完全にロードされたら、1つのMaxL文にバッファIDのカンマ区切りリストを使用して、両方のバッファのコンテンツをデータベースにコミットします。
import database ASOsamp.Basic data from load_buffer with buffer_id 1, 2;