AmazonDynamoDB に関する情報を集約するページ
Amazon DynamoDB とは – Amazon DynamoDB
- フルマネージド型 NoSQL
- シームレスなスケーラビリティ
- 保管時の暗号化を提供
- 任意の量のデータを保存できる
- ノーダウンタイムでスループット変更可能
- オンデマンドバックアップ機能
- ポイントインタイムリカバリ
- すべてのデータは SSD に保存され、自動的に1リージョン内の複数のAZにレプリケートされる
- マルチリージョン間の継続した同期を実現するグローバルテーブルなる機能もある
- コアコンポーネント
- テーブル: 項目のコレクション
- 項目: 属性のコレクション、各項目は1つ以上の属性で構成される
- 属性: それ以上分割する必要のないデータ要素
- 最大深さ 32 レベルの入れ子属性をサポートしている
- プライマリキーを利用して項目を一意に識別する
- パーティションキー: 1つの属性で構成されたシンプルなプライマリキーをハッシュ関数の入力として DynamoDB 内部の物理ストレージが決定する
- 複合プライマリキー: パーティションキーをハッシュ関数の入力として DynamoDB 内部の物理ストレージが決定したのち、同一のパーティションキーの項目が複数ある場合にソートキーでソートされた状態で DyanmoDB 内部の物理ストレージに保存される
- プライマリキーは単一、または複数の属性を組み合わせたものを指定できる
- セカンダリインデックスを使用してクエリの柔軟性を高められる
- グローバルセカンダリインデックス(GSI): テーブルと異なるパーティションキーとソートキーを持つインデックス(制限: テーブルあたり 20)
- ローカルセカンダリインデックス(LSI): テーブルと同じパーティションキーと、異なるソートキーを持つインデックス(制限: テーブルあたり 5)
- DynamoDB ストリームを使うとデータの変更をキャプチャできる
- RDBMS では柔軟なクエリが可能だが、クエリはコストが高く、高トラフィックに対するスケーリングがうまくいかないことがある
- 基本的に DynamoDB では限られた方法に対して効率的にクエリできるが、その範囲外では高コストで低速
- もっとも一般的で重要なクエリをできるだけ早く安価に行うためのスキーマ設計を行う
- ユースケースの特定の要件にあわせてデータ構造を定める
- RDBMS では正規化されたデータモデルを作成できるが、DynamoDB を利用する場合は、ユースケースを断定するまでスキーマの設計はできない
- テーブルをできるだけすくなく保つ
- データサイズ: リクエストのデータ量を把握する
- データシェイプ: クエリ処理時にデータを再形成するのではなく、データベースの形状がクエリ結果と一致するようにテーブルを設計する
- データ速度: パーティションを適切に設定する
- 関連するデータをまとめる
- ソート順を使用する
- クエリを分散する
- グローバルセカンダリインデックスを使用する
クエリの操作 – Amazon DynamoDB
- GetItem: テーブルに対してプライマリキーを指定して、単一項目を読み取る
- Query: 同じパーティションキーを持つ複数の項目を読み取る、返されるすべての項目は単一の読み込みオペレーションとして扱われる
- キー条件式: パーティションキーの名前と値を指定し、かつソートキーに条件式を指定できる
- クエリフィルタ式: クエリ式の結果を条件式でフィルタできる
- limit: よくある limit
- scannedCount: フィルタ式が適用される前に条件式に一致する項目
- count: フィルタ式が適用されたあとに残っている項目数
- テーブルまたはセカンダリインデックスのすべての項目を読み込む
- フィルタ式を使用できる
- limit を指定できる
- ページネーションの単位を指定できる
- scannedCount: フィルタ式が適用される前に条件式に一致する項目
- count: フィルタ式が適用されたあとに残っている項目数
- 並列スキャン
- デフォルトでは無条件で書き込みオペレーションを実行できる
- 条件付きの書き込み: 項目の属性が1つ以上の想定条件を満たす場合のみ成功する
- たとえば同じプライマリキーを持つ既存の項目がない場合など
- また現在取得している値が変化していないことを前提に処理を行う条件式を指定することにより排他処理も使える