DEA / ドメイン2 データストア管理

重要な内容

Amazon DynamoDB

は、サーバーを管理せずに使えるキーと値・ドキュメント型の データベースです。規模によらず一桁ミリ秒で読み書きでき、データが増えても自動で分散します。DEA-C01 では、アクセスパターンから決めるキーとインデックスの設計、キャパシティモードと、 による期限切れデータの削除、Streams・ へのエクスポート・ などのデータの出し入れと保護が問われます。

Point
  • NoSQL: リレーショナル (SQL) 以外のデータベースの総称です。DynamoDB は結合を前提にしません。
  • TTL = Time to Live (生存期間) です。項目ごとに期限を持たせ、過ぎたら自動で削除します。
  • PITR = Point-in-Time Recovery (ポイントインタイムリカバリ) です。過去の任意の時点へ戻せます。
  • GSI = Global Secondary Index、LSI = Local Secondary Index です。

概要

は、テーブル・項目 (行に相当)・属性 (列に相当) でデータを持ちます。項目ごとに属性が違ってもよく、1項目の大きさは最大 400 KB です。

概要の図 キーで読み書き Streams / Kinesis Data Streams S3 へのエクスポートRCU を消費しない zero-ETL 統合 アプリ / Lambda DynamoDB テーブル Lambda などの後続処理 S3 Athena / Glue / EMR Redshift / OpenSearch

リレーショナル DB は「データを正規化してから、クエリで自由に結合する」設計ですが、DynamoDB は「先にアクセスパターン (どのキーで何を取るか) を決め、それに合わせてキーとインデックスを作る」設計です。試験では、アクセスパターンからキーを選ぶ問題と、分析のためにデータを外へ出す方法の問題がよく出ます。


主要技術

①プライマリキーとアクセスパターンからのスキーマ設計 ⚠️ 頻出

キー構成できる問い合わせ
のみ1つの属性キーを指定した1件の取得 (GetItem)
複合キーパーティションキー + 同じパーティションキーの中で、ソートキーの範囲・前方一致・並べ替え (Query)

パーティションキーの値をハッシュして、データを内部のパーティションへ分散します。1つのパーティションが処理できるのは、毎秒 3,000 読み取りユニットと 1,000 書き込みユニットまでです。値の種類が少ないキー (日付、ステータスなど) を選ぶと、一部のパーティションへ集中してが起きます (ホットパーティション)。

設計の手順内容
1. アクセスパターンを列挙「顧客 ID で注文一覧を新しい順に」「注文 ID で1件」など
2. パーティションキーを選ぶカーディナリティが高く、アクセスが均等に分かれる属性
3. ソートキーを選ぶ範囲や並べ替えに使う属性 (日時など)。ORDER#2026-10-17 のように複数の情報を連結することもある
4. 足りないパターンにインデックス別の属性で引く必要があれば /

関連するデータを1つのテーブルにまとめ、ソートキーの接頭辞で種類を分ける設計 (シングルテーブル設計) を使うと、1回の Query で関連する項目をまとめて取れます。

Scan はテーブル全体を読むため、大きなテーブルでは遅く、容量も大量に消費します。日常のアクセスパターンを Scan で満たす設計は避けます。


②セカンダリインデックス (GSI と LSI)

観点
キー別の + 任意の元と同じパーティションキー + 別のソートキー
作成いつでも追加・削除できるテーブル作成時にしか作れない
整合性結果整合性の読み取りのみ強い整合性の読み取りもできる
容量元のテーブルとは別に持つ元のテーブルの容量を使う
制約GSI の書き込みが追いつかないと、元のテーブルの書き込みもされる同じパーティションキーの項目の合計が 10 GB まで

GSI には必要な属性だけを射影 (コピー) すると、保管と書き込みの費用を抑えられます。


③キャパシティモードとスロットリング ⚠️ 頻出

モード課金向く負荷
読み書きのリクエスト数予測できない、急に増える、新しいテーブル
プロビジョンド (+ )設定した RCU・WCU の時間予測でき、高い使用率で安定した負荷

プロビジョンドでは、1 RCU で 4 KB までの項目の強い整合性の読み取りが毎秒1回 (結果整合性なら2回)、1 WCU で 1 KB までの項目の書き込みが毎秒1回です。

の原因対処
テーブル全体の容量不足 (プロビジョンド)容量を増やす、Auto Scaling、オンデマンドへ切り替え
ホットパーティション (特定のキーへの集中)高カーディナリティのキーにする、キーに接尾辞を付けて書き込みを分散する (書き込みシャーディング)
の書き込み容量不足GSI の容量を増やす
一時的な急増 の付きの再試行、 で書き込みを平準化する

パーティション単位の上限は、オンデマンドでも同じです。オンデマンドにすればホットパーティションが解決するわけではありません。


④TTL による期限切れデータの削除 ⚠️ 頻出

を有効にし、項目に期限 (Unix エポック秒) の属性を持たせると、期限を過ぎた項目を が自動で削除します。

特徴内容
費用削除に書き込み容量を消費しない
タイミング期限後、通常数日以内に削除される。それまでは読み取りに出てくるため、Query で期限の条件を付けて除く
Streams との関係TTL による削除も Streams に流れる (サービスによる削除として区別できる)
用途セッション、一時データ、保持期間を過ぎた履歴

TTL の削除を Streams で受けて で へ書くと、期限切れの項目を DynamoDB から消しつつ、S3 にできます。


⑤データを外へ出す・取り込む

手段内容向くケース
Streams項目の変更を24時間保持し、 などへ時系列に渡す変更を契機にした後続処理
for DynamoDB変更を Kinesis Data Streams へ送る。保持期間が長く、多数のコンシューマーに配れる や など複数の処理への配信
へのエクスポート全件または増分を S3 へ書き出す。 が前提で、読み取り容量を消費しない本番に影響を与えずに ・・ で分析
S3 からのインポートS3 の CSV・DynamoDB ・Ion から新しいテーブルを作る大量の初期データの投入 (書き込み容量を消費しない)
統合 や へ自動で複製するパイプラインを作らずに分析・検索

Streams と の使い分けは「変更データキャプチャ (CDC) と zero-ETL」の章で扱います。分析のためにテーブルを Scan する処理は、本番の容量を奪うため避けます。


⑥バックアップとバージョンの管理

機能内容
1〜35日で設定した期間内の任意の時点へ、新しいテーブルとして復元する
バックアップ任意の時点の完全なバックアップ。削除するまで残る。 でも管理できる
削除保護テーブルの誤削除を防ぐ
複数ので読み書きできるテーブル
の前段に置く。マイクロ秒の読み取り

誤った一括更新でデータが壊れた場合、グローバルテーブルのレプリカにも同じ変更が伝わるため、PITR で戻します (「データの保護とレジリエンス」の章)。


試験対策

①判断マトリクス

問題文のキーワード選ぶもの
アクセスパターンが決まっていて、一桁ミリ秒で読み書き
顧客ごとの注文を日付の範囲で取得 = 顧客 ID、 = 日付
別の属性でも検索したい (後から追加)
同じパーティションキーで別の並び順、強い整合性 (テーブル作成時)
特定のキーに書き込みが集中して高カーディナリティのキー、書き込みシャーディング
負荷が予測できない新しいテーブル
一定期間後に項目を自動で削除、費用をかけない
期限切れの項目を に残したいTTL + Streams + で S3 へ
本番に影響を与えずに全件を分析S3 へのエクスポート → /
大量の初期データを書き込み容量なしで投入S3 からのインポート
なしで で分析 統合
誤った更新の前の状態へ戻す

②よくある誤答

  • 分析のために本番テーブルを毎日 Scan すること。容量を奪います。 へのエクスポートを使います。
  • にすればホットパーティションのが消えると考えること。パーティション単位の上限は同じです。
  • で期限を過ぎた項目が即座に消えると考えること。数日かかることがあるため、読み取り側で除外します。
  • を既存のテーブルに後から追加しようとすること。LSI は作成時のみで、後からなら です。
  • リレーショナル DB のように正規化して、アプリ側で結合する設計にすること。アクセスパターンから設計します。

参考文献

  1. ※1出題比率: AWS 公式の試験ガイドに記載された、採点対象の設問のうちその分野が占める割合です。

検索

キーワードを入力してください