Amazon DocumentDB で MongoDB ワークロードをマネージドに運用 - ドキュメントモデルとクエリ設計
MongoDB 互換 API でドキュメントデータを管理し、最大 15 のリードレプリカとグローバルクラスターで読み取りスケーリングと DR を実現する。エラスティッククラスターによるシャーディングの活用法を解説します。
DocumentDB の概要
Amazon DocumentDB は MongoDB 互換のフルマネージドドキュメントデータベースサービスです。MongoDB 3.6、4.0、5.0 の API と互換性があり、既存の MongoDB ドライバーやツールをそのまま使用できます。ストレージは最大 128 TiB まで自動拡張され、3 つの AZ に 6 つのデータコピーを保持する高可用性設計です。RDS のリレーショナルデータベースとは異なり、スキーマレスな JSON ドキュメントを柔軟に格納でき、ネストされたオブジェクトや配列を含む複雑なデータ構造をそのまま保存・クエリできます。DynamoDB がキーバリューアクセスに最適化されているのに対し、DocumentDB はリッチなクエリ (集約パイプライン、テキスト検索、地理空間クエリ) を必要とするワークロードに適しています。
クラスター構成とスケーリング
DocumentDB のクラスターは 1 つのプライマリインスタンスと最大 15 のリードレプリカで構成されます。リードレプリカは読み取りワークロードを分散し、プライマリの障害時には自動的にフェイルオーバーします。フェイルオーバーの優先順位はインスタンスごとに設定でき、特定のインスタンスを優先的に昇格させることが可能です。エラスティッククラスターは DocumentDB のシャーディング機能で、数百万件の書き込み/秒と PB 規模のストレージに対応します。シャードキーを指定するだけで自動的にデータを分散し、シャードの追加・削除もオンラインで実行できます。グローバルクラスターは最大 5 つのリージョンにリードレプリカを配置し、1 秒未満のレプリケーション遅延でグローバルな読み取りスケーリングと DR を実現します。
クエリと運用
DocumentDB は MongoDB の集約パイプライン、テキストインデックス、地理空間インデックスをサポートします。$match、$group、$sort、$lookup (コレクション間の結合) などの集約ステージを組み合わせて複雑な分析クエリを実行できます。Change Streams で コレクションの変更をリアルタイムに検知し、Lambda 関数をトリガーしてイベント駆動の処理を構築できます。パフォーマンスインサイトでクエリの実行計画と待機イベントを分析し、遅いクエリの原因を特定します。自動バックアップは最大 35 日間の保持期間で、任意の時点への復元 (PITR) が可能です。 ドキュメントデータベースの設計パターンについてはAmazon の関連書籍も参考になります。
DocumentDB の料金
DocumentDB の料金はインスタンス、ストレージ、I/O の 3 要素で構成されます。インスタンスは db.r6g.large (2 vCPU、16 GiB) で約 0.277 ドル/時 (東京リージョン) です。ストレージは GB あたり約 0.11 ドル/月、I/O は 100 万リクエストあたり約 0.22 ドルです。I/O 最適化ストレージを選択すると I/O 料金が不要になり、I/O 負荷の高いワークロードではトータルコストが削減されます。エラスティッククラスターは vCPU あたりの課金で、シャード数に応じてスケールします。リードレプリカはプライマリと同じインスタンス料金が発生するため、読み取り負荷に応じて適切なレプリカ数を設定します。
まとめ
Amazon DocumentDB は MongoDB 互換のフルマネージドドキュメントデータベースで、スキーマレスな JSON データの格納とリッチなクエリを提供します。最大 15 のリードレプリカ、エラスティッククラスターによるシャーディング、グローバルクラスターによる DR で、小規模から大規模まで幅広いワークロードに対応します。