# MongoDB
MongoDB のストレージバックエンドである WiredTiger は BTree と LSM(Log-Structured Merge)ツリーの2種類のデータ構造を選択できる。[[@2025__SoCC__Valet - Efficient Data Placement on Modern SSDs]] は BTree が in-place 更新を要求するため valet-mapper と非互換である一方、LSM モードには Valet を変更なしで適用できることを示した。WiredTiger は log ストリームと sst(SSTable)ストリームの2種類の書き込みを行うが、log の書き込みには `mmap()` が使われるため in-place かつ順序保証のない更新が必要になり、これは valet-mapper の非対応部分としてランダム書き込み領域(LOCK ファイルと同様の扱い)で処理される。評価(wt-perf の medium サイズ LSM ツリーテスト)では、Valet は f2fs に対してマルチスレッド読み取りで4倍超、書き込み主体ワークロードで3倍のスループットを示した。(Source: [[@2025__SoCC__Valet - Efficient Data Placement on Modern SSDs]])
[[Facebook]]によるParse買収後、MongoDBはParseを重要顧客として重視し始めた。[[Mark Callaghan]]はMySQL向けプラガブルストレージエンジンを構築した技術的信用性を梃子に、同様の仕組みがMongoDBの「ゲームチェンジャーになる」と主張し、Facebook社内での影響力とストレージエンジンコミュニティへの人脈を動員して、MongoDBのプラガブルストレージエンジン化と[[RocksDB]]のMongoDBサポートを両社のロードマップに乗せたと*Observability Engineering* 第2版第30章は紹介する。この事例は、権威によらない技術的信用性が企業間のロードマップに影響を与えた「ベンダーエンジニアリング」の実例として引用されている。(Source: [[@2026__OReilly__Observability Engineering 2E - Chapter 30 The Art and Science of Vendor Partnerships]] "How to Influence Another Company's Roadmap")
*Designing Data-Intensive Applications* 第2版第3章は、MongoDBをドキュメントモデル(JSONドキュメントとしてデータを表現するモデル)を普及させた代表的な specialized document database として位置づけ、Couchbaseと並んで挙げる。MongoDBの`$lookup`演算子(aggregation pipeline内)は、多くのドキュメントDBが弱い結合(join)サポートしか持たない中で、正規化されたIDを別ドキュメントへ解決する結合をデータベース内部で実行できる例として紹介される。また同章は、MongoDB自身も含め、ドキュメントデータベースが結合・セカンダリインデックス・宣言的クエリ言語を取り込みリレーショナルDB側もJSONサポートを追加するという「収束(convergence)」の一例としてMongoDBを扱う。(Source: [[@2026__OReilly__Designing Data-Intensive Applications 2E - Chapter 3 Data Models and Query Languages]] "Relational Versus Document Models", "Normalization, Denormalization, and Joins", "Convergence of Document and Relational Databases")
*詳説 データベース* 第1章は、プライマリキーという用語がリレーショナルデータベース(MySQL・PostgreSQL)・DynamoベースのNoSQLストア(Cassandra・Riak)と並び、ドキュメントストアの代表例としてMongoDBでも共通に使われると述べる。(Source: [[@2021__OReillyJapan__詳説 データベース - Chapter 1 基本事項の紹介と概要]] §1.4.2)
*詳説 データベース* 第6章は、MongoDBのデフォルトストレージエンジンである[[WiredTiger]]を、更新をメモリ内バッファへ蓄積し遅延を伴ってディスクへ伝播させる「遅延Bツリー(Lazy B-Tree)」の代表例として説明する。行ストアのBツリー実装ではメモリ内のページとディスク上のページに異なるフォーマットを使い、更新はまず更新バッファ(スキップリストで実装)に保存され、ページのフラッシュ時にディスク上のもとの内容と調停されて永続化される。ページの更新と構造変更(スプリット・マージ)はバックグラウンドスレッドで実行されるため、読み取り・書き込みプロセスはそれらの完了を待つ必要がない。これは、Valetの評価対象であるWiredTigerのBTree/LSMという2モードのうちBTreeモード側の内部構造を、ストレージエンジンの教科書的な系統樹(コピーオンライト・遅延・FDツリー・Bwツリー・キャッシュオブリビアス)の中に位置づける記述である。(Source: [[@2021__OReillyJapan__詳説 データベース - Chapter 6 Bツリーの亜種]] §6.3.1)
## 2010〜2011年時点の位置づけ(ウェブオペレーション第15章)
『ウェブオペレーション』第15章(2011年、[[Eric Florenzano]])は、MongoDB を CouchDB と並ぶ「ドキュメント指向型データベース」の代表例とし、10gen社によって開発されていたと紹介する。導入企業として SourceForge・Urban Airship・Disqus・GitHub・Justin.TV を挙げる。ドキュメント形式は JSON によく似た「BSON(binary-encoded specification of JSON-like object)」で、C++ による高速な実装だとされる。クエリは他の NoSQL より「伝統的」で、JavaScriptのMap/Reduce関数のアップロードではなくキーの範囲指定や、MongoDB独自のオブジェクト指向クエリレイヤを使うと説明される。CouchDBが主にコンシューマ向けデスクトップ・ブラウザで、MongoDBがデータセンタで使われているという当時の対比が示される。レプリケーション戦略はマスタスレーブ・レプリカペア・(限定的)マスタマスタの3種から選択でき、レプリカペア戦略はノード障害時にスレーブが自動的に新しいマスタへ昇格する点が特徴とされる。バックアップはシャットダウン+ファイルコピー、書き込みロック+ファイルコピー、mongodumpユーティリティの3手法が紹介される。(Source: [[@2011__OReillyJapan__ウェブオペレーション - Chapter 15 非リレーショナルデータベース]] §15.1.4, §15.2.5)
Urban Airship のマイケル・リチャードソンは、PostgreSQLのスケーリング問題を理由にMongoDBへ移行したと述べ、レプリカペアの自動フェイルオーバーを高く評価する一方、「今後はマスタスレーブモデルに移行するかもしれない」とも語っており、当面は手動フェイルオーバーが必要だと明かしている。オートシャーディングやレプリカセットといった新しいスケーリング機能の採用も近い将来の計画として挙げられている。(Source: [[@2011__OReillyJapan__ウェブオペレーション - Chapter 15 非リレーショナルデータベース]] §15.2.5 導入事例)
## 関連
- ソース: [[@2025__SoCC__Valet - Efficient Data Placement on Modern SSDs]] / [[@2026__OReilly__Observability Engineering 2E - Chapter 30 The Art and Science of Vendor Partnerships]] / [[@2026__OReilly__Designing Data-Intensive Applications 2E - Chapter 3 Data Models and Query Languages]] / [[@2021__OReillyJapan__詳説 データベース - Chapter 1 基本事項の紹介と概要]] / [[@2021__OReillyJapan__詳説 データベース - Chapter 6 Bツリーの亜種]] / [[@2011__OReillyJapan__ウェブオペレーション - Chapter 15 非リレーショナルデータベース]]
- エンティティ: [[Valet]] / [[f2fs]] / [[Mark Callaghan]] / [[RocksDB]] / [[Facebook]] / [[WiredTiger]] / [[CouchDB]]
- 概念: [[LSMツリー]] / [[ベンダーエンジニアリング]] / [[リレーショナル対ドキュメントモデル]] / [[B-Tree]] / [[単一リーダーレプリケーション]]