AWS CLF(Cloud Practitioner)対策

データベースの使い分け

データベースの使い分け

このレッスンを終えると、問題文に書かれた要件から、どのデータベースサービスを選ぶべきかを判断できるようになります。ここまでに出た RDS と DynamoDB に、Amazon ElastiCache と Amazon Redshift を足して整理します。

まず、自分でサーバーを建てるなら

自前のサーバーでは、たいてい MySQL が1台あるだけでした。売上の集計も、セッションの保存も、商品マスタも、全部そこに入れていました。規模が小さいうちはそれで回りますが、増えてくると次のような症状が出ます。

  • 同じ商品情報を毎秒何千回も読んでいて、データベースの CPU が張り付く
  • 月次の集計クエリが数十分かかり、その間は本番の処理まで遅くなる
  • ログイン中のユーザー情報を保存するだけなのに、テーブルが肥大していく

これは「1つのデータベースに全部やらせている」ことが原因です。AWS では、用途ごとに合う道具を使うという考え方 (パーパスビルト) を取ります。上の3つの症状には、それぞれ別の答えがあります。

ElastiCache は「何度も同じものを読む」ための道具

ElastiCache はメモリ上にデータを持つマネージドなキャッシュサービスです。Redis と Memcached に対応しています。

  • データをメモリに置くので、ディスクを読むデータベースより桁違いに速い
  • 用途は、繰り返し読まれる同じ結果を手前で受けること。データベースの負荷が下がり、応答も速くなる
  • セッション情報やランキングの保持にも使われる
  • あくまでキャッシュなので、これを唯一の保存先にはしない。元のデータは RDS などに置きます

試験では「読み取りの遅延をミリ秒未満にしたい」「同じクエリが繰り返し実行されてデータベースが重い」という文が合図です。

Redshift は「大量のデータを分析する」ための道具

Redshift はマネージドなデータウェアハウスです。

  • 何年分ものデータを集めて、集計や分析のクエリを流す用途に特化しています
  • 列指向で保持するため、「全期間の売上合計を出す」ような集計が速い
  • 一方で、1件のレコードを頻繁に書き換える用途には向きません
  • BI ツールをつないでレポートを作る、という使われ方が典型です

試験では「データウェアハウス」「ビジネスインテリジェンス」「ペタバイト級の分析」「過去数年分のデータを集計」が合図です。分析と聞いたら Redshift、と押さえます。

4つを1枚で

要件の文にこう書いてある選ぶサービス
リレーショナル、SQL、既存の MySQL や PostgreSQL、トランザクションAmazon RDS
MySQL や PostgreSQL 互換で、より高い性能と可用性Amazon Aurora
キーバリュー、NoSQL、一桁ミリ秒、規模が大きく伸びる、サーバーレスAmazon DynamoDB
繰り返し読まれる、キャッシュ、マイクロ秒からミリ秒未満、データベースの負荷を下げたいAmazon ElastiCache
データウェアハウス、BI、大量データの集計と分析Amazon Redshift

CLF ではもう少し名前が出ることがあります。深追いは不要ですが、次の対応だけ知っておくと落とし穴を避けられます。

  • Amazon Neptune — グラフデータベース。「関係性をたどる」「ソーシャルグラフ」「推薦」
  • Amazon DocumentDB — MongoDB 互換のドキュメントデータベース
  • AWS Database Migration Service (DMS) — 既存のデータベースを AWS へ移行するサービス。データベースそのものではありません

判断の手順

問題文を次の順で読むと、迷いが減ります。

  1. 移行の話か、保存の話かを見る。「既存の DB を AWS へ移したい」なら DMS です
  2. 分析か、業務処理かを見る。分析なら Redshift
  3. キャッシュの話かを見る。「繰り返し読む」「負荷を下げる」ならば ElastiCache
  4. 残ったらデータの形を見る。SQL と結合が要るなら RDS や Aurora、キーで引くだけなら DynamoDB

試験ではこう出る

よくある言い換えと、そこで引っ掛かる誤答を並べます。

  • 「読み取りが遅い」だけでは答えが決まりません。キャッシュで解決する話か、レプリカで解決する話かを読み分けます。「同じデータが何度も読まれる」なら ElastiCache、「参照クエリの量そのものが多い」なら RDS のリードレプリカです
  • 「高可用性」と来たらマルチ AZ、「読み取り性能」と来たらリードレプリカ。前のレッスンの分岐がそのまま出ます
  • 「レポート作成のために過去5年分を集計する」で RDS を選ぶのは誤りです。ここは Redshift です
  • 「サーバーレスなデータベース」で RDS を選ぶのは誤りです。DynamoDB が該当します
  • 「ElastiCache をメインの保存先にする」という選択肢は誤りです。キャッシュは消えうる前提の置き場です

まとめ

  • AWS は1つのデータベースに全部やらせず、用途ごとに合う道具を選ぶ
  • 業務処理でリレーショナルなら RDS や Aurora、キーで引くだけなら DynamoDB
  • 繰り返しの読み取りを速くしたいなら ElastiCache、大量データの分析なら Redshift
  • 移行そのものを問う文なら DMS。データベース本体と混ぜない
  • 「遅い」の一語では決まらない。何が遅いのか、目的は可用性か性能かを読む
生田 陸人
ゆめさくエンジニア / 現役ソフトウェアエンジニア
編集 LuaGate編集部

復習ミニクイズ

EC サイトが、商品ページの表示のたびに同じ商品マスタのレコードを RDS から読み出しており、データベースの負荷が高止まりしています。商品情報の更新頻度は低く、表示の応答をできる限り速くしたいです。最も適した対応はどれですか。