セカンダリインデックス機能を使用すると、データテーブルのプライマリキーと、データテーブルに作成されたセカンダリインデックスのインデックスカラムに基づいてデータをクエリできます。データテーブルの属性カラムを使用してデータをクエリする場合、データテーブルのセカンダリインデックスを作成してデータクエリを高速化できます。データテーブルのセカンダリインデックスを作成する場合は、セカンダリインデックスのインデックスカラムまたは属性カラムを、データテーブルの作成時に指定した事前定義カラムに設定できます。セカンダリインデックスを作成したら、セカンダリインデックスを使用してデータをクエリできます。
セカンダリインデックスは、グローバルセカンダリインデックスとローカルセカンダリインデックスに分類されます。セカンダリインデックス機能の詳細については、概要 を参照してください。
CreateTableオペレーションを呼び出すことで、データテーブルを作成するときに1つ以上のインデックステーブルを作成できます。詳細については、データテーブルの作成 を参照してください。
前提条件
OTSClientインスタンスが初期化されます。詳細については、OTSClientインスタンスを初期化するを参照してください。
maxVersionsパラメータが1に設定されているデータテーブルが作成されていること。データテーブルのtimeToLiveパラメータは、次のいずれかの条件を満たしている必要があります。
データテーブルのtimeToLiveパラメータが-1に設定されていること。これは、データテーブルのデータが期限切れにならないことを指定します。
データテーブルのtimeToLiveパラメータが-1以外の値に設定されており、データテーブルの更新操作が禁止されていること。
データテーブルに事前定義カラムが指定されていること。
使用方法
Tablestore SDK for .NETを使用して作成できるのは、グローバルセカンダリインデックスのみです。ローカルセカンダリインデックス機能を使用する場合は、他のプログラミング言語用のTablestore SDK、Tablestoreコンソール、またはTablestore CLIを使用してローカルセカンダリインデックスを作成できます。
インデックステーブルの名前は、既存の時系列テーブルまたはデータテーブルの名前とは異なる必要があります。
セカンダリインデックスを作成すると、Tablestoreは、インデックスカラムとして指定されていないデータテーブルのプライマリキーカラムを、セカンダリインデックスのプライマリキーカラムとしてセカンダリインデックスに自動的に追加します。
パラメータ
パラメータ | 説明 |
mainTableName | データテーブルの名前。 |
indexMeta | インデックステーブルのスキーマ情報。スキーマ情報には、次のパラメータが含まれます。
|
例
次のサンプルコードは、グローバルセカンダリインデックスが作成されるデータテーブルの既存のデータを含まないグローバルセカンダリインデックスを作成する方法の例を示しています。この例では、データテーブルのプライマリキーカラムはpk1とpk2です。グローバルセカンダリインデックスに指定されているプライマリキーカラムと属性カラムは、それぞれcol1とcol2です。インデックステーブルのプライマリキーカラムは、col1、pk1、およびpk2で構成されます。インデックステーブルの属性カラムはcol2です。
public static void CreateGlobalIndex(OTSClient otsClient, String TableName, String IndexName)
{
Console.WriteLine("Start create globalIndex...");
// グローバルインデックスの作成開始...
IndexMeta indexMeta = new IndexMeta(IndexName);
// Specify a primary key column for the index table.
// インデックステーブルのプライマリキーカラムを指定します。
indexMeta.PrimaryKey = new List<string>() { "col1" };
// Specify an attribute column for the index table.
// インデックステーブルの属性カラムを指定します。
indexMeta.DefinedColumns = new List<string>() { "col2" };
//indexMeta.IndexType = IndexType.IT_GLOBAL_INDEX;
//indexMeta.IndexUpdateModel = IndexUpdateMode.IUM_ASYNC_INDEX;
CapacityUnit reservedThroughput = new CapacityUnit(0, 0);
CreateGlobalIndexRequest request = new CreateGlobalIndexRequest(TableName, indexMeta);
otsClient.CreateGlobalIndex(request);
Console.WriteLine("Global Index is created,tableName: " + TableName + ",IndexName:" + IndexName);
// グローバルインデックスが作成されました、テーブル名: " + TableName + "、インデックス名:" + IndexName
}
関連情報
セカンダリインデックスを作成したら、セカンダリインデックスを使用して、1行のデータ、またはプライマリキー値が特定の範囲内にあるデータを読み取ることができます。詳細については、セカンダリインデックスを使用したデータの読み取り を参照してください。
不要になったセカンダリインデックスを削除できます。詳細については、セカンダリインデックスの削除 を参照してください。