MongoDB
概要と特徴
MongoDBは、ドキュメント指向(Document-Oriented)のNoSQLデータベースの一つです。
- データ構造: BSON(Binary JSON)形式でデータを保存します。これはJSON形式の拡張です。
- スキーマレス: 事前に厳密なスキーマ(定義)を必要とせず、柔軟にデータを格納できます。
- 水平分散(Scalability): シャーディング(Sharding)により、データを複数のサーバーに分散して保存し、高い拡張性(Scalability)を実現します。
- 高可用性(High Availability): レプリカセット(Replica Set)により、データの冗長性を持たせ、障害耐性を高めます。
分類
MongoDBは以下のカテゴリに分類されます。
- データベースの種類: NoSQLデータベース
- データモデル: ドキュメント指向データベース(Document Database)
上位概念・下位概念
- 上位概念:
- データベース(Database)
- NoSQL
- 下位概念:
- コレクション(Collection): RDBのテーブルに相当するデータの集まり。
- ドキュメント(Document): RDBの行(レコード)に相当するデータ単位。
メリット
- 開発の柔軟性: スキーマレスであるため、アプリケーションの変更に柔軟に対応でき、開発サイクルを速めることができます。
- 高い拡張性: シャーディングにより、データ量の増加やアクセス数の増加に対して、容易にスケールアウト(Scale-out)できます。
- パフォーマンス: 大量のデータに対する読み書きのパフォーマンスが高いです。特に、埋め込みドキュメント(Embedded Documents)を使用する場合に、関連データを一度に取得できるため効率的です。
デメリット
- トランザクション: 以前は複雑な複数ドキュメントにわたるトランザクション(Transactions)が困難でしたが、現在は対応しています(ただし、RDBと比べると利用に注意が必要な場合もあります)。
- データの一貫性: 柔軟性の高さゆえに、データの構造や整合性をアプリケーション側で担保する必要があります。
- 複雑なリレーション: リレーショナルデータベース(RDB)が得意とする、複雑な結合(Join)操作は苦手とします。
既存との比較
| 特徴 | MongoDB (NoSQL) | RDB (例: MySQL, PostgreSQL) |
|---|---|---|
| データ構造 | ドキュメント (BSON/JSON) | テーブル (行と列) |
| スキーマ | スキーマレス (柔軟) | 厳格 (定義必須) |
| 拡張性 | 水平分散 (シャーディング) が容易 | 垂直分散が主流 (水平分散は複雑) |
| 整合性 | 柔軟性が優先される | ACID特性により厳格に保証される |
競合
- ドキュメントデータベース: Couchbase, Amazon DynamoDB, Cosmos DBなど
- その他のNoSQL: Redis (KVS), Neo4j (グラフDB) など
- RDB: MySQL, PostgreSQL, Oracle Databaseなど
導入ポイント
- データ構造が柔軟に変わりやすいプロジェクトや、大量のデータを扱いスケーラビリティが求められるWebサービスに適しています。
- JSON形式との親和性が高いため、JavaScript系の開発スタック(MEAN/MERN Stackなど)との相性が良いです。
注意点
- インデックス(Indexes)の設計がパフォーマンスに大きく影響します。
- データモデリングにおいて、正規化(Normalization)ではなく非正規化(Denormalization)や埋め込みドキュメントを考慮する必要があります。
今後
- クラウドベースのマネージドサービスであるMongoDB Atlasの利用が拡大しています。
- マルチドキュメントトランザクション機能の強化など、RDBの利点を統合する動きが見られます。
関連キーワード
- NoSQL
- BSON
- JSON
- シャーディング (Sharding)
- レプリカセット (Replica Set)
- ドキュメントデータベース (Document Database)
- ACID特性
- スケーラビリティ (Scalability)
- MEAN/MERN Stack