バッファを使用したデータのロード

次の例のMaxL操作は、一時的なロード・バッファを使用してEssbase集約ストレージ(ASO)データベースへのデータ・ロードを合理化する方法を示しています。

複数のImport Data (集約ストレージ)文を使用してデータ値を集約ストレージ・データベースにロードする場合、まず、値を一時データ・ロード・バッファにロードし、すべてのデータ・ソースが読み込まれてからストレージに最終書込みを行うことで、パフォーマンスを大幅に向上できます。

メモリー内にデータ・ロード・バッファが存在する間は、集約の構築やスライスのマージは大量のリソースを要する操作であるため行えません。ただし、他のデータ・ロード・バッファにデータをロードし、問合せやその他の操作をデータベース上で実行することは可能です。完全なデータ・セットがデータベースにコミットされて集約が作成されるまで、問合せに短い待機が生じる場合があります。

データ・ロード・バッファは、バッファ・コンテンツがデータベースにコミットされるか、アプリケーションが再起動されるまでメモリー内に存在します。このタイミングで、バッファは破棄されます。コミット操作が失敗した場合も、バッファは破棄されてデータはデータベースにロードされません。

複数のデータ・ロード・バッファが単一の集約ストレージ・データベースに存在できます。時間を節約するために、個別のMaxL Shellセッションを使用して同時に複数のデータ・ロード・バッファにデータをロードできます。データベース上でアクティブにできるデータ・ロード・コミット操作は常に1つだけですが、同じコミット操作で複数のデータ・ロード・バッファをコミットすることが可能で、このほうが個別にコミットするよりも高速です。

集約ストレージ・データベースに存在するデータ・ロード・バッファのリストと説明をデータベースに問い合せられます。「集約ストレージ・データ・ロード・バッファのリスト」を参照してください。

例:

例: 単一のデータ・ロード・バッファへの複数データ・ソースのロード

インポートする必要があるデータ・ファイルが3つあると仮定します。集約ストレージ・データベースでは、1回のインポート操作を使用してすべてのデータ・ファイルをロードするデータ・ロードが最も効率的です。このため、複数のデータ・ファイルをロードする場合はロード・バッファが便利です。

  1. Alter Database (集約ストレージ)を使用して、ロード・バッファを作成します。

    alter database ASOsamp.Basic 
    initialize load_buffer with buffer_id 1;
  2. 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;
  3. データをバッファからデータベースに移動します。

    import database ASOsamp.Basic data
    from load_buffer with buffer_id 1;

    データ・ロード・バッファが暗黙的に破棄されます。

  4. 手順2で、'file_2'をロード・バッファにロードした後、データをロードしないことに決めたと仮定します。データは、まだデータベースではなくバッファ内にあるため、Alter Database (集約ストレージ)を使用してデータをデータベースに移動せずにバッファを破棄します。

    alter database ASOsamp.Basic
    destroy load_buffer with buffer_id 1;

例: 複数データ・ロードの並列実行

  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;
  2. 同時に、別の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;
  3. データがデータ・ロード・バッファに完全にロードされたら、1つのMaxL文にバッファIDのカンマ区切りリストを使用して、両方のバッファのコンテンツをデータベースにコミットします。

    import database ASOsamp.Basic data
    from load_buffer with buffer_id 1, 2;