ドキュメントデータベース活用 - Amazon DocumentDB と DynamoDB で実現する柔軟なデータモデリング

Amazon DocumentDB と DynamoDB を活用したドキュメントデータベースの設計・運用方法を解説します。

ドキュメントデータベースの基本概念と AWS サービスの選択肢

ドキュメントデータベースは、JSON や BSON 形式の柔軟なデータ構造を格納・検索するために設計された NoSQL データベースです。リレーショナルデータベースのように事前にスキーマを厳密に定義する必要がなく、アプリケーションの進化に合わせてデータ構造を柔軟に変更できます。AWS では Amazon DocumentDB と Amazon DynamoDB の 2 つのサービスがドキュメントデータベースのユースケースに対応します。DocumentDB は MongoDB 互換の API を提供し、既存の MongoDB アプリケーションをほぼ無修正で移行できます。一方 DynamoDB はキーバリュー型とドキュメント型の両方をサポートするフルマネージドサービスで、ミリ秒単位の一貫したレイテンシを実現します。オンプレミスで MongoDB クラスターを運用する場合、レプリカセットの構成、シャーディングの設計、バックアップの自動化、セキュリティパッチの適用など多大な運用負荷が発生しますが、AWS のマネージドサービスはこれらをすべて自動化します。

この分野について体系的に学びたい方は、関連書籍 (Amazon) も参考になります。

Amazon DocumentDB の特徴

Amazon DocumentDB は MongoDB 3.6、4.0、5.0 互換のマネージドデータベースサービスです。ストレージは最大 128 TiB まで自動拡張され、6 つのコピーを 3 つのアベイラビリティゾーンにまたがって保持するため、高い耐久性と可用性を実現します。読み取りレプリカを最大 15 台まで追加でき、読み取り負荷の分散が容易です。DocumentDB のストレージエンジンは SSD ベースで、書き込みは 6 つのコピーのうち 4 つに確認されると完了するクォーラムベースのレプリケーションを採用しています。グローバルクラスター機能により、最大 5 つのリージョンにまたがるレプリケーションも可能で、災害復旧とグローバルな読み取りパフォーマンスの両方を実現します。以下は DocumentDB クラスターを作成する CLI コマンドの例です。 aws docdb create-db-cluster \ --db-cluster-identifier my-docdb-cluster \ --engine docdb \ --engine-version 5.0.0 \ --master-username admin \ --master-user-password MySecurePassword123 \ --storage-encrypted

DynamoDB のドキュメントモデルとユースケース

DynamoDB はドキュメント型データの格納にも優れた能力を発揮します。各アイテムは最大 400 KB のネストされた JSON 構造を持つことができ、マップ型やリスト型の属性を自由に組み合わせてドキュメントを表現できます。PartiQL という SQL 互換のクエリ言語を使えば、ネストされたドキュメント内の特定フィールドに対する検索や更新も直感的に記述できます。DynamoDB のオンデマンドキャパシティモードでは、トラフィックに応じて自動的にスケールし、リクエストがない時間帯のコストはほぼゼロになります。ゲームのプレイヤープロファイル、EC サイトの商品カタログ、IoT デバイスのテレメトリデータなど、アクセスパターンが明確でスケーラビリティが求められるユースケースに最適です。DynamoDB Streams と Lambda を組み合わせることで、ドキュメントの変更をリアルタイムに検知し、下流のシステムに伝播させるイベント駆動アーキテクチャも構築できます。グローバルテーブル機能により、複数リージョンでのアクティブ-アクティブ構成も実現可能です。

DocumentDB と DynamoDB の使い分け

DocumentDB と DynamoDB はどちらもドキュメントデータを扱えますが、最適なユースケースは異なります。DocumentDB は複雑なクエリパターンが必要な場合に適しています。アドホックなクエリ、集約パイプライン、テキスト検索、地理空間クエリなど、MongoDB の豊富なクエリ機能をそのまま活用できます。既存の MongoDB アプリケーションの移行先としても最適です。一方 DynamoDB は、アクセスパターンが事前に定義でき、ミリ秒単位の一貫したレイテンシが求められるワークロードに向いています。セッション管理、ショッピングカート、リアルタイムの入札システムなど、高スループットと低レイテンシが重要なユースケースで真価を発揮します。オンプレミスの MongoDB から移行する場合、クエリパターンの複雑さに応じて DocumentDB を選択し、新規開発でスケーラビリティを最優先する場合は DynamoDB を選択するのが一般的な判断基準です。両サービスとも暗号化、VPC 統合、IAM 認証をサポートし、エンタープライズレベルのセキュリティ要件を満たします。

さらに詳しく知りたい方は、関連書籍 (Amazon) で理解を深められます。

まとめ - ドキュメントデータベース戦略の最適化

DynamoDB はサーバーレスなスケーラビリティと一貫した低レイテンシを提供し、Lambda とのネイティブ統合でイベント駆動アーキテクチャの構築が容易です。ワークロードの特性に応じて両サービスを使い分けることで、柔軟なデータモデリングと高いパフォーマンスを両立できます。ドキュメントデータベースの選択は、クエリパターンの複雑さ、スケーラビリティ要件、既存資産の活用という 3 つの軸で判断することが重要です。

AWS の優位点

  • DynamoDB のオンデマンドモードはトラフィックに応じて自動スケールし、リクエストがない時間帯のコストはほぼゼロになる
  • DocumentDB は 3 つの AZ にまたがる 6 つのストレージコピーで高い耐久性と可用性を実現し、最大 128 TiB まで自動拡張する
  • DynamoDB は PartiQL による SQL 互換クエリでネストされたドキュメント内の検索・更新が可能
  • グローバルクラスター (DocumentDB、最大 5 リージョン) とグローバルテーブル (DynamoDB、最大 6 リージョン) により複数リージョンでの運用が可能
  • DocumentDB の変更ストリームで、ドキュメントの挿入・更新・削除をリアルタイムにキャプチャし、Lambda でイベント駆動処理を構築できる

同じテーマの記事

Amazon Aurora Global Database で実現するマルチリージョン構成 - DR とグローバル読み取りの設計 Aurora Global Database によるクロスリージョンレプリケーション、1 秒未満の RPO での DR 設計、グローバル読み取りの活用法を解説します。 Cassandra 互換データベース - Amazon Keyspaces で実現するサーバーレスな分散データベース Amazon Keyspaces (for Apache Cassandra) と DynamoDB を活用した分散データベースの設計・運用方法を解説します。 Amazon DynamoDB Accelerator (DAX) でマイクロ秒レイテンシを実現 - インメモリキャッシュの設計 DAX によるDynamoDB の読み取り高速化、キャッシュ戦略、クラスタ設計を解説します。 Amazon DocumentDB の Change Streams で構築するイベント駆動アーキテクチャ DocumentDB の Change Streams による変更データキャプチャ、Lambda トリガーとの統合、リアルタイムデータ同期パターンを解説します。 Amazon DocumentDB で MongoDB ワークロードをマネージドに運用 - ドキュメントモデルとクエリ設計 DocumentDB による MongoDB 互換データベースの運用、インデックス設計、グローバルクラスターの活用を解説します。 Amazon DocumentDB で運用する MongoDB 互換データベース - 設計パターンとスケーリング DocumentDB の MongoDB 互換性、インスタンスクラスの選定、Elastic Clusters によるシャーディング、バックアップ戦略を解説します。 Amazon DynamoDB のテーブル設計パターン - シングルテーブル設計と GSI の活用 DynamoDB のパーティションキー設計、シングルテーブルデザイン、GSI によるアクセスパターンの実現を解説します。 DynamoDB Global Tables でマルチリージョンデータベースを構築 - アクティブ-アクティブレプリケーション Global Tables によるマルチリージョンレプリケーション、コンフリクト解決、DR 設計を解説します。 Amazon ElastiCache のキャッシュ設計 - Redis と Memcached の選定とキャッシュ戦略 ElastiCache の Redis と Memcached の選定基準、Lazy Loading・Write-Through のキャッシュ戦略、Serverless モードの活用法を解説します。 グラフデータベース - Amazon Neptune で実現する高度な関係性データの分析と活用 Amazon Neptune によるグラフデータベースの構築と、複雑な関係性データの分析手法を解説します。ソーシャルネットワーク、不正検知、ナレッジグラフなど、グラフモデルが威力を発揮するユースケースと設計パターンを紹介します。 Amazon Keyspaces で運用する Apache Cassandra 互換データベース - サーバーレスで始める広域分散DB Amazon Keyspaces の Cassandra 互換性、オンデマンドとプロビジョンドのキャパシティ選定、パーティションキー設計を解説します。 Amazon Keyspaces で Cassandra ワークロードをマネージドに運用 - CQL 互換とサーバーレス Keyspaces による Cassandra 互換データベースの運用、CQL の活用、オンデマンドキャパシティの設計を解説します。 台帳データベース - Amazon QLDB で実現する改ざん不可能なデータ記録と監査証跡 Amazon QLDB (Quantum Ledger Database) による改ざん不可能な台帳データベースの構築と、DynamoDB との組み合わせによるハイブリッドデータアーキテクチャを解説します。金融取引、規制コンプライアンス、サプライチェーンでの活用パターンを紹介します。 Amazon Managed Blockchain で構築するプライベートブロックチェーン - Hyperledger Fabric の運用 Managed Blockchain による Hyperledger Fabric ネットワークの構築、チェーンコードの開発、メンバー管理とガバナンスを解説します。 Amazon MemoryDB for Redis - 耐久性を備えたインメモリデータベースの設計と活用 MemoryDB の Multi-AZ 耐久性、ElastiCache との使い分け、プライマリデータベースとしての活用パターンを解説します。 Amazon MemoryDB for Redis で耐久性のあるインメモリデータベースを構築 - キャッシュとプライマリデータストアの統合 MemoryDB による Redis 互換インメモリデータベースの運用、耐久性の仕組み、ElastiCache との使い分けを解説します。 Amazon Neptune でグラフデータベースを構築 - ナレッジグラフとソーシャルネットワーク分析 Neptune によるグラフデータベースの構築、Gremlin/SPARQL クエリ、Neptune Analytics の活用を解説します。 Amazon RDS で運用するマネージドデータベース - Multi-AZ とリードレプリカの設計 RDS による Multi-AZ 構成、リードレプリカ、自動バックアップ、Performance Insights の活用を解説します。 Redis 互換データベース - Amazon MemoryDB と ElastiCache で実現する高速インメモリデータストア Amazon MemoryDB for Redis による耐久性のあるインメモリデータベースと、Amazon ElastiCache によるキャッシュレイヤーの構築方法を解説します。マイクロ秒レベルの読み取りレイテンシと高可用性を両立する設計パターンを紹介します。 リレーショナルデータベース - Amazon RDS と Aurora で実現する高可用性データベース Amazon RDS と Aurora を活用したリレーショナルデータベースの構築方法を解説します。 サーバーレスデータベース - DynamoDB で実現するスケーラブルなデータ管理 AWS DynamoDB を中心としたサーバーレスデータベースの活用方法を解説します。 時系列データベース - Amazon Timestream で IoT・メトリクスデータを効率管理する Amazon Timestream を使った時系列データの管理・クエリ・分析を解説。IoT センサーデータやアプリケーションメトリクスの格納、自動階層化ストレージ、SQL クエリによる分析を紹介します。 Amazon Timestream で構築する時系列データ分析基盤 - IoT データの格納とクエリ最適化 Timestream による時系列データの格納、メモリストアとマグネティックストアの使い分け、SQL クエリの最適化を解説します。