すべてのプロダクト
Search
ドキュメントセンター

Tablestore:セカンダリインデックスを作成する

最終更新日:Dec 28, 2024

セカンダリインデックス機能を使用すると、データテーブルのプライマリキーと、データテーブルに作成されたセカンダリインデックスのインデックスカラムに基づいてデータをクエリできます。データテーブルの属性カラムを使用してデータをクエリする必要がある場合は、データテーブルのセカンダリインデックスを作成してデータクエリを高速化できます。データテーブルのセカンダリインデックスを作成するときは、セカンダリインデックスのインデックスカラムまたは属性カラムを、データテーブルの作成時に指定した事前定義カラムに設定できます。セカンダリインデックスを作成したら、セカンダリインデックスを使用してデータをクエリできます。

説明
  • セカンダリインデックスは、グローバルセカンダリインデックスとローカルセカンダリインデックスに分類されます。セカンダリインデックス機能の詳細については、セカンダリインデックス を参照してください。

  • CreateTable オペレーションを呼び出すことで、データテーブルを作成するときに 1 つ以上のインデックステーブルを作成できます。詳細については、データテーブルを作成する を参照してください。

前提条件

  • OTSClient インスタンスが初期化されていること。詳細については、OTSClient インスタンスを初期化する を参照してください。

  • max_versions パラメータが 1 に設定されているデータテーブルが作成されていること。データテーブルの time_to_live パラメータは、次のいずれかの条件を満たしている必要があります:

    • データテーブルの time_to_live パラメータが -1 に設定されていること。これは、データテーブル内のデータが期限切れにならないことを意味します。

    • データテーブルの time_to_live パラメータが -1 以外の値に設定されており、データテーブルの更新操作が禁止されていること。

  • データテーブルに事前定義カラムが指定されていること。

使用上の注意

  • インデックステーブルの名前は、既存の時系列テーブルまたはデータテーブルの名前とは異なる名前にする必要があります。

  • セカンダリインデックスを作成すると、Tablestore は、インデックスカラムとして指定されていないデータテーブルのプライマリキーカラムを、セカンダリインデックスのプライマリキーカラムとしてセカンダリインデックスに自動的に追加します。

  • ローカルセカンダリインデックスを作成する場合、インデックステーブルの最初のプライマリキーカラムは、データテーブルの最初のプライマリキーカラムと同じである必要があります。

API 操作

/**
 * セカンダリインデックスを作成します。
 * @api
 *
 * @param [] $request
 *            リクエストパラメータ。データテーブルの名前です。
 * @return [] レスポンス。
 * @throws OTSClientException パラメータエラーが発生した場合、または Tablestore サーバーが検証エラーを返した場合に返される例外。
 * @throws OTSServerException Tablestore サーバーがエラーを返した場合に返される例外。
 * @example "src/examples/CreateIndex.php"
 */
public function createIndex(array $request)

パラメータ

パラメータ

説明

table_name

データテーブルの名前。

index_meta

インデックステーブルに関するスキーマ情報。スキーマ情報には、次の項目が含まれます。

  • name: インデックステーブルの名前。

  • primary_key: インデックステーブルのプライマリキー。プライマリキーは、すべてのプライマリキーカラムと、データテーブルの事前定義カラムのランダムな数の組み合わせです。

  • defined_column: インデックステーブルの属性カラム。属性カラムは、データテーブルの事前定義カラムの組み合わせです。

  • index_update_mode: インデックステーブルの更新モード。有効な値: IndexUpdateModeConst::ASYNC_INDEX および IndexUpdateModeConst::SYNC_INDEX

    • index_update_mode パラメータを指定しない場合、または index_update_mode パラメータを IndexUpdateModeConst::ASYNC_INDEX に設定した場合、非同期モードを使用してインデックスが更新されます。

      グローバルセカンダリインデックス機能を使用する場合は、index_update_mode パラメータを IndexUpdateModeConst::ASYNC_INDEX に設定する必要があります。

    • index_update_mode パラメータを IndexUpdateModeConst::SYNC_INDEX に設定した場合、同期モードを使用してインデックスが更新されます。

      ローカルセカンダリインデックス機能を使用する場合は、index_update_mode パラメータを IndexUpdateModeConst::SYNC_INDEX に設定する必要があります。

  • index_type: インデックステーブルのタイプ。有効な値: IndexTypeConst::GLOBAL_INDEX および IndexTypeConst::LOCAL_INDEX

    • index_type パラメータを指定しない場合、または index_type パラメータを IndexTypeConst::GLOBAL_INDEX に設定した場合、グローバルセカンダリインデックスが作成されます。

      Tablestore は、データテーブルのインデックス付きカラムとプライマリキーカラムから、作成するインデックステーブルのカラムにデータを非同期モードで自動的に同期します。同期レイテンシは数ミリ秒以内です。

    • index_type パラメータを IndexTypeConst::LOCAL_INDEX に設定した場合、ローカルセカンダリインデックスが作成されます。

      Tablestore は、データテーブルのインデックス付きカラムとプライマリキーカラムから、作成するインデックステーブルのカラムにデータを同期モードで自動的に同期します。データがデータテーブルに書き込まれた後、インデックステーブルのデータをすぐにクエリできます。

include_base_data

データテーブルの既存のデータをインデックステーブルに含めるかどうかを指定します。デフォルト値: false。

  • include_base_data パラメータを true に設定すると、データテーブルの既存のデータがインデックステーブルに含まれます。

  • include_base_data パラメータを指定しない場合、または include_base_data パラメータを false に設定した場合、データテーブルの既存のデータはインデックステーブルに含まれません。

グローバルセカンダリインデックスを作成する

セカンダリインデックスを作成するときに index_type パラメータと index_update_mode パラメータを指定しない場合、グローバルセカンダリインデックスが作成されます。

$request = array(
    'table_name' => '<TABLE_NAME>', // データテーブルの名前を指定します。
    //'include_base_data' => true,  // include_base_data パラメータを true に設定して、データテーブルの既存のデータをインデックステーブルに含めます。
    'index_meta' => array(
        'name' => '<INDEX_NAME>',  // インデックステーブルの名前を指定します。
        'primary_key' => array('Col1'), // インデックステーブルのプライマリキーカラムを指定します。
        'defined_column' => array('Col2')  // インデックステーブルの属性カラムを指定します。
    )
);
$otsClient->createIndex($request);

index_type パラメータと index_update_mode パラメータを指定してグローバルセカンダリインデックスを作成することもできます。

$request = array(
    'table_name' => '<TABLE_NAME>', // データテーブルの名前を指定します。
    //'include_base_data' => true,  // include_base_data パラメータを true に設定して、データテーブルの既存のデータをインデックステーブルに含めます。
    'index_meta' => array(
        'name' => '<INDEX_NAME>',  // インデックステーブルの名前を指定します。
        'primary_key' => array('Col1'), // インデックステーブルのプライマリキーカラムを指定します。
        'defined_column' => array('Col2')  // インデックステーブルの属性カラムを指定します。
        'index_type' => IndexTypeConst::GLOBAL_INDEX,
        'index_update_mode' => IndexUpdateModeConst::ASYNC_INDEX
    )
);
$otsClient->createIndex($request);

ローカルセカンダリインデックスを作成する

次のサンプルコードは、ローカルセカンダリインデックスを作成する方法の例を示しています。

$createLocalRequest = array (
   'table_name' => '<TABLE_NAME>', // データテーブルの名前を指定します。
    //'include_base_data' => true,  // include_base_data パラメータを true に設定して、データテーブルの既存のデータをインデックステーブルに含めます。
   'index_meta' => array (
       'name' => '<INDEX_NAME>',  // インデックステーブルの名前を指定します。
       'primary_key' => array('PK0', 'Col1'), // インデックステーブルのプライマリキーカラムを指定します。インデックステーブルの最初のプライマリキーカラムは、データテーブルの最初のプライマリキーカラムと同じである必要があります。
       'defined_column' => array('Col2')  // インデックステーブルの属性カラムを指定します。
       'index_type' => IndexTypeConst::LOCAL_INDEX,
       'index_update_mode' => IndexUpdateModeConst::SYNC_INDEX
   )
);
$otsClient->createIndex($createLocalRequest);

関連情報