セカンダリインデックスは、グローバルセカンダリインデックスとローカルセカンダリインデックスに分類できます。セカンダリインデックス機能を使用すると、ストレージ料金が発生します。システムがデータテーブルにデータを挿入すると、システムはデータテーブル用に作成されたインデックステーブルにもデータを書き込む必要がある場合があります。このプロセス中に、読み取り/書き込みキャパシティユニット(CU)が消費されます。このトピックでは、セカンダリインデックスの課金対象項目と課金ルールについて説明します。
課金ルール
インデックスのデータサイズと読み取り/書き込みCUを計算および測定するには、次のルールが使用されます。
インデックスのデータサイズと読み取りCUを計算するために使用されるルールは、データテーブルのデータサイズと読み取りCUを計算するために使用されるルールと同じです。詳細については、課金概要を参照してください。
インデックステーブルの作成に消費される読み取り/書き込みCUを測定するには、次のルールが使用されます。
書き込みCUは、インデックス行が挿入または更新された場合にのみ消費されます。
読み取りCUは、インデックス行が削除、更新、または挿入されたときに消費されます。読み取りCUの数は、データテーブルの特定のインデックス付き列から読み取られるデータ量に基づいて決定されます。
課金対象項目
インデックステーブルは、セカンダリインデックス機能を使用すると作成されます。そのため、セカンダリインデックス機能を使用すると、ストレージ料金が発生します。システムがデータテーブルにデータを挿入すると、システムはデータテーブル用に作成されたインデックステーブルにもデータを書き込む必要がある場合があります。このプロセス中に、読み取り/書き込みCUが消費されます。
インデックステーブルの課金対象項目には、インデックステーブルのデータサイズ、インデックステーブルの作成に消費される読み取りCU、インデックステーブルの作成に消費される書き込みCU、およびインデックステーブルの読み取りに消費される読み取りCUが含まれます。
課金対象項目 | 説明 |
インデックステーブルのデータサイズ。単位:GB。 | |
インデックス行の削除、挿入、または更新の読み取り操作によって消費される読み取りCUの数。単位:CU。 | |
インデックス行の挿入または更新に消費される書き込みCUの数。単位:CU。 | |
インデックステーブルを読み取るために呼び出される読み取りAPI操作によって消費される読み取りCUの数。単位:CU。 |
インデックステーブルのデータサイズ
インデックステーブルのデータサイズを測定するために使用される方法は、データテーブルのデータサイズを測定するために使用される方法と同じです。インデックステーブルのデータサイズは、すべてのインデックス行の合計データサイズに等しくなります。すべてのインデックス行の合計データサイズは、各インデックス行のプライマリキーと属性列のデータサイズの合計に等しくなります。詳細については、ストレージの使用量を参照してください。
インデックステーブルの作成に消費される読み取りCU
データテーブルにセカンダリインデックスが作成されると、読み取りCUが消費されます。次の表に、さまざまなシナリオで消費される読み取りCUの数の計算方法を示します。
シナリオ | 課金ルール | |
PUT操作を実行して行を書き込む | 新しい行を書き込む |
|
既存の行を上書きする |
| |
UPDATE操作を実行して行を更新する | 行が存在しない |
|
既存の行を更新する |
| |
DELETE操作を実行して行を削除する | 消費される読み取りCUの数は、次のルールに基づいて計算されます。 消費される読み取りCUの数は、次の式の計算結果から切り上げられます。読み取りCUの数=行のインデックス付き属性列のデータサイズ/ 4 KB。丸められた結果の値が0の場合、課金には1つの読み取りCUが使用されます。 |
データテーブルに自動インクリメントプライマリキー列が含まれていて、データがデータテーブルに挿入される場合、データテーブル用に作成されたインデックステーブルの読み取りCUは消費されません。自動インクリメントプライマリキー列を含む行を更新すると、読み取りCUが消費されます。読み取りCUは、行でUPDATE操作が実行されたときに消費される読み取りCUを計算するために使用されるルールを使用して計算されます。
自動インクリメントプライマリキー列機能を使用してデータを書き込む場合、インデックステーブルの作成に消費される読み取りCUの数は大幅に削減されます。
自動インクリメントプライマリキー列を含まないデータテーブルの場合、データが取得されない場合でも、インデックス付き列で読み取り操作が実行されると、1つの読み取りCUが消費されます。自動インクリメントプライマリキー列を含むデータテーブルの場合、データを挿入するときにインデックス付き列で読み取り操作は実行されません。そのため、読み取りCUは消費されません。
インデックステーブルの作成に消費される書き込みCU
データテーブルにセカンダリインデックスが作成されると、書き込みCUが消費されます。
データテーブルに行データを書き込む場合、インデックステーブルのデータが変更されるかどうかに基づいて、データテーブル用に作成されたインデックステーブルに消費される書き込みCUの数を計算するときに、次のルールが有効になります。
インデックステーブルのデータが変更されない場合、書き込みCUは消費されません。
行がインデックステーブルに挿入される場合、消費される書き込みCUの数は、挿入されるインデックス行のサイズに基づいて決定されます。
インデックステーブルの行が更新される場合、消費される書き込みCUの数は、更新されるインデックス行の属性列のデータサイズに基づいて決定されます。
行がインデックステーブルから削除される場合、消費される書き込みCUの数は、削除されるインデックス行のデータサイズに基づいて決定されます。
インデックス行がインデックステーブルから削除され、別のインデックス行がインデックステーブルに挿入される場合、消費される書き込みCUの数は、2つの行のデータの合計サイズに基づいて決定されます。
次の表に、さまざまなシナリオで消費される書き込みCUの数の計算方法を示します。
シナリオ | 課金ルール | |
PUT操作を実行して行を書き込む | 新しい行を書き込む |
|
既存の行を上書きする |
| |
UPDATE操作を実行して行を更新する | 行が存在しない |
|
既存の行を更新する |
| |
DELETE操作を実行して行を削除する | 書き込みCUは、次のルールに基づいて消費されます。 インデックステーブルに、削除する行に基づいて作成された既存のインデックス行が含まれている場合、書き込みCUが消費されます。それ以外の場合、書き込みCUは消費されません。消費される書き込みCUの数は、次の式の計算結果から切り上げられます。書き込みCUの数=行のインデックス付き列とプライマリキー列のデータサイズ/ 4 KB。 |
自動インクリメントプライマリキー列を含むデータテーブルにデータを挿入すると、データテーブル用に作成されたインデックステーブルの書き込みCUが消費されます。書き込みCUは、行でPUT操作が実行されたときに消費される書き込みCUを計算するために使用されるルールを使用して計算されます。自動インクリメントプライマリキー列を含む行を更新すると、書き込みCUが消費されます。書き込みCUは、行でUPDATE操作が実行されたときに消費される書き込みCUを計算するために使用されるルールを使用して計算されます。
インデックステーブルの読み取りに消費される読み取りCU
Tablestoreコンソール、Tablestore SDK、またはDataVなどの他の方法を使用してインデックステーブルを読み取るとき、消費される読み取りCUの測定ルールは、データテーブルを読み取るときに消費される読み取りCUの測定ルールと同じです。
例
このセクションでは、2つのインデックステーブルが作成されたデータテーブルにデータを書き込むときに消費されるCUの数の計算例を示します。
Tableという名前のデータテーブルには、PK0とPK1という名前の2つのプライマリキー列と、Col0、Col1、およびCol2という名前の3つの事前定義された列が含まれています。データテーブル用にIndex0とIndex1という名前の2つのインデックステーブルが作成されます。Index0には、Col0、PK0、およびPK1という名前の3つのプライマリキー列と、Col2という名前の1つの属性列が含まれています。Index1には、Col1、Col0、PK0、およびPK1という名前の4つのプライマリキー列が含まれており、属性列はありません。この例では、UPDATE操作を実行してPK0とPK1を更新します。
行がデータテーブルに存在しない場合:
Col3を更新する場合、読み取り/書き込みCUは消費されません。
Col1を更新する場合、1つの読み取りCUが消費され、書き込みCUは消費されません。
Col0とCol1を更新する場合、1つの読み取りCUが消費されます。
Index0に書き込みCUが消費されます。書き込みCUの数は、Col0、PK0、およびPK1の合計データ量に基づいて決定されます。Index1に書き込みCUが消費されます。書き込みCUの数は、Col0、Col1、PK0、およびPK1の合計データ量に基づいて決定されます。
行がデータテーブルに既に存在する場合:
Col3を更新する場合、読み取り/書き込みCUは消費されません。
Col2を更新する場合、読み取りCUが消費されます。読み取りCUの数は、Col0のデータ量に基づいて決定されます。Col0が以前に存在しない場合、1つの読み取りCUが消費されます。
Col0が以前に存在しない場合、Index0に書き込みCUは消費されません。Col0が以前に存在する場合、消費される書き込みCUの数は、Col0、PK0、PK1、およびCol2の合計データ量に基づいて決定されます。Index1に書き込みCUは消費されません。
Col1を更新する場合、消費される読み取りCUの数は、既存のCol0とCol1のデータ量に基づいて決定されます。丸められた結果の値が0の場合、課金には1つの読み取りCUが使用されます。
Index0に書き込みCUは消費されません。インデックス行がIndex1に挿入される場合、書き込みCUが消費されます。書き込みCUの数は、既存のCol0と新しいCol1、PK0、およびPK1のデータ量に基づいて決定されます。Col0が以前に存在しない場合、インデックス行は挿入されず、書き込みCUは消費されません。Col0とCol1が以前に存在する場合、既存のインデックス行を削除するときに書き込みCUが消費されます。書き込みCUの数は、既存のCol0とCol1、および新しいPK0とPK1の合計データ量に基づいて決定されます。