AWS DynamoDB セカンダリインデックス

  • DynamoDB では、主キー値を指定することにより、テーブル内のアイテムにすばやくアクセスできます。
  • テーブルのセカンダリインデックスは、主キー以外の属性を持つデータへの効率的なアクセスを可能にします。
  • セカンダリインデックス
    • テーブルの属性のサブセットを含むデータ構造です。
    • 1つのテーブルに関連付けられており、そこからデータを取得します。
    • インデックスパーティションキーと並べ替えキーの代替キーが必要。
    • さらに、主キー属性とともに基本表から索引にコピーされる投影属性を定義できます。
    • DynamoDB によって自動的に維持される
    • ベーステーブル内の項目の追加、変更、または削除は、そのテーブルのインデックスも更新され、これらの変更を反映します。
  • DynamoDB は2種類のセカンダリインデックスをサポートします。
    • グローバルセカンダリインデックス – パーティション・キーとソート・キーを持つ索引は、ベーステーブルの索引とは異なる。
    • ローカルセカンダリインデックス – ベーステーブルと同じパーティション・キーを持ち、別のソート・キーを持つ索引。

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

  • DynamoDB では、テーブル内のデータに効率的にアクセスするための主キー属性のインデックスを作成および保持し、アプリケーションが主キー値を指定してデータをすばやく取得できるようにします。
  • グローバルセカンダリインデックス (GSI) は、インデックスの基になっているテーブル内のキーとは異なるパーティションまたは複合のパーティションおよび並べ替えキーを含むインデックスです。
  • グローバルセカンダリインデックスは、インデックス上のクエリはすべてのパーティションにわたってテーブル内のすべてのアイテムにまたがる可能性があるため、”グローバル” と見なされます。
  • 複数のセカンダリインデックスをテーブルに作成し、これらのインデックスに対してクエリを発行できます。
  • アプリケーションは、主キー以外の属性を持つデータへの効率的なアクセスを可能にするために、1つまたは複数のセカンダリキーを使用できるメリットがあります。
  • GSIs は、テーブル内のキー以外の属性に対してクエリを有効にすることにより、クエリの柔軟性を向上させる非一意性属性をサポートします。
  • GSIs は、最終的に一貫性をサポートします。DynamoDB は、対応する変更がテーブルに非同期的に行われた場合に、GSI でアイテムの追加、更新、および削除を自動的に処理します。
  • セカンダリインデックス内のデータは、GSI 代替キー、主キー、およびテーブルからインデックスにコピーされる属性から成ります。
  • テーブル内のアイテムの一部であるが、GSI キーの一部ではない属性、テーブルの主キー、または射影された属性は、GSI インデックスを照会するときに返されません。
  • GSIs は、基になるテーブルとは無関係にスループットを管理し、テーブルと各関連 GSI のプロビジョニングされたスループットを作成時に指定する必要があります。

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

  • ローカルセカンダリインデックスは、テーブルと同じパーティションキーを持つが、別の並べ替えキーを持つインデックスです。
  • ローカルセカンダリインデックスが “ローカル” の場合、ローカルセカンダリインデックスのすべてのパーティションが、同じパーティションキーを持つテーブルパーティションにスコープされます。
  • LSI は、ソートキーの代わりにセカンダリインデックスを使用して検索することができますので、効率的に行うことができるクエリに使用できる属性の数を拡大します。
  • LSI は、プライマリインデックスが更新されたときに自動的に更新され、強力かつ最終的に一貫性のあるオプションの両方をサポートします。
  • LSI は、クエリ API を介してのみ照会することができます。
  • 現時点では、既存のテーブルに LSI を追加することはできません。
  • 現時点で作成された LSI は変更できません。
  • 現時点で作成されたテーブルから LSI を削除することはできません。
  • LSI は、それが関連付けられているテーブルの一部としてプロビジョニングされたスループット容量を消費します。
特徴 グローバルセカンダリインデックス ローカルセカンダリインデックス
キースキーマ グローバルセカンダリインデックスのプライマリキーは
シンプル (パーティションキー) または複合 (パーティションキーとソートキー)
のいずれかとすることができます。
local secondary indexのプライマリキーは
複合 (パーティションキーとソートキー) である必要があります。
キーの属性 インデックスパーティションキーとソートキー (存在する場合) は、
文字列、数値、またはバイナリ型の任意のベーステーブル属性と
することができます。
インデックスのパーティションキーは、
ベーステーブルのパーティションキーと同じ属性です。
ソートキーは、文字列、数値、またはバイナリ型の
任意のベーステーブル属性とすることができます。
パーティションキー値ごとのサイズ制限 グローバルセカンダリインデックスに
サイズ制限はありません。
パーティションキーの値ごとに、
すべてのインデックス付き項目の合計サイズが、
10 GB 以下である必要があります。
オンラインインデックスオペレーション Global secondary indexは、
テーブルの作成と同時に作成できます。
また、既存のテーブルに新しいグローバルセカンダリインデックスを
追加したり、既存のグローバルセカンダリインデックスを
削除したりできます。詳細については、
「グローバルセカンダリインデックスの管理」を参照してください。
ローカルセカンダリインデックスは、テーブルの作成と
同時に作成されます。既存のテーブルにlocal secondary indexを
追加したり、現在存在するlocal secondary indexを
削除したりすることはできません。
クエリとパーティション グローバルセカンダリインデックスでは、すべてのパーティションで
テーブル全体に対してクエリを実行できます。
local secondary indexでは、クエリのパーティションキー値で
指定された 1 つのパーティションに対してクエリを実行できます。
読み込み整合性 グローバルセカンダリインデックスのクエリでは、
結果整合性のみがサポートされます。
local secondary index のクエリを実行するとき、
結果整合性または強い整合性のどちらかを選択できます。
プロビジョニングされたスループットの消費 各 グローバルセカンダリインデックス には、
読み込みおよび書き込みアクティビティに対する独自の
プロビジョニングされたスループット設定があります。
グローバルセカンダリインデックスのクエリまたはスキャンでは、
ベーステーブルからではなく、インデックスからキャパシティーユニットを
消費します。同じことが、テーブルへの書き込みによる
グローバルセカンダリインデックス の更新にも当てはまります。
local secondary indexのクエリまたはスキャンでは、
ベーステーブルから読み込みキャパシティーユニットを消費します。
テーブルに書き込むと、そのlocal secondary indexも更新されます。
この更新では、ベーステーブルから書き込みキャパシティーユニットを消費します。

AWS認定試験の練習問題

  • 質問はインターネットから収集され、答えは自分の知識と理解に基づいてマークされます(これはあなたと異なる場合があります)。
  • AWSサービスは毎日更新され、回答と質問はすぐに時代遅れになる可能性がありますので、それに応じて調査してください。
  • AWSのアップデートのペースを追うためにAWS試験の質問は更新されないため、基礎となる機能が変更されても質問が更新されないことがあります。
  • さらなるフィードバック、ディスカッション、修正を可能にします。
  1. DynamoDB では、セカンダリインデックスは、____ 操作をサポートする代替キーと共に、テーブルの属性のサブセットを含むデータ構造です。
    1. どれでもない
    2. 両方とも
    3. クエリ
    4. スキャン
  2. DynamoDB に関しては、グローバルセカンダリインデックスとは何ですか。
    1. テーブル上のハッシュとレンジキーが異なるインデックス
    2. テーブルと同じレンジキーを持つが、別のハッシュキーを持つインデックス
    3. テーブルと同じハッシュキーとレンジキーを持つインデックス
    4. テーブルと同じハッシュキーを持つが、別のレンジキーを持つインデックス
  3. DynamoDB に関しては、作成後にインデックスを変更することはできますか。
    1. はい、プライマリハッシュキーインデックスの場合
    2. はい、グローバルセカンダリインデックスの場合
    3. いいえ
    4. はい、ローカルセカンダリインデックスの場合
  4. DynamoDB を考えた場合、グローバルセカンダリキーのプロパティには何が当てはまりますか。
    1. パーティションキーとソートキーは、テーブルとは異なる場合があります。
    2. パーティションキーだけがテーブルと異なる場合があります。
    3. パーティションキーまたは並べ替えキーのいずれかがテーブルと異なる場合がありますが、両方ではありません。
    4. ソートキーのみがテーブルと異なる場合があります。

リファレンス

AWS_DynamoDB_開発者ガイド – セカンダリインデックス

Jayendra’s Blog

この記事は自己学習用に「AWS DynamoDB Secondary Indexes – Certification(Jayendra’s Blogより)」を日本語に訳した記事です。