【もんごでぃーびー】

MongoDB とは?

💡 JSON感覚でデータを保存・検索できる柔軟なデータベース
📌 このページのポイント
MongoDBのドキュメント型データ構造 RDB(テーブル型) id name age 1 田中 30 2 佐藤 25 3 鈴木 28 MongoDB(ドキュメント型) {" "name" : "田中", "age" : 30, "hobby" : ["読書","釣り"] "address" : {...} } ・固定スキーマ ・行と列の構造 ・JOIN でテーブル結合 ・柔軟なスキーマ ・ネスト構造が可能 ・スケールアウトが容易 VS
MongoDBのイメージ
ひよこ ひよこ

MongoDBってどんなふうにデータを保存するの?

ペンギン先生 ペンギン先生

テーブルの代わりに「コレクション」があって、行の代わりに「ドキュメント」があるんだ。ドキュメントJSONに似た形で `{"name": "Ken", "age": 25, "tags": ["dev", "blog"]}` みたいな入れ子構造も自由に書けるよ。

ひよこ ひよこ

MySQLとかRDBMSと何が違うの?

ペンギン先生 ペンギン先生

MySQLはあらかじめ「このテーブルはこの列を持つ」と定義してデータをきっちり整えるけど、MongoDBはドキュメントごとに異なるフィールドを持てるんだ。商品データで「Aさんのドキュメントにはcolor、Bさんのドキュメントにはsizeがある」というような使い方ができるよ。

ひよこ ひよこ

MongoDBってどんな場面で使われるの?

ペンギン先生 ペンギン先生

フォームの構造が変わりやすいサービス・ユーザーごとに属性が異なるデータ・コンテンツ管理システム・ログの保存などに向いているよ。MongooseというNode.js向けのODM(Object Document Mapper)と組み合わせてWebアプリに使われることが多いんだ。

ひよこ ひよこ

MongoDBでトランザクションって使えないの?データがおかしくなりそうで怖い。

ペンギン先生 ペンギン先生

昔はMongoDBにトランザクションがなくて「複数ドキュメントをまたぐ更新が途中で失敗しても巻き戻せない」という問題があったんだ。でもバージョン4.0(2018年)以降、マルチドキュメントのACIDトランザクションが使えるようになったよ。ただし性能への影響があるし、スキーマが自由な分「本来RDBMSで関係として表現すべきデータをMongoDBで表現しようとして複雑になる」という設計ミスをしやすい。MongoDBはスキーマ設計の哲学がRDBMSと根本的に違うため、RDBMSの思考でそのまま使うと後から困ることが多いんだよ。

ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「MongoDB」って出てきたら「JSONライクな形式でデータを自由に保存できる、代表的なドキュメント指向NoSQLデータベースだな」と思えばだいたいOK!
📖 おまけ:英語の意味
「MongoDB」 = 巨大(humongous)なデータベース
💬 「humongous(途方もなく大きい)」という英単語の中間部分「mongo」を取った名前だよ。大量データを扱えることを意識した名前なんだね
← 用語集にもどる