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

Tablestore:セカンダリインデックスの作成

最終更新日:Dec 28, 2024

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

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

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

前提条件

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

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

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

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

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

使用上の注意

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

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

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

パラメータ

パラメータ

説明

mainTableName

データテーブルの名前。

indexMeta

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

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

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

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

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

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

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

  • indexType: インデックステーブルのタイプ。有効な値: IT_GLOBAL_INDEX および IT_LOCAL_INDEX。

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

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

    • indexTypeパラメータをIT_LOCAL_INDEXに設定すると、ローカルセカンダリインデックスが作成されます。

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

  • indexUpdateMode: インデックステーブルの更新モード。有効な値: IUM_ASYNC_INDEX および IUM_SYNC_INDEX。

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

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

    • indexUpdateModeパラメータをIUM_SYNC_INDEXに設定すると、同期モードを使用してインデックスが更新されます。

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

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

次のサンプルコードは、グローバルセカンダリインデックスが作成されるデータテーブルの既存のデータを含まないグローバルセカンダリインデックスを作成する方法の例を示しています。この例では、データテーブルのプライマリキーカラムはpk1とpk2です。グローバルセカンダリインデックスに指定されているプライマリキーカラムと属性カラムは、それぞれcol1とcol2です。 インデックステーブルのプライマリキーカラムは、col1、pk1、およびpk2で構成されます。インデックステーブルの属性カラムはcol2です。

var client = require('./client');
var TableStore = require('./index.js');

client.createIndex({
    mainTableName: "<TABLE_NAME>", // データテーブルの名前を指定します。
    indexMeta: {
        name: "<INDEX_NAME>", // インデックステーブルの名前を指定します。
        primaryKey: ["col1"], // インデックステーブルのプライマリキーカラムを指定します。
        definedColumn: ["col2"], // インデックステーブルの属性カラムを指定します。
        includeBaseData: false, // インデックステーブルに、インデックステーブルが作成されるデータテーブルの既存のデータを含めないことを指定します。データテーブルの既存のデータをインデックステーブルに含める場合は、includeBaseDataパラメータをtrueに設定します。
        indexUpdateMode: TableStore.IndexUpdateMode.IUM_ASYNC_INDEX,// デフォルトでは、インデックス更新モードは非同期更新(IUM_ASYNC_INDEX)です。
        indexType: TableStore.IndexType.IT_GLOBAL_INDEX,// デフォルトでは、インデックスタイプはグローバルセカンダリインデックス(IT_GLOBAL_INDEX)です。
    }
}, function (err, data) {
    if (err) {
        console.log('error:', err);
        return;
    }
    console.log('success:', JSON.stringify(data, null, 2));
});

ローカルセカンダリインデックスの作成

次のサンプルコードは、ローカルセカンダリインデックスが作成されるデータテーブルの既存のデータを含まないローカルセカンダリインデックスを作成する方法の例を示しています。この例では、データテーブルのプライマリキーカラムはpk1とpk2です。ローカルセカンダリインデックスに指定されているプライマリキーカラムはcol1とpk1です。ローカルセカンダリインデックスに指定されている属性カラムはcol2です。 インデックステーブルのプライマリキーカラムは、col1、pk1、およびpk2で構成されます。インデックステーブルの属性カラムはcol2です。

var client = require('./client');
var TableStore = require('./index.js');

client.createIndex({
    mainTableName: "<TABLE_NAME>", // データテーブルの名前を指定します。
    indexMeta: {
        name: "<INDEX_TABLE>", // インデックステーブルの名前を指定します。
        primaryKey: ["pk1","col1"], // インデックステーブルのプライマリキーカラムを指定します。インデックステーブルの最初のプライマリキーカラムは、データテーブルの最初のプライマリキーカラムと同じである必要があります。
        definedColumn: ["col2"], // インデックステーブルの属性カラムを指定します。
        includeBaseData: false, // インデックステーブルに、インデックステーブルが作成されるデータテーブルの既存のデータを含めないことを指定します。データテーブルの既存のデータをインデックステーブルに含める場合は、includeBaseDataパラメータをtrueに設定します。
        indexUpdateMode: TableStore.IndexUpdateMode.IUM_SYNC_INDEX,// indexUpdateModeパラメータをIUM_SYNC_INDEXに設定します。これは、インデックスが同期モードで更新されることを示します。indexTypeパラメータをIT_LOCAL_INDEXに設定する場合は、indexUpdateModeパラメータをIUM_SYNC_INDEXに設定する必要があります。
        indexType: TableStore.IndexType.IT_LOCAL_INDEX, // indexTypeパラメータをIT_LOCAL_INDEXに設定します。これは、ローカルセカンダリインデックスを示します。
    }
}, function (err, data) {
    if (err) {
        console.log('error:', err);
        return;
    }
    console.log('success:', JSON.stringify(data, null, 2));
});

関連情報