Amazon DynamoDB
ミリ秒単位のレイテンシを保証するフルマネージドな NoSQL データベースサービスで、どんな規模のトラフィックにも自動スケールする
概要
Amazon DynamoDB は、キーバリュー型とドキュメント型の両方のデータモデルをサポートするフルマネージドな NoSQL データベースサービスです。データ量やリクエスト数に関係なく、一桁ミリ秒のレスポンスタイムを一貫して提供します。テーブルの作成後はキャパシティの管理を AWS に任せるオンデマンドモードと、事前にスループットを指定するプロビジョンドモードの 2 つの課金方式から選択できます。グローバルテーブル機能を使えば、複数のリージョンにデータを自動複製し、各リージョンで読み書き可能なマルチリージョン・マルチアクティブ構成を実現できます。DynamoDB Streams を使えばテーブルの変更をリアルタイムにキャプチャし、Lambda 関数でイベント駆動型の処理を実行できます。
DynamoDB のデータモデルとパーティション設計
DynamoDB のテーブルはパーティションキーとオプションのソートキーで構成される主キーを持ちます。パーティションキーの値に基づいてデータが内部的に分散配置されるため、パーティションキーの設計がパフォーマンスに直結します。カーディナリティの高い属性 (ユーザー ID、注文 ID など) をパーティションキーに選ぶことで、データとリクエストが均等に分散されます。逆に、カーディナリティの低い属性 (日付、ステータスなど) をパーティションキーにすると、特定のパーティションにアクセスが集中するホットパーティション問題が発生します。グローバルセカンダリインデックス (GSI) を使えば、主キー以外の属性でも効率的なクエリが可能になりますが、GSI ごとに追加のストレージとスループットが消費されるため、必要最小限に抑えることが重要です。
Azure Cosmos DB との比較
Azure で DynamoDB に対応するサービスは Azure Cosmos DB です。Cosmos DB はマルチモデルデータベースとして、キーバリュー、ドキュメント、グラフ、カラムファミリー、テーブルの 5 つの API をサポートしており、DynamoDB よりデータモデルの選択肢が広いです。一方、DynamoDB はキーバリュー/ドキュメントモデルに特化することでシンプルさと予測可能なパフォーマンスを実現しています。料金面では、DynamoDB のオンデマンドモードは読み取り 100 万リクエストあたり約 1.25 ドル、書き込み 100 万リクエストあたり約 6.25 ドルです。Cosmos DB のサーバーレスモードは RU (Request Unit) ベースの課金で、100 万 RU あたり約 0.282 ドルですが、1 回の操作に必要な RU 数がデータサイズやクエリの複雑さによって変動するため、コスト予測が DynamoDB より難しい傾向があります。
DynamoDB の実務活用パターン
DynamoDB はセッション管理、ユーザープロファイル、ショッピングカート、IoT デバイスデータ、ゲームのリーダーボード、リアルタイムの在庫管理など、低レイテンシと高スループットが求められるワークロードに最適です。実務では、DynamoDB Accelerator (DAX) をキャッシュレイヤーとして導入することで、読み取りレイテンシをマイクロ秒単位まで短縮できます。また、TTL (Time to Live) 機能を使えば、有効期限切れのデータを自動的に削除してストレージコストを抑えられます。バックアップについては、ポイントインタイムリカバリ (PITR) を有効にすれば過去 35 日間の任意の時点にテーブルを復元でき、オンデマンドバックアップと組み合わせることで堅牢なデータ保護を実現できます。