Amazon DynamoDBとNoSQLを理解する
DynamoDBはキーとドキュメントの形でデータを扱うマネージドNoSQLデータベースです。サーバー管理の軽減だけでなく、主キー、アクセスパターン、読取り整合性を設計することが重要です。
この単元で学ぶこと
- テーブル・項目・属性とキーを説明する
- アクセスと容量方式を区別する
- 整合性とTTL・トランザクションの限界を判断する
本文解説
1. 項目と属性 DynamoDBのテーブルは項目の集まりで、項目は属性からなります。例えば利用者IDをキーとしたプロフィールに表示名や設定を保存します。主キー以外の属性は項目ごとに異なっていてよいものの、キーの定義や型、アプリのデータ検証まで不要になるわけではありません。
2. 主キーの二種類 主キーはパーティションキーだけ、またはパーティションキーとソートキーの組合せで定義します。前者ならパーティションキーの値が一意、後者なら二つの組合せが一意です。顧客IDと注文IDを組にすれば、一人の顧客の複数注文を違うソートキーで表せます。
3. 読み方から設計する Queryはパーティションキーの値等を使って対象を絞る読み方で、Scanはテーブルやインデックスの項目を広く読みます。毎回全件を読んでから顧客一人だけを選ぶより、必要なアクセスに合うキーを設計します。別の検索軸にはセカンダリインデックス等を比較し、後から全SQL結合を自動で処理するDBとはみなしません。
4. 容量方式と偏り On-demandは読書きの需要へ対応する方式、Provisionedは読取り・書込み容量を設定する方式です。後者ではAuto Scalingを組み合わせることもできます。どの方式でもクォータや急増への条件、特定キーへのアクセス集中を確認します。Serverlessだからキー設計や容量条件を無視してよいわけではありません。
5. 読取り整合性 結果整合性のある読取りでは、直前に完了した更新がまだ見えない場合があります。テーブルとローカルセカンダリインデックスは強い整合性の読取りに対応しますが、グローバルセカンダリインデックスは対応しません。読み終わった直後の別更新まで止めるものではなく、対象と方式を確認します。
6. グローバルテーブル グローバルテーブルは複数リージョンでデータを利用する方式です。現行には複数リージョン結果整合性のMRECと、複数リージョン強整合性のMRSCがあります。全てが非同期・結果整合性だと一般化せず、リージョンや機能の対応条件も含め方式を選びます。CLFでは主にグローバル利用の目的と条件を理解します。
7. TTLによる期限 DynamoDBのTTL属性で期限を持つ項目を指定すると、期限後にバックグラウンドで削除されます。期限ちょうどに物理削除される保証ではなく、通常は数日以内に処理されます。セッションの有効期限や参照を止める条件はアプリ側で時刻を確認し、まだ残る項目を有効と誤認しないようにします。
8. 更新のまとまりと保護 DynamoDBにも対応するトランザクションAPIがあり、複数の操作を全て成功または全て不成立として扱えます。NoSQLだからトランザクションがないという説明は誤りです。ただし操作や範囲等の制約を確認します。アクセス権、バックアップ、復元、更新時の条件は利用者が要件に合わせて管理します。
図解
重要ポイント
- 柔軟な属性でも主キーは必要。
- QueryとScan、GSIの整合性を区別する。
- TTLは期限ちょうどの削除保証ではない。
間違えやすい点
- NoSQLをキー不要・トランザクションなしと理解する。
- 全グローバルテーブルを結果整合性だけと考える。
用語解説
- 項目
- 主キーで識別される、一組の属性を持つデータ。
- パーティションキー
- 項目の配置や検索に関係する主キーの構成要素。
- ソートキー
- 同じパーティションキー内で項目を区別し順序を扱う要素。
- GSI
- 元テーブルと異なるキー等で読むためのグローバルセカンダリインデックス。
関連教材
参考資料
教材データに登録された参考リンクです。リンク先の内容や更新日は提供元でご確認ください。
- https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Introduction.html
- https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/HowItWorks.CoreComponents.html
- https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/capacity-mode.html
- https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/HowItWorks.ReadConsistency.html
- https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/TTL.html
- https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/transaction-apis.html
- https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Query.html
- https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Scan.html
確認問題の出題・採点や学習履歴の保存にはログインが必要です。