MongoDB Academy · レッスン

MongoDB と DynamoDB:クラウドネイティブなトレードオフ

AWS DynamoDB の完全サーバーレスモデルが MongoDB Atlas の豊富なクエリ柔軟性を上回る場面と、その逆の場面を評価します。

レッスン 3/413 ステップ

「MongoDB と DynamoDB:クラウドネイティブなトレードオフ」はCoddyKit上の無料MongoDB Academyレッスンです。 これはレッスン3/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはMongoDB Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 MongoDB Academyコースには全4レッスンが含まれています。

クラウドNoSQLに対する2つのアプローチ

AWS DynamoDBとMongoDB AtlasはいずれもクラウドNoSQLデータベースですが、その思想は大きく異なります。DynamoDBはAWSの完全サーバーレスNoSQLサービスであり、管理するサーバーがなく、自動スケーリングに対応し、リクエスト単位で料金が発生します。MongoDB Atlasはマネージドクラウドサービスですが、より豊富な運用制御が可能なサーバークラスターを基盤としています。選択のポイントは、多くの場合、インフラをどの程度制御したいか、そしてクエリパターンがどの程度複雑かです。

DynamoDBのサーバーレスという価値提案

DynamoDB は真のサーバーレスです。選択するインスタンスも、クラスターのサイズを決める必要も、レプリカセットを設定する必要もありません。AWS は需要に応じて読み取り/書き込みキャパシティを自動的にスケーリングし、シャーディングを意識させることなく処理し、どの規模でも 1 桁ミリ秒のレイテンシーを保証します。運用上のオーバーヘッドをゼロにし、IAM ロール、Lambda トリガー、Streams など AWS との緊密な統合を求めるチームにとって、DynamoDB はインフラに関する意思決定の大きな領域を丸ごと不要にします。

DynamoDB の柔軟性に乏しいデータモデル

DynamoDB の主なアクセスモデルには制限があります。すべてのテーブルにパーティションキー(必須)と、任意のソートキーがあります。アイテムはパーティションキーの完全一致で取得し、必要に応じてソートキーの範囲で絞り込みます。汎用的なクエリエンジンはありません。アドホッククエリには、テーブル作成時に設計したグローバルセカンダリインデックス(GSI)か、テーブル全体のScan(高コストで低速)が必要です。そのため、Cassandra と同様に、アクセスパターンを最初に考えたスキーマ設計が求められます。

// DynamoDB: item identified by partition key + sort key
// Table: Orders
// Partition key: customerId
// Sort key: orderId

// Fetch all orders for a customer — fast
await dynamo.query({
  TableName: 'Orders',
  KeyConditionExpression: 'customerId = :cid',
  ExpressionAttributeValues: { ':cid': 'cust-123' }
}).promise()

// Find all orders with status = 'pending' — requires GSI or Scan
// A Scan reads the ENTIRE table — avoid in production

MongoDB Atlas の豊富なクエリモデル

MongoDB Atlas は、セルフホスト型 MongoDB と同じ豊富なクエリモデルをサポートしています。集約パイプライン、$lookup による結合、テキスト検索、地理空間クエリ、複合インデックスを使った任意のフィールドの絞り込みなどが利用できます。新しいインデックスを追加するだけで、リリース後にクエリパターンを変更できます。この柔軟性は、要件が頻繁に変わる場合や、設計時点で要件が完全には定まっていないアプリケーションにとって大きな利点です。

// MongoDB: ad-hoc query across multiple fields
db.orders.aggregate([
  {
    $match: {
      status: 'pending',
      createdAt: { $gte: new Date('2024-06-01') },
      'items.category': 'electronics'
    }
  },
  { $group: { _id: '$customerId', totalPending: { $sum: '$total' } } },
  { $sort: { totalPending: -1 } },
  { $limit: 10 }
])
// No equivalent in DynamoDB without expensive Scan + application-side grouping

料金モデルの違い

DynamoDB には 2 つの料金モードがあります。On-Demand は読み取り/書き込みリクエストごとに支払う方式で、予測できないトラフィックに適しています。Provisioned はキャパシティユニットを事前に確保する方式で、自動スケーリングと組み合わせれば、負荷が予測可能なワークロードでより安価になります。MongoDB Atlas はクラスターのティア(インスタンスサイズとストレージ)に基づいて課金されるため、負荷が安定している場合はコストを予測しやすい一方、トラフィックが少ない場合は割高になります。イベント間にトラフィックがまったくない、急激な変動のあるワークロードやイベント駆動型ワークロードでは、DynamoDB のリクエスト単位の従量課金が大幅に安くなることがあります。

AWS エコシステムとの統合

DynamoDB は AWS エコシステム全体とネイティブに統合できます。DynamoDB Streams は変更イベントを発行し、AWS Lambda 関数をトリガーできます。これは MongoDB Change Streams と同様ですが、AWS 内で完結します。IAM 認証を使えば、個別のデータベース認証情報を管理する必要もありません。ポイントインタイムリカバリやバックアップも、数回のクリックで設定できます。すでに AWS(Lambda、API Gateway、Cognito、S3)を深く利用しているチームにとって、DynamoDB は環境を切り替える負担を最小限に抑えられます。

MongoDB Atlas のクラウド間ポータビリティ

MongoDB Atlas はAWS、Azure、GCPで実行できるため、1 つのクラウドプロバイダーにロックインされません。AWS と Azure にまたがるマルチリージョンクラスターもデプロイできます。自社サーバー上のセルフホスト型 MongoDB は Atlas と動作が同じであるため、クラウドとオンプレミスの間で移行できます。DynamoDB は AWS 専用であり、移行するにはデータアクセス層を書き直す必要があります。マルチクラウド戦略や規制上のデータレジデンシー要件がある組織にとって、Atlas のポータビリティは大きな利点です。

DynamoDB の整合性オプション

DynamoDB では、結果整合性のある読み取り(デフォルト。レイテンシーとコストが低い)と、強い整合性のある読み取り(レイテンシーが高く、コストが 2 倍)を選択できます。書き込みは、単一のアイテム内では常に強い整合性を持ちます。また、DynamoDB はトランザクション(TransactWriteItems / TransactGetItems)をサポートしており、最大 100 個のアイテムに対する操作をアトミックに実行できます。これは MongoDB の複数ドキュメントトランザクションに似ていますが、通常の読み取り/書き込みユニットの 2 倍のコストで課金されます。

ドキュメントサイズとスキーマの柔軟性

どちらのデータベースも、柔軟でスキーマレスなドキュメントをサポートしています。DynamoDB のアイテムは最大 400 KB、MongoDB のドキュメントは最大 16 MBです。リッチメディアのメタデータ、長いテキストコンテンツ、大きなネスト構造を扱う場合は、MongoDB の大きなドキュメント上限が重要になります。DynamoDB の 400 KB 制限を超える大きなペイロードは分割するか、DynamoDB から参照する形で S3 に保存する必要があり、複雑さが増します。400 KB 未満の一般的な構造化データであれば、この制限が問題になることはほとんどありません。

DynamoDB を選ぶ場合

次のような場合は DynamoDB を選択します。チームがAWS を中心に構成されており、インフラ管理をゼロにしたい場合。トラフィックが急激に変動する、または予測できない場合(Lambda を利用する API、イベント駆動型システムなど)。アクセスパターンがシンプルで、事前に明確に定義されている場合(キーバリュー検索やソート済みの範囲検索)。または、接続プールを管理せずにLambda/IAM と緊密に統合したい場合です。REST API を使用し、DynamoDB に対してシンプルな CRUD を行うシングルページアプリケーションは、典型的な適用例です。

MongoDB Atlas を選ぶ場合

次のような場合は MongoDB Atlas を選択します。クエリパターンが変化する、または複雑である場合(集約、結合、全文検索など)。チームがマルチクラウドやオンプレミスへのポータビリティを必要としている場合。ドキュメントが400 KB を超える可能性がある場合。Atlas Search、Vector Search、Data Federationが必要な場合。または、アプリケーションがすでにローカルで MongoDB を使用しており、クラウドへスムーズに移行したい場合です。高度な分析パイプラインが主要な要件である場合も、MongoDB のほうが適しています。

確認テスト

このレッスンで学んだ MongoDB と NoSQL データベースの概念について、理解度を確認しましょう。

レッスンのまとめ

このレッスンでは、次のことを学びました。DynamoDB のサーバーレスモデルと AWS ネイティブな統合は、シンプルで事前に定義されたアクセスパターンを持つ、急激な変動のあるイベント駆動型ワークロードに適しています。一方、MongoDB Atlas は、DynamoDB では実現できない、より豊富なクエリ、大きなドキュメント、マルチクラウドへのポータビリティを提供します。つまり主なトレードオフは、運用のシンプルさと AWS へのロックイン(DynamoDB)か、クエリの柔軟性とクラウド間の自由度(MongoDB)かという点です。次は、MongoDB ではなく Neo4j のようなグラフデータベースを使うべき場面について学びます。

無料で開始

AI チューターと学ぶ JavaScript — 無料

ブラウザでリアルコードを書いて実行し、24/7 の AI チューターから瞬時にサポートを受け、ウェブまたはアプリで続きから学習できます。

コース
30
レッスン
120

よくある質問

「MongoDB と DynamoDB:クラウドネイティブなトレードオフ」レッスンは無料ですか?

はい。「MongoDB と DynamoDB:クラウドネイティブなトレードオフ」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、MongoDB Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 MongoDB Academyコースには全4レッスンが含まれています。

「MongoDB と DynamoDB:クラウドネイティブなトレードオフ」で何を学びますか?

AWS DynamoDB の完全サーバーレスモデルが MongoDB Atlas の豊富なクエリ柔軟性を上回る場面と、その逆の場面を評価します。 ブラウザで直接実行するハンズオンコードでMongoDB Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

MongoDB Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのMongoDB Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン3/4です。

「MongoDB と DynamoDB:クラウドネイティブなトレードオフ」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このMongoDB Academyレッスンでコードを書いて実行できますか?

はい。すべてのMongoDB Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. MongoDB と Redis:ドキュメントとキーバリューキャッシュ
  2. MongoDB と Cassandra:惑星規模の書き込み
  3. MongoDB と DynamoDB:クラウドネイティブなトレードオフ
  4. Neo4j のようなグラフデータベースを使う場面
← MongoDB Academyに戻る