Amazon DocumentDB
MongoDB 互換の API を提供するフルマネージドドキュメントデータベースで、JSON ドキュメントの格納・クエリ・インデックス作成をスケーラブルに実行する
概要
Amazon DocumentDB (with MongoDB compatibility) は、MongoDB 3.6 / 4.0 / 5.0 互換の API を提供するフルマネージドドキュメントデータベースサービスです。内部的には Aurora と同様の分散ストレージアーキテクチャを採用しており、ストレージは 3 つの AZ に 6 つのコピーで自動レプリケーションされます。最大 15 のリードレプリカ、自動バックアップ、ポイントインタイムリカバリ、保管時と転送時の暗号化を標準で備えています。MongoDB のドライバーやツールをそのまま使用できるため、既存の MongoDB アプリケーションを最小限の変更で移行できます。
MongoDB との互換性と非互換の境界線
DocumentDB は MongoDB ワイヤプロトコルに互換性がありますが、MongoDB そのものではありません。この違いを正確に理解しておかないと、移行後に予期しない動作に遭遇します。互換性があるのは、CRUD 操作、集約パイプライン (aggregate)、インデックス (単一フィールド、複合、マルチキー、テキスト、地理空間)、トランザクション (4.0 互換)、Change Streams です。一方、非互換な機能として、$where 演算子、サーバーサイド JavaScript 実行、Capped Collection、一部の集約ステージ ($merge の一部オプション) があります。MongoDB Atlas からの移行では、AWS Database Migration Service (DMS) を使ったオンライン移行が可能で、ダウンタイムを最小化できます。移行前に DocumentDB の互換性テストツールを使い、アプリケーションが使用している API が DocumentDB でサポートされているか事前検証することが強く推奨されます。MongoDB 6.0 以降の新機能 (Queryable Encryption など) は DocumentDB では利用できないため、最新機能への依存度が高い場合は MongoDB Atlas を検討すべきです。
インスタンスクラスの選定とコスト最適化
DocumentDB のコストはインスタンス時間、ストレージ、I/O リクエストの 3 要素で構成されます。インスタンスクラスは db.r5 / db.r6g (Graviton2) から選択でき、Graviton2 ベースの db.r6g は同等スペックの db.r5 に対して約 10% 安価かつ最大 30% 高いパフォーマンスを発揮します。ワーキングセットがインスタンスのメモリに収まるかどうかがパフォーマンスの分水嶺で、メモリに収まらないとディスク I/O が増加し、レイテンシが急激に悪化します。CloudWatch の BufferCacheHitRatio メトリクスが 95% を下回る場合は、インスタンスクラスのスケールアップを検討すべきです。読み取り負荷が高いワークロードでは、リードレプリカを追加してアプリケーション側で読み取りを分散させます。DocumentDB Elastic Clusters を使えば、シャーディングによる水平スケーリングも可能で、数百万の読み書きリクエスト/秒とペタバイト規模のストレージに対応できます。開発・テスト環境では、インスタンスベースのクラスターの代わりに DocumentDB Elastic Clusters の最小構成を使うことで、コストを抑えつつ本番と同じ API で開発できます。
DynamoDB との選択基準
DocumentDB と DynamoDB はどちらも NoSQL データベースですが、データモデルとアクセスパターンが根本的に異なります。DynamoDB はキーバリュー/ワイドカラム型で、パーティションキーとソートキーによるアクセスパターンを事前に設計する必要があります。単一テーブル設計により極めて高いスループットと一桁ミリ秒のレイテンシを実現しますが、アドホックなクエリや複雑な集約処理には向きません。DocumentDB はドキュメント型で、任意のフィールドにインデックスを作成してフレキシブルなクエリが可能です。集約パイプラインによる複雑なデータ変換、ネストされた JSON ドキュメントの部分更新、正規表現による検索など、RDB に近い柔軟性を持ちます。選定の目安として、アクセスパターンが明確で超高スループットが必要なら DynamoDB、スキーマが頻繁に変わりアドホッククエリが多いなら DocumentDB が適しています。コンテンツ管理システム、ユーザープロファイル、カタログデータなど、ドキュメント構造が複雑で検索条件が多様なケースでは DocumentDB の柔軟性が活きます。