サイトアイコンmaita tomoya dev io

MongoDB vs DynamoDB 徹底比較

databases

MongoDB vs DynamoDB 徹底比較

概要と歴史

NoSQLとは

NoSQL(Not only SQL)は、従来のリレーショナルデータベース(RDBMS)とは異なるデータモデルを採用するデータベースの総称である。固定的なスキーマを持たず、スケーラビリティと柔軟性に優れている。

NoSQLの主な種類:

種類説明代表例
ドキュメントDBJSONライクなドキュメントを格納MongoDB, CouchDB
キーバリューDBキーと値のペアを格納DynamoDB, Redis
カラムファミリDB列指向でデータを格納Cassandra, HBase
グラフDBノードとエッジの関係を格納Neo4j, Neptune

MongoDBとは

MongoDBは、2009年にMongoDB, Inc.(旧10gen)がリリースしたドキュメント指向のNoSQLデータベースである。BSON(Binary JSON)形式でデータを格納し、柔軟なスキーマと強力なクエリ機能を提供する。

MongoDBの名前は「humongous(巨大な)」に由来し、大量のデータを扱うことを目的として設計された。

DynamoDBとは

DynamoDBは、2012年にAmazon Web Services(AWS)がリリースしたフルマネージドのNoSQLデータベースサービスである。Amazonが社内で使用していたDynamoデータベースの設計を基に、キーバリューとドキュメントの両方のデータモデルをサポートする。

DynamoDBの特徴は、サーバーレスでスケーラビリティが事実上無制限であり、運用管理が不要な点にある。

主要なマイルストーン

MongoDBDynamoDB
2007年開発開始(10gen社内)-
2009年v1.0リリース-
2012年v2.2(集約パイプライン)DynamoDBリリース
2015年v3.2(ドキュメントバリデーション)DynamoDB Streams
2017年v3.6(Change Streams)DAX(キャッシュ)、Global Tables
2018年MongoDB Atlas(マネージドサービス)本格展開トランザクション対応
2020年v4.4(Hedged Reads)PartiQL対応
2022年v6.0(暗号化クエリ)-
2023年v7.0(Queryable Encryption GA)ゼロETL統合

強みと弱み

MongoDBの強みと弱み

観点強み弱み
スキーマ柔軟性スキーマレスでドキュメント構造を自由に変更スキーマの一貫性を自分で管理する必要
クエリ言語豊富なクエリ演算子、集約パイプラインSQLに慣れた人には学習が必要
集約フレームワークパイプラインベースの強力なデータ処理複雑なパイプラインは可読性が低下
インデックス多種多様なインデックス(複合、テキスト、地理空間)インデックス設計が重要
レプリカセット自動フェイルオーバー、高可用性レプリカセットの管理(Atlas使用で解消)
Atlasフルマネージドクラウドサービスベンダーロックインの可能性
トランザクションv4.0以降でマルチドキュメントトランザクション対応RDBMSほどの成熟度はない
水平スケーリングシャーディングによるスケールアウトシャードキーの設計が重要
エコシステムMongoose(Node.js)、各言語ドライバーが充実ODMの選択が必要

DynamoDBの強みと弱み

観点強み弱み
マネージド完全サーバーレス、運用管理不要AWSに完全依存
スケーラビリティ事実上無制限の水平スケーリングスケーリングの遅延(オンデマンドで改善)
パフォーマンス一桁ミリ秒のレイテンシ(一貫して)複雑なクエリはサポートされない
料金モデル使った分だけ課金(オンデマンド)高トラフィック時のコスト予測が困難
Global Tablesマルチリージョンレプリケーションコストが高い
DAXインメモリキャッシュでマイクロ秒レイテンシ追加コスト
Streams変更データキャプチャLambdaとの統合が前提
クエリ制限パーティションキー/ソートキーベースの効率的なアクセス柔軟なクエリが困難(GSI/LSIで対応)
トランザクションTransactWriteItems/TransactGetItems25アイテムまでの制限

データモデルの比較

MongoDBのデータモデル

MongoDBは「ドキュメント」を基本単位とする。

データベース → コレクション → ドキュメント

用語対応(RDBMS ↔ MongoDB):
  データベース ↔ データベース
  テーブル     ↔ コレクション
  行(レコード)↔ ドキュメント
  列(カラム) ↔ フィールド
  JOIN        ↔ 埋め込みドキュメント or $lookup

ドキュメントの例:

{
  "_id": "ObjectId('...')",
  "name": "田中太郎",
  "email": "tanaka@example.com",
  "addresses": [
    { "type": "home", "city": "東京" },
    { "type": "work", "city": "横浜" }
  ],
  "orders": [{ "product": "ノートPC", "price": 150000 }]
}

DynamoDBのデータモデル

DynamoDBは「テーブル」「アイテム」「属性」で構成される。

テーブル → アイテム → 属性

キー構造:
  パーティションキー(PK): データの分散を決定する必須キー
  ソートキー(SK): PK内でのソート順を決定するオプションキー
  → PK + SK の組み合わせが一意識別子

DynamoDBのテーブル設計例(Single Table Design):

PK          | SK              | データ
------------|-----------------|----------------
USER#001    | PROFILE         | {name: "田中", email: "..."}
USER#001    | ORDER#20240101  | {product: "ノートPC", price: 150000}
USER#001    | ADDRESS#home    | {city: "東京"}

データモデリングの違い

観点MongoDBDynamoDB
スキーマスキーマレス(オプションでバリデーション可能)スキーマレス(キー構造は固定)
リレーション埋め込み or 参照($lookup)Single Table Design推奨
正規化非正規化を推奨するが正規化も可能非正規化が基本
設計の柔軟性高い(後から構造変更しやすい)低い(アクセスパターンを事前に設計)
JOIN相当$lookup(集約パイプライン)なし(アプリケーション側で結合)

CAP定理との関係

CAP定理は、分散システムにおいて「一貫性(Consistency)」「可用性(Availability)」「分断耐性(Partition tolerance)」の3つを同時に満たすことはできないという定理である。

特性MongoDBDynamoDB
デフォルトの一貫性強整合性(プライマリ読み取り)結果整合性(Eventual Consistency)
強整合性オプションRead Concern "majority"ConsistentRead: true
可用性レプリカセットによる自動フェイルオーバーマルチAZで高可用性
分断耐性シャーディング対応AWSインフラで保証
CAP分類CP(一貫性 + 分断耐性)AP(可用性 + 分断耐性)※設定次第

パフォーマンス比較

レイテンシ

操作MongoDB(Atlas)DynamoDB
単一ドキュメント読み取り1-5ms1-5ms
単一ドキュメント書き込み2-10ms1-5ms
複雑なクエリ10-100ms(インデックス依存)N/A(複雑なクエリ不可)
集約処理10-1000ms(データ量依存)N/A(Lambdaで処理)
DAXキャッシュN/A<1ms

スケーラビリティ

観点MongoDBDynamoDB
水平スケーリングシャーディング(手動設計)自動(パーティション分散)
最大ドキュメントサイズ16MB400KB
最大コレクション/テーブルサイズ事実上無制限事実上無制限
スループットシャード数に依存オンデマンド or プロビジョンド
Global分散Atlas Global ClustersGlobal Tables

適しているユースケース

MongoDBが適しているケース

  • コンテンツ管理: ブログ、CMS、メディアメタデータ
  • IoTデータ収集: 多様なセンサーデータの格納
  • カタログ管理: EC商品カタログ(属性が商品ごとに異なる)
  • リアルタイム分析: 集約パイプラインによるデータ処理
  • モバイルアプリバックエンド: Realm(モバイルDB)との同期
  • プロトタイピング: スキーマの柔軟な変更
  • マルチクラウド: AWS、GCP、Azureに対応(Atlas)

DynamoDBが適しているケース

  • サーバーレスアーキテクチャ: Lambda + API Gateway + DynamoDB
  • ゲームのランキング・セッション: 低レイテンシ要件
  • セッション管理: 高速な読み書き
  • IoTデータストア: 大量のセンサーデータ(時系列)
  • ショッピングカート: 高可用性、一貫したパフォーマンス
  • ユーザープロファイル: キーベースの高速アクセス

適していないケース

状況MongoDBDynamoDB
複雑なJOINが多いRDBMSを検討不可能(アプリ側で処理)
厳格なACIDトランザクションRDBMSの方が堅牢25アイテムまでの制限
アドホッククエリが頻繁対応可能GSI設計が必要、柔軟性に欠ける
マルチクラウド対応(Atlas)AWSのみ
ローカル開発対応DynamoDB Local(機能制限あり)

採用企業の実例

MongoDB

企業用途
eBay商品カタログ、検索
Forbesコンテンツ管理
BoschIoTデータ管理
Ciscoネットワーク管理
AdobeCreative Cloudメタデータ
SEGAゲームデータ管理
Toyotaコネクテッドカーデータ

DynamoDB

企業用途
Amazonショッピングカート、セッション
Netflixユーザーデータ、ブックマーク
Airbnb検索セッション
SamsungSmartThings IoTデータ
Lyftライドデータ
Snapメッセージング
Duolingoユーザー進捗データ

コスト比較

MongoDB Atlas

プラン特徴月額(概算)
Free(M0)512MB、共有クラスター無料
Serverless従量課金読み書き量に応じた課金
Dedicated(M10+)専用クラスター$57/月〜

DynamoDB

項目オンデマンドプロビジョンド
読み取り$1.25/100万RRU$0.00065/RCU/時
書き込み$6.25/100万WRU$0.00065/WCU/時
ストレージ$0.25/GB/月$0.25/GB/月
無料枠25GB + 25WCU + 25RCU/月25GB + 25WCU + 25RCU/月

選択の判断基準

判断基準MongoDBDynamoDB
クラウド依存マルチクラウド対応AWSのみ
クエリの複雑さ複雑なクエリ可能シンプルなアクセスパターン
運用負荷Atlas使用で軽減完全マネージド
開発の柔軟性高いアクセスパターン事前設計が必要
コスト予測比較的予測しやすいトラフィックに依存
AWSエコシステム独立深い統合(Lambda、AppSync等)
ローカル開発容易DynamoDB Localで対応(制限あり)

まとめ

MongoDBとDynamoDBは、NoSQLの中でも異なるアプローチを取るデータベースである。

MongoDBを選ぶべき場合:

  • 柔軟なクエリが必要
  • マルチクラウドで運用したい
  • ドキュメントの構造が複雑で多様
  • 集約処理(分析)が重要
  • 開発時の柔軟性を重視

DynamoDBを選ぶべき場合:

  • AWSエコシステムに統合したい
  • サーバーレスアーキテクチャ
  • 予測可能なアクセスパターン
  • 運用管理をゼロにしたい
  • 一桁ミリ秒のレイテンシが必須

どちらを選ぶにせよ、NoSQLデータベースの選択において最も重要なのは「アクセスパターンの理解」である。どのようなクエリでデータにアクセスするかを事前に設計し、それに最適なデータモデルを構築することが成功の鍵となる。


参考リンク