MongoDB と DynamoDB:クラウドネイティブなトレードオフ
AWS DynamoDB の完全サーバーレスモデルが MongoDB Atlas の豊富なクエリ柔軟性を上回る場面と、その逆の場面を評価します。
「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 productionMongoDB 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フィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- MongoDB と Redis:ドキュメントとキーバリューキャッシュ
- MongoDB と Cassandra:惑星規模の書き込み
- MongoDB と DynamoDB:クラウドネイティブなトレードオフ
- Neo4j のようなグラフデータベースを使う場面