AWS

【DynamoDB】グローバルセカンダリインデックス

グローバルセカンダリインデックスについて説明になります。

セカンダリインデックスの基本を読んでいない方は以下を参照してから本記事を読む事をお勧めします。

プライマリキー

インデックステーブルにプライマリキーを指定できます。
以下の点に注意して下さい。

・グローバルセカンダリインデックスのプライマリキーにはベーステーブルのパーテションキーを使用できません。
(別の言い方をすると、パーテションキーはベーステーブルのパーティションキー以外の属性(ソートキーを含む)を指定できます。)

・ソートキーはベーステーブルのパーティションキー以外の属性(ソートキーを含む)を指定できます。
・ソートキーの指定は必須ではありません。

フェッチ

グローバルセカンダリインデックスではフェッチは行えません。

射影

ベーステーブルから属性を射影する場合、以下のオプションの指定が可能です。

・KEYS_ONLY
ベーステーブルのプライマリキーのみ射影します。

・INCLUDE
ベーステーブルのプライマリキー以外にその他の射影する属性を指定します。

・ALL
ベーステーブルの全ての属性を射影します。

インデックスの作成個数

グローバルセカンダリインデックスはデフォルトで20個設定が可能です。

存在しないプライマリキー

インデックステーブルのプライマリキーの値がベーステーブルに存在しないケースがあります。ベーステーブルのプライマリキーのみ項目の場合です。
この場合、インデックステーブルには項目が存在しません。
DynamoDBのテーブルはプライマリキー以外はスキーマレスです。したがってベーステーブルはプライマリキーさえ存在すればテーブルへ項目が保存されます。
インデックステーブルはベーステーブルのプライマリキー以外を使用してテーブルを作成します。
そのため、ベーステーブルにインデックステーブルのプライマリキー属性の値が存在しない場合、インデックステーブルにはその項目が存在しないことになります。

キャパシティーモード

グローバルセカンダリインデックはベーステーブルからキャパシティーモードを継承します。

グローバルインデックステーブルのスループット

ベーステーブルのキャパシティーモードがプロビジョニングの場合、グローバルセカンダリインデックスのキャパシティーモードもプロビジョニングになります。
グローバルセカンダリインデックスのスループットの設定について以下を考慮して下さい。

・ベーステーブルのスループットとは別となります。インデックステーブル独自にスループットを設定する必要があります。
・インデックステーブルの項目の読み込みに対してはインデックステーブルのキャパシティユニットが消費されます。
・ベーステーブルの項目が追加、変更、削除され、それに応じてインデックステーブルの項目も追加、変更、削除される場合、インデックステーブルのキャパシティユニットも消費されます。
・インデックステーブルの情報はベーステーブルと同様にDescribeTableオペレーションを使用して取得できます。

読み込みキャパシティユニット

キャパシティユニットの計算方法はベーステーブルと同じですが、項目のサイズの計算に違いがあります。インデックステーブルの場合、項目の合計サイズになります。
ベーステーブルの場合、各項目のサイズでした。
例えば、インデックステーブルにクエリーを実行した場合、8項目が取得できたとすると、この8項目の合計サイズがキャパシティーユニットの計算に使用されます。

書き込みキャパシティユニット

インデックステーブルはベーステーブルからの項目の追加、変更、削除に応じて項目の追加、変更、削除が行われます。従って、ベーステーブルに応じてインデックステーブルの書き込みキャパシティーユニットも消費されます。
計算方法はベーステーブルと同じです。

インデックステーブルは以下のケースにおいて、書き込みオペレーションが行われます。

・ベーステーブルに項目を追加した際に、インデックステーブルのプライマリキー属性の値も追加されると、1回の書き込みオペレーションが必要です。
・ベーステーブルの既存の項目を更新し、未定義のインデックステーブルのプライマリキー属性の値が定義されると、1回の書き込みオペレーションが必要です。
・ベーステーブルの既存の項目を更新し、インデックステーブルのプライマリキー属性の値が変更(ex AからB など)されると、インデックステーブルから既存の項目を削除、追加となる為、2回の書き込みオペレーションがが必要です。
・ベーステーブルの既存の項目を削除し、インデックステーブルの項目が削除されると、1回の書き込みオペレーションが必要です。
・ベーステーブルの既存の項目を更新し、インデックステーブルのプライマリキー以外の属性(ベーステーブルから射影された属性)が更新された場合、インデックステーブルのプライマリキーに影響がなくても、1回の書き込みオペレーションが必要です。

ストレージコスト

グローバルセカンダリインデックスのステーレージコストは以下の通りです。

・ベーステーブルのプライマリキーの項目のサイズ。これはインデックステーブルへプライマリキーの項目が自動的に射影される為です。
・インデックステーブルのプライマリキーの項目のサイズ。
・射影された属性のサイズ。
・インデックステーブルの項目あたり100バイト。これは決まって固定です。

最後に

次回はローカルセカンダリインデックスについて説明します。

© DeNnie.Lab All Rights Reserved.