DynamoDBでテーブルを作る
テーブル(暗黙的なインデックス)
PrimaryKey
DynamoDBのプライマリキーはパーティションキーのみのものとソートキーを組み合わせた複合キーがある。
PartitionKey (HashKey)
Amazon DynamoDB はデータをパーティションに保存します。パーティションは、ソリッドステートドライブ (SSD) によってバックアップされ、AWS リージョン内の複数のアベイラビリティーゾーン間で自動的にレプリケートされる、テーブル用のストレージの割り当てです。
一般的に言えば、テーブルとそのセカンダリインデックスの論理的なすべてのパーティションキー全体でアクティビティが均一になるようにアプリケーションを設計する必要があります。
パーティションキーのみのプライマリキーの場合、プライマリキーで一意にレコードを特定する。
SortKey (RangeKey)
Amazon DynamoDB テーブルで、テーブルの各項目を一意に識別する主キーは、パーティションキーだけでなくソートキーから構成されている場合があります。
設計が優れたソートキーには、2 つの主な利点があります。
関連情報を 1 つの場所にまとめて、効率的にクエリを実行することができます。ソートキーを慎重に設計することで、begins_with、between、>、< などの演算子による範囲のクエリを使用して、一般的に必要な関連項目のグループを検索することができます。
複合ソートキーを作成すれば、データの階層的 (1 対多) な関係を定義して、任意の階層レベルでクエリを実行することができます。
パーティションキー+ソートキーのプライマリキーの場合、この組合せで一意にレコードを特定する。
また、ソートキーにより範囲検索が可能になる。
インデックス
LocalSecondaryIndexes (LSI)
local secondary index は特定のパーティションキー値の代替ソートキーを維持します。また local secondary index には、ベーステーブルの一部またはすべての属性のコピーが含まれます。テーブルを作成する際に、local secondary index に射影する属性を指定します。local secondary indexのデータは、ベーステーブルと同じパーティションキーと、異なるソートキーで構成されます。これにより、この異なるディメンションにわたってデータ項目に効率的にアクセスできます。クエリまたはスキャンの柔軟性を向上するために、テーブルごとに最大 5 つのlocal secondary indexを作成できます。
テーブルとは異なるソートキーを持つインデックス。最大5個まで作成できる。
local secondary index は、すべて次の条件を満たす必要があります。
パーティションキーはそのベーステーブルのパーティションキーと同じである。
ソートキーは完全に 1 つのスカラー属性で構成されている。
ベーステーブルのソートキーがインデックスに射影され、非キー属性として機能する。
パーティションキーは同じで、テーブルのソートキーは非キー属性として機能する。
ローカルセカンダリインデックスがあるテーブルには、パーティションキーの値ごとに 10 GB のサイズ制限があります。ローカルセカンダリインデックスがあるテーブルには、1 つのパーティションキー値の合計サイズが 10 GB を超えない限り、任意の数の項目を格納できます。
GlobalSecondaryIndexes (GSI)
非キー属性に対するクエリの速度を上げるために、グローバルセカンダリインデックス を作成できます。グローバルセカンダリインデックスには、ベーステーブルからの属性の一部が格納されますが、テーブルのプライマリキーとは異なるプライマリキーによって構成されます。インデックスキーは、テーブルからのキー属性を持つ必要がありません。また、テーブルと同じキースキーマを使用する必要もありません。
テーブルとは異なるパーティションキーを持つインデックス。
すべてのグローバルセカンダリインデックスには、パーティションキーが必要で、オプションのソートキーを指定できます。インデックスキースキーマは、テーブルスキーマとは異なるものにすることができます。
テーブルスキーマと異なるパーティションキーとソートキーを利用することができる。
DynamoDB テーブルでは、各キー値は一意である必要があります。ただし、グローバルセカンダリインデックス のキー値は一意である必要はありません。
グローバルセカンダリーインデックスのキーは一意でなくていい。
簡単なテーブルを作成する
dynamodb.yml
1 | AWSTemplateFormatVersion: "2010-09-09" |
parameters.json
ホストするドメイン名
1 | [ |
CloudFormationでテーブルを作成する
1 | $ aws cloudformation create-stack --stack-name tutorial-dynamodb --template-body "file://./dynamodb.yml" --parameters "file://./parameters.json" |
作成されたテーブル
AWS Consoleのダッシュボードでキャパシティを確認できる。
今回の例ではテーブルとインデックスで、読み込み書き込みそれぞれ5ユニット指定しているため、10になっている。
テーブルには作成されたテーブルが表示されている。
項目でテーブルの内容を確認できる。今回の例ではインデックス以外の属性が見えている。
キャパシティータブでは設定したキャパシティの内訳を見ることができる。
作成したインデックス。
Table
AttributeDefinitions
AttributeType
属性のデータ型。
S - 属性は文字列型
N - 属性は数値型
B - 属性はバイナリ型
KeySchema
KeyType
キー属性が担うロール:
HASH - パーティションキー
RANGE - ソートキー