6
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

DynamoDBのキーとインデックスについて

Last updated at Posted at 2021-11-07

DynamoDBのキーとインデックスがずっと覚えられないので個人メモです。
「自分が何となくイメージできること」を目的としているため、正確性に欠ける表現がある可能性があります。

1.DynamoDBで登場するキー

  • プライマリキー
    • パーティションキー(旧ハッシュキー)
    • ソートキー(旧レンジキー)
  • セカンダリインデックス
    • ローカルセカンダリインデックス(LSI)
    • グローバルセカンダリインデックス(GSI)

2.予備知識

DynamoDBでは大量データを高速処理するため、パーティショニングによる分散処理を行っている。
image.png

3.プライマリキー

データを一意にするため、DynamoDBでテーブル作成時に プライマリキー を決定しておく必要がある。

プライマリキー のパターン

  • パーティションキーのみでプライマリキーとするパターン
  • パーティションキーとソートキーのセットでプライマリキーとするパターン

以下テーブルを例に考える。
image.png

3-1.パーティションキーのみでプライマリキーとするパターン

「テーブル名:名簿」で「ID」は行ごとに一意となるためこれだけでパーティションキーになる。
パーティションを指定した検索ができる。
image.png
DynamoDBのデータは複数のパーティションに分散して保存される。
DynamoDBはパーティションキーの値をハッシュして保存先のパーティションを決定する。このためパーティションキーは昔はハッシュキーと呼ばれていた。

3-2.パーティションキーとソートキーのセットでプライマリキーとするパターン

「テーブル名:兼業含む名簿」の場合、「ID」をパーティションキー、「Job」をソートキーとすることで行を一意にできる。
ソートキーによって各パーティション内で インデックス が生成され、範囲(レンジ)指定した検索ができる。このため昔はソートキーをレンジキーと呼んでいた。
image.png
パーティションキーによってパーティションが分けられるのは「3-1.パーティションキーのみでプライマリキーとするパターン」と同じ。

テーブル名、パーティションキー、ソートキーはテーブル作成時にしか指定できない。テーブル作成後の変更はできない。

4.セカンダリインデックス

プライマリキーが一つ目のインデックス、つまりプライマリインデックスなのに対し、セカンダリインデックスは二つ目以降のインデックスとして使用する。
image.png
パーティションキーとソートキーを設定しているテーブルでは、パーティションで絞り込んでソートキーで範囲指定することでクエリ検索ができる。ほかの属性はクエリ検索のキーに使用することができない。
誕生年月日や身長、体重で検索したい場合などに、セカンダリインデックスを設定することができる。

4-1.ローカルセカンダリインデックス(LSI)

image.png
ソートキーとは違う別のインデックスを作成する。
上の図では身長(height)をローカルセカンダリインデックスに設定している。
プロビジョニング済キャパシティモードの場合、テーブルの読み込みキャパシティユニット・書き込みキャパシティユニットを使用する。

ローカルセカンダリインデックスはテーブル作成時にしか作成できない。あとから追加できない。

4-2.グローバルセカンダリインデックス(GSI)

image.png
テーブルのパーティションキーと無関係の属性でクエリ検索したい場合グローバルセカンダリインデックスを使用する。
プライマリキーのパーティションキーとソートキーのセットとは別に、グローバルセカンダリインデックスとしてパーティションキーとソートキーのセットをプライマリキーに設定して検索できる。
上の図では身長(height)をパーティションキー、体重(weight)をソートキーとしたグローバルセカンダリインデックスを作成している。
テーブルとは違う構成でパーティションを分けるため、テーブルのリードレプリカを作成し、パーティションを新たに構成する。
プロビジョニング済キャパシティモードの場合、テーブルとは別に読み込みキャパシティユニット・書き込みキャパシティユニットを使用するため課金が増大する。

グローバルセカンダリインデックスはテーブル作成後、後から作成できる。

参考

6
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?