データベース基本概念

ドキュメント指向DB どきゅめんとしこうでーたべーす

MongoDBJSONBSONスキーマレスNoSQLコレクション
ドキュメント指向DBについて教えて

簡単に言うとこんな感じ!

ドキュメント指向DBは「JSONファイルの引き出し」みたいなDBだよ!Excelの表じゃなくて、Aさんのデータは住所あり・Bさんは住所なし・Cさんはお気に入りリスト付き、みたいに形が違っても全部一緒に保存できるんだ。商品カタログやブログ記事みたいに「モノによってデータ項目が違う」場合に最強なんだ!


ドキュメント指向DBとは

ドキュメント指向DB(Document-Oriented Database)とは、データを「ドキュメント」と呼ばれるJSON(またはXML・BSON)形式の自己記述的なデータ単位で管理するNoSQLデータベースです。RDBのように行と列の固定スキーマではなく、各ドキュメントが独自の構造を持てる点が最大の特徴です。

RDBの「テーブル」に相当するものをコレクションと呼び、コレクションは同じ種類のドキュメントをまとめる入れ物です。ただしRDBと異なり、同じコレクション内のドキュメントが全く異なる構造を持っていても構いません。これをスキーマレス(Schema-less)と呼びます。

ドキュメントはネスト(入れ子)構造や配列を持てるため、RDBでは複数テーブルに分散させていたデータを1つのドキュメントにまとめられます。これによりJOIN不要でデータを取得でき、高速なアクセスが可能です。一方で、データの整合性管理はアプリケーション側の責任となります。


RDBとの構造比較

概念RDBドキュメントDB
データの入れ物テーブルコレクション
1件のデータ行(Row)ドキュメント
データ定義カラム(固定)フィールド(自由)
リレーション外部キー・JOIN入れ子・参照
スキーマ事前定義が必要不要(スキーマレス)
検索言語SQL独自クエリ(MongoDB Query Language等)
RDB vs ドキュメントDB:商品データの比較 RDB(商品テーブル) id name color size 1 Tシャツ M 2 ノートPC NULL NULL 色やサイズがない商品でも NULLで埋める必要がある スペックはspecsテーブルに分離 → JOINが必要 ドキュメントDB(コレクション) {"id":1,"name":"Tシャツ", "color":"赤","size":"M", "tags":["カジュアル","夏物"]} {"id":2,"name":"ノートPC", "specs":{"cpu":"i7","ram":16}, "warranty":{"months":12}} 商品ごとに異なる構造でOK NULLもJOINも不要

歴史と背景

  • 2007年:CouchDBが公開。HTTPとJSON、MapReduceを採用したドキュメントDBの先駆け
  • 2009年:MongoDBが公開。高性能・使いやすさで急速に普及しNoSQLの代名詞に
  • 2013年:Firebaseが登場。リアルタイム同期対応のドキュメントDBとしてモバイル開発に普及
  • 2017年:Google Cloud Firestoreが公開。Firebaseの後継としてスケーラビリティが向上
  • 2020年代:MongoDBがAWS/Azure/GCPのマネージドサービスに対応。AWS DocumentDBも登場

主な製品比較

製品特徴得意な用途
MongoDB豊富な機能・強力な集計パイプラインECサイト・CMS・ログ分析
Firestoreリアルタイム同期・モバイル対応チャットアプリ・スマホゲーム
CouchDBHTTP API・オフライン同期分散システム・PWA
Elasticsearch全文検索特化ログ検索・コンテンツ検索
AWS DocumentDBMongoDBとAPI互換のマネージドサービスAWS環境でのMongoDB利用

関連する規格・RFC

規格・RFC番号内容
RFC 8259JSON(JavaScript Object Notation)の仕様
BSON仕様MongoDBが使うバイナリJSON形式
MongoDB Wire ProtocolMongoDBクライアント通信プロトコル

関連用語

  • NoSQL — ドキュメント指向DBが属するNoSQLカテゴリの全体像
  • キー・バリュー型DB — よりシンプルなNoSQLの一種
  • グラフDB — ドキュメント間の関係性を重視する別形式のNoSQL
  • JSONカラム — RDBでJSONを扱う機能(ドキュメントDBに近い柔軟性)
  • スキーマ — ドキュメントDBで省略できるデータ構造定義
  • 正規化 — RDBで行うデータ整理。ドキュメントDBでは非正規化が基本
  • データモデリング — ドキュメントDB設計で重要な考え方