セカンダリインデックス機能を使用すると、データテーブルのプライマリキーと、データテーブルに作成されたセカンダリインデックスのインデックスカラムに基づいてデータをクエリできます。データテーブルの属性カラムを使用してデータをクエリする必要がある場合は、データテーブルのセカンダリインデックスを作成してデータクエリを高速化できます。データテーブルのセカンダリインデックスを作成する際に、セカンダリインデックスのインデックスカラムまたは属性カラムを、データテーブルの作成時に指定した事前定義カラムに設定できます。セカンダリインデックスを作成したら、そのセカンダリインデックスを使用してデータをクエリできます。
セカンダリインデックスは、グローバルセカンダリインデックスとローカルセカンダリインデックスに分類されます。セカンダリインデックス機能の詳細については、概要を参照してください。
CreateTableオペレーションを呼び出すことで、データテーブルを作成するときに1つ以上のインデックステーブルを作成できます。詳細については、データテーブルの作成を参照してください。
前提条件
OTSClientインスタンスが初期化されていること。詳細については、OTSClientインスタンスの初期化を参照してください。
maxVersionsパラメータが1に設定されたデータテーブルが作成されていること。データテーブルのtimeToLiveパラメータは、以下のいずれかの条件を満たしている必要があります。
データテーブルのtimeToLiveパラメータが-1に設定されていること。これは、データテーブル内のデータが期限切れにならないことを意味します。
データテーブルのtimeToLiveパラメータが-1以外の値に設定されており、データテーブルの更新操作が禁止されていること。
データテーブルに事前定義カラムが指定されていること。
使用上の注意
インデックステーブルの名前は、既存の時系列テーブルまたはデータテーブルの名前と異なる必要があります。
セカンダリインデックスを作成すると、Tablestoreは、インデックスカラムとして指定されていないデータテーブルのプライマリキーカラムを、セカンダリインデックスのプライマリキーカラムとしてセカンダリインデックスに自動的に追加します。
ローカルセカンダリインデックスを作成する場合、インデックステーブルの最初のプライマリキーカラムは、データテーブルの最初のプライマリキーカラムと同じである必要があります。
パラメータ
パラメータ | 説明 |
mainTableName | データテーブルの名前。 |
indexMeta | インデックステーブルのスキーマ情報。スキーマ情報には、以下の項目が含まれます。
|
例
グローバルセカンダリインデックスの作成
次のサンプルコードは、グローバルセカンダリインデックスが作成されるデータテーブルの既存のデータを含まないグローバルセカンダリインデックスを作成する方法の例を示しています。この例では、データテーブルのプライマリキーカラムは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));
});
関連情報
セカンダリインデックスを作成したら、セカンダリインデックスを使用して、1行のデータ、またはプライマリキー値が特定の範囲内にあるデータを読み取ることができます。詳細については、セカンダリインデックスを使用したデータの読み取りを参照してください。
不要になったセカンダリインデックスを削除できます。詳細については、セカンダリインデックスの削除を参照してください。