第 8 章 高パフォーマンスなアーキテクチャの設計(24%)

データベースの選び方

この章で学ぶこと

  • キャッシュの戦略とサービス(ElastiCache)
  • データのアクセスパターン(読み取り中心と書き込み中心)
  • データベースのキャパシティプランニング(キャパシティユニット、インスタンスタイプ、Provisioned IOPS)
  • データベースの接続とプロキシ
  • 適切なユースケースを伴うデータベースエンジン

この章に出てくる用語

Amazon RDS
MySQL・PostgreSQL・MariaDB・Oracle・SQL Server などを、AWS が運用してくれる形で動かすサービス。 OS とデータベースエンジンのパッチ、バックアップ、マルチ AZ 配置による切り替えを AWS 側が面倒を見る。OS にはログインできない。 それが必要なら EC2 に自分で入れる(その場合は運用も自分持ち)。
Amazon DynamoDB
キーで引くことに特化した、サーバーレスのデータベース。 テーブルの容量に上限が無く、どれだけ大きくなっても一桁ミリ秒で返す。そのかわり、結合(JOIN)はできないし、どう引くかを先に決めてからテーブルを設計する必要がある。
Amazon RDS Proxy
接続をまとめて使い回し、データベースの接続数を節約する仕組み。 Lambda のように短い処理が大量に立ち上がるとき、そのたびに接続すると上限に達して「接続できない」エラーが出る。プロキシを挟むと接続が再利用され、フェイルオーバー時の切り替えも速くなる。
図 8-1 データの形で選ぶ
図 8-1 データの形で選ぶ
形代表向く場面
リレーショナルRDS / Aurora表と表を結合する。トランザクションが要る
キーバリューDynamoDBキーで引くだけ。極端に大きい・速い
インメモリElastiCache同じものを何度も読む。セッション・ランキング
列指向(分析)Redshift大量のデータを集計する(第 10 章)
文書DocumentDBMongoDB 互換の JSON 文書
グラフNeptune関係をたどる(SNS の友達・推薦)
ワイドカラムKeyspacesCassandra 互換
台帳QLDB変更履歴を改ざんできない形で残す
時系列TimestreamIoT の計測値など時刻の並び

試験では

特化型のデータベースは「問題文のキーワードに直結する」。「ソーシャルグラフ」「関係をたどる」→ Neptune、「改ざんできない履歴」→ QLDB、「MongoDB からの移行」→ DocumentDB。ここは覚えるだけで点になる。

図 8-2 RDS と Aurora
図 8-2 RDS と Aurora
Amazon RDSAmazon Aurora
エンジンMySQL・PostgreSQL・Oracle・SQL Server などMySQL / PostgreSQL 互換
ストレージ容量をあらかじめ決める自動で伸びる(最大 128TB)
複製マルチ AZ 配置(同期の待機系 1 つ)3 つの AZ に 6 つの複製
リードレプリカエンジンにより最大 5〜15最大 15・遅延が小さい
切り替え数十秒〜より速い
費用安い高い(そのぶん性能と可用性が高い)

補足

Aurora Serverless v2 は、負荷に応じて容量を自動で増減させる形だ。アクセスに波がある・読めないワークロードで、「ピークに合わせて常時大きいインスタンスを立てる」のを避けられる。コストの設問(第 13 章)でも出てくる。

リージョンをまたぐときは Aurora グローバルデータベースがある。別リージョンへの複製が 1 秒未満で、障害時は 1 分ほどで昇格できる。「複数リージョンで読みたい」「リージョン障害に備えたい」要件で出る。

図 8-3 DynamoDB の設計で効くところ
図 8-3 DynamoDB の設計で効くところ
要素何を決めるかつまずきどころ
パーティションキーデータの置き場所が決まる偏ると「ホットパーティション」になり、そこだけ遅くなる
ソートキー同じパーティション内の並び範囲で引くときに効く
GSI(グローバルセカンダリインデックス)別のキーでも引けるようにするあとから追加できる。結果整合のみ
LSI(ローカルセカンダリインデックス)同じパーティションキーで別の並びテーブル作成時にしか作れない
キャパシティモードどう決まるか向く場面
オンデマンド使った分だけ。事前の見積り不要読めない負荷・急な山
プロビジョンド読み書きの容量をあらかじめ指定(Auto Scaling 可)安定した負荷。安くなる
  • DAX ―― DynamoDB 専用のキャッシュ。読み取りがマイクロ秒になる。
  • ストリーム ―― 変更を順に流す。Lambda と繋いで変更に反応できる。
  • グローバルテーブル ―― 複数リージョンで読み書きできるようにする。
  • TTL ―― 項目に期限を持たせ、過ぎたら自動で消す。

試験では

「数ミリ秒」「キーで引くだけ」「サーバーレス」は DynamoDB。「マイクロ秒」まで求められたら DAX。逆に「複雑な結合をしたい」「既存の SQL をそのまま使いたい」なら RDS / Aurora。

同じ結果を何度も返しているなら、データベースの手前にキャッシュを置く。ElastiCache には 2 つのエンジンがあり、性格が違う。

図 8-4 Redis と Memcached
図 8-4 Redis と Memcached
RedisMemcached
データ構造豊富(リスト・集合・ソート済み集合)単純なキーバリューのみ
永続化できるできない
複製とフェイルオーバーできる(マルチ AZ)できない
スケールのしかたシャーディング(クラスターモード)ノードを足して分散(マルチスレッド)
向く場面セッション・ランキング・Pub/Sub単純なキャッシュを安く広く

補足

キャッシュの入れ方は 2 通りある。遅延読み込み(Lazy Loading)は、まずキャッシュを見て無ければ DB から読んで入れる方式。ライトスルーは、書き込みのたびにキャッシュも更新する方式だ。前者は無駄が少ないが初回が遅く、後者は常に新しいが書き込みが重くなる。どちらにも TTL を付けて古さを制御する。

「読み取りが重い」という設問には、3 つの答え方がある。どれが正解かは、何が重いかで決まる。

図 8-5 読み取りを速くする 3 つの道
図 8-5 読み取りを速くする 3 つの道
手効く場面効かない場面
リードレプリカを足す読み取りの件数そのものが多い同じクエリの繰り返し(キャッシュの方が効く)
キャッシュを置く同じ結果を何度も返している毎回違うデータを引く
インデックスを足す/設計を直す検索条件に合うインデックスが無いすでに最適なとき

試験では

書き込みが重いときにリードレプリカを足しても解決しない。書き込みは主系に集まる。その場合はインスタンスを大きくする(垂直)、書き込みを分ける(シャーディング)、あるいは DynamoDB のような水平に伸びるものへ移す。

図 8-6 要件の語からデータベースを決める
図 8-6 要件の語からデータベースを決める
問題文に出る語答えの方向
既存の MySQL / PostgreSQL をそのままAmazon RDS
高い性能と可用性・ストレージが自動で伸びるAmazon Aurora
複数リージョンで読む・リージョン障害に備えるAurora グローバルデータベース
一桁ミリ秒・キーで引く・サーバーレスAmazon DynamoDB
マイクロ秒まで速く(DynamoDB)DAX
セッション・ランキング・Pub/SubElastiCache for Redis
単純なキャッシュを安くElastiCache for Memcached
MongoDB からの移行Amazon DocumentDB
関係をたどる・推薦Amazon Neptune
改ざんできない履歴Amazon QLDB
接続数が尽きる(Lambda から)Amazon RDS Proxy
読み取りが重いリードレプリカ/キャッシュ
書き込みが重いインスタンスを大きく/シャーディング/DynamoDB へ

シナリオ演習

参照系のクエリが増えて RDS の CPU が上がっている。同じ内容のクエリが繰り返し実行されていることが分かった。費用も抑えたい。

補足

答え:ElastiCache を前に置いてクエリ結果をキャッシュする。

リードレプリカでも負荷は下がるが、台数ぶんインスタンス料金がかかる。「同じ内容が繰り返し」という語がキャッシュを指している。

シナリオ演習

Lambda から RDS へ接続している。アクセスが増えると「接続数が上限に達した」というエラーが出る。

補足

答え:RDS Proxy を挟んで接続をまとめて使い回す。

Lambda は同時実行数ぶん別々の実行環境が立ち上がり、それぞれが接続する。インスタンスを大きくして接続数上限を上げる案もあるが、費用対効果で劣る。

この章のまとめ

  1. キーで引くことに特化したサービス
  2. DynamoDB で結合はできるか
  3. Aurora が持つ複製の数と AZ
  4. Aurora のストレージの上限
  5. Aurora グローバルデータベースの複製の遅れ
  6. 偏ったパーティションキーで起きること

この章の根拠

AWS Certified Solutions Architect - Associate (SAA-C03) 試験ガイド

最終確認 2026-10-04 / 対応バージョン DEA 2026-05-04 改訂版