Amazon DynamoDB

ミリ秒単位のレイテンシを保証するフルマネージドな NoSQL データベースサービスで、どんな規模のトラフィックにも自動スケールする

概要

Amazon DynamoDB は、キーバリュー型とドキュメント型の両方のデータモデルをサポートするフルマネージドな NoSQL データベースサービスです。データ量やリクエスト数に関係なく、一桁ミリ秒のレスポンスタイムを一貫して提供します。テーブルの作成後はキャパシティの管理を AWS に任せるオンデマンドモードと、事前にスループットを指定するプロビジョンドモードの 2 つの課金方式から選択できます。グローバルテーブル機能を使えば、複数のリージョンにデータを自動複製し、各リージョンで読み書き可能なマルチリージョン・マルチアクティブ構成を実現できます。DynamoDB Streams を使えばテーブルの変更をリアルタイムにキャプチャし、Lambda 関数でイベント駆動型の処理を実行できます。

パーティションキー設計とホットパーティション回避

DynamoDB のパフォーマンスはパーティションキーの設計に直結します。データは内部的にパーティションキーのハッシュ値に基づいて分散配置されるため、カーディナリティの高い属性 (ユーザー ID、注文 ID など) を選ぶことでリクエストが均等に分散されます。逆に日付やステータスのようなカーディナリティの低い属性をパーティションキーにすると、特定のパーティションにアクセスが集中するホットパーティション問題が発生し、スロットリングの原因になります。対策としては、パーティションキーにランダムサフィックスを付与する書き込みシャーディングや、複合キー (例: ユーザー ID + タイムスタンプ) の採用が有効です。グローバルセカンダリインデックス (GSI) を使えば主キー以外の属性でも効率的なクエリが可能ですが、GSI ごとに追加のストレージとスループットが消費されるため、必要最小限に抑えることが重要です。Azure Cosmos DB もパーティションキーの概念を持ちますが、スループットの分散方式が異なるため、DynamoDB のキー設計をそのまま移植すると性能問題が起きる場合があります。

オンデマンドモードとプロビジョンドモードの判断基準

DynamoDB の課金方式は 2 つあり、ワークロードの特性に応じて選択します。オンデマンドモードはリクエストごとの従量課金で、読み取り 100 万リクエストあたり約 1.25 ドル、書き込み 100 万リクエストあたり約 6.25 ドルです。トラフィックが予測困難な新規サービスや、スパイクが激しいワークロードに向いています。プロビジョンドモードは事前にスループット (RCU/WCU) を指定する方式で、安定したトラフィックパターンが見えている場合はオンデマンドより安価になります。リザーブドキャパシティ (1 年または 3 年契約) を組み合わせれば、さらに最大 77% の割引が適用されます。実務では、サービス立ち上げ期はオンデマンドで始め、トラフィックパターンが安定してきたらプロビジョンドに切り替えるのが定石です。NoSQL データベースの専門書籍 (Amazon) では、こうした設計判断の詳細が解説されています。

DAX、TTL、バックアップによる運用最適化

DynamoDB Accelerator (DAX) はインメモリキャッシュレイヤーで、読み取りレイテンシをミリ秒からマイクロ秒に短縮します。読み取りが支配的なワークロード (リーダーボード、セッション管理など) で特に効果を発揮しますが、書き込み直後の読み取り一貫性が不要なケースに限定されます。TTL (Time to Live) 機能を有効にすれば、有効期限切れのアイテムが自動削除され、ストレージコストの肥大化を防げます。セッションデータや一時トークンの管理に最適です。バックアップにはポイントインタイムリカバリ (PITR) とオンデマンドバックアップの 2 種類があります。PITR を有効にすれば過去 35 日間の任意の時点にテーブルを復元でき、オペレーションミスからの復旧に備えられます。DynamoDB Streams を使えばテーブルの変更をリアルタイムにキャプチャし、Lambda 関数でイベント駆動型の後続処理 (検索インデックスの更新、集計テーブルへの反映など) を実行できます。

共有するXB!