Table Structure

DynamoDBは3つの概念「テーブル」「アイテム」「アトリビュート」で構成される。また、それに従属する概念として「キー」「インデックス」が存在する。「テーブル」は「アイテム」の集合であり、「アイテム」は「アトリビュート」の集合だ。

Attribute ∈ Item ∈ Table

名称の違い テーブル
DynamoDB テーブル アイテム アトリビュート
RDB テーブル レコード カラム

キー

キーには ハッシュキーレンジキー が存在し、ユーザーはこれらを上手くテーブルを設計して効率的にデータを取り出せるようにする。キーについて詳しくは 2.Key-Value Store で説明しているため、詳細は省く。

簡単に説明すると、 ハッシュキー はRDBのプライマリキーのようなもので、テーブルのアイテムを特定するために利用されるアトリビュートだ。つまりはテーブルを作成する際に必須なもので、DynamoDBのテーブルを作成する際には必ず指定することになる。

レンジキー はハッシュキーと合わせて利用するもので、 ハッシュキー + レンジキー の組み合わせでプライマリキーとなる。これはRDBで言うところの複合プライマリキーだ。(RDBでの複合主キーはよく思われていない話を聞くが、DynamoDBでは積極的に利用していくことになるだろう)

レンジキーを利用することで、関連した複数のデータを1つのハッシュキーで取得することができるようになる。また、レンジキーを使ったクエリでは狭い範囲から目的のデータを抜き出して必要分のみ読み込めるようになる。

アトリビュート

DynamoDBのテーブル設計では、RDBのように正規化を行う必要がない。なぜなら、ハッシュキー、レンジキーに該当するアトリビュートさえ事前に定義しておけば、その他のアトリビュートは文字列でも配列でも、例えネストされたオブジェクトでも構わないからだ。(1つのJSONオブジェクトの形で表現できるデータが1つのアイテムに相当する)

そのため、アイテム間でキー以外のアトリビュートが不揃いであっても問題はない。キー以外のアトリビュートは事前定義が必要ないため、書き込み時に指定した好きなデータを格納できる。(1アイテム64KBまでの制限はあるが)

利用できる型

アトリビュートで利用できる型。(未記載あり)

操作 説明
String UTF-8
Number 整数または少数
Binary データ等
Boolean 0 or 1
ドキュメントデータ型 リスト、マップなど

利用できない型

アトリビュートで利用できない型。長さ0の文字列などは削除しなければならないため、キーにこれらを設定することはできない。

操作 説明
長さ0の文字列 代わりに属性ごと削除する
真偽(true, false) 設定できない

アトリビュートが不揃いでも問題が無い例

ハッシュテーブルの場合

Number (Hash key) String Boolean
Item 1 1 Hello.
Item 2 2 0

ハッシュレンジテーブルの場合

String (Hash key) Number (Range key) String Boolean
Item 1 HELLO 1 HOGE
Item 2 HELLO 2 0
Item 3 WORLD 1

results matching ""

    No results matching ""