MongoDB

データベース | IT用語集

この用語をシェア

概要・定義

MongoDBは、ドキュメント指向のNoSQLデータベースで、データをJSONライクなドキュメント形式(BSON)で格納します。2009年に最初のバージョンがリリースされ、伝統的なリレーショナルデータベースとは異なり、柔軟なスキーマ、水平スケーリング、高パフォーマンスを特徴としています。モダンアプリケーション開発、特にWebアプリケーション、モバイルアプリケーション、ビッグデータ処理で幅広く使用されています。

主要な特徴・利点

1. 柔軟なスキーマ設計

伝統的なSQLデータベースとは異なり、事前に固定したスキーマを定義する必要がありません。ドキュメントごとに異なるフィールドを持つことができ、アジャイル開発や快速なプロトタイプ開発に適しています。

2. スケーラビリティとパフォーマンス

水平スケーリング(シャーディング)と垂直スケーリングの両方をサポートし、大量のデータや高トラフィックに対応できます。インメモリストレージエンジンやインデックスの最適化により、高速なデータアクセスを実現します。

3. リッチクエリ機能

アグリゲーションパイプライン、テキスト検索、地理空間クエリ、グラフルックアップなど、高度なデータ処理機能を提供します。JSONドキュメントのネストした構造を直接クエリできるため、複雑なデータ操作を簡単に実行できます。

4. 自動フェイルオーバーと高可用性

レプリカセットを使用した自動フェイルオーバー機能、データセンターを跨いだレプリケーション、バックアップとポイントインタイムリカバリ機能により、高い可用性とデータ保護を実現します。

使用例・実装方法

基本的なインストールと設定

# Ubuntu/Debianでのインストール
# MongoDBの公式リポジトリを追加
wget -qO - https://www.mongodb.org/static/pgp/server-7.0.asc | sudo apt-key add -
echo "deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu focal/mongodb-org/7.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-7.0.list

# パッケージリストを更新してインストール
sudo apt-get update
sudo apt-get install -y mongodb-org

# MongoDBサービスの開始
sudo systemctl start mongod
sudo systemctl enable mongod

# MongoDBシェルに接続
mongosh

基本的なデータ操作例

// データベースを選択または作成
use myapp

// ドキュメントの挿入
db.users.insertOne({
  name: "John Doe",
  email: "john@example.com",
  age: 30,
  interests: ["programming", "music", "travel"],
  address: {
    street: "123 Main St",
    city: "Tokyo",
    zipCode: "100-0001"
  }
})

// ドキュメントの検索
db.users.find({ name: "John Doe" })

// 複数条件での検索
db.users.find({ age: { $gte: 25 }, interests: "programming" })

// ドキュメントの更新
db.users.updateOne(
  { name: "John Doe" },
  { $set: { age: 31 }, $push: { interests: "photography" } }
)

// ドキュメントの削除
db.users.deleteOne({ name: "John Doe" })

Node.jsでの接続例(MongoDB Driver使用)

const { MongoClient } = require('mongodb');

const uri = "mongodb://localhost:27017";
const client = new MongoClient(uri);

async function run() {
  try {
    await client.connect();
    const database = client.db('myapp');
    const collection = database.collection('users');
    
    // ドキュメントの挿入
    const user = {
      name: "Jane Smith",
      email: "jane@example.com",
      age: 28,
      interests: ["design", "art"],
      createdAt: new Date()
    };
    
    const result = await collection.insertOne(user);
    console.log("ドキュメントが挿入されました:", result.insertedId);
    
    // ドキュメントの検索
    const findResult = await collection.find({ age: { $gte: 25 } }).toArray();
    console.log("検索結果:", findResult);
    
  } finally {
    await client.close();
  }
}

run().catch(console.dir);

競合技術との比較

MongoDB vs リレーショナルデータベース(MySQL/PostgreSQL)

  • MongoDB: スキーマレス、水平スケーリングに優れ、JSONデータの直接扱いが可能
  • RDBMS: ACIDトランザクション、正規化、結合クエリに優れる

MongoDB vs 他のNoSQLデータベース

  • MongoDB vs CouchDB: MongoDBはJavaScriptベースのクエリ、CouchDBはHTTP REST API
  • MongoDB vs DynamoDB: MongoDBはオンプレミス・クラウド両方、DynamoDBはAWSマネージドサービス
  • MongoDB vs Cassandra: MongoDBはドキュメント指向、Cassandraはカラムファミリー系

導入時の注意点・ベストプラクティス

1. スキーマ設計とデータモデリング

スキーマレスであるからといって、何でも自由にデータを格納するのではなく、アプリケーションのニーズに合わせた適切なデータモデルを設計することが重要です。埋め込みと参照のバランス、ドキュメントのサイズ制限等を考慮する必要があります。

2. インデックス戦略

クエリパフォーマンスを最大化するため、アプリケーションのクエリパターンに基づいて適切なインデックスを作成します。複合インデックス、テキストインデックス、地理空間インデックスなどを活用します。

3. レプリケーションとシャーディング

高可用性とスケーラビリティを実現するため、レプリカセットを構成し、必要に応じてシャーディングを実装します。シャーデキーの選択、チャンクサイズの設定、バランサーの配置などを慣重に計画します。

4. メモリ管理とリソース監視

MongoDBはメモリを大量に使用するため、システムリソースの監視と調整が重要です。WiredTigerストレージエンジンのキャッシュサイズ設定、コネクションプールの管理、スロークエリの監視を実施します。

関連Webサイト

この用語についてもっと詳しく

MongoDBに関するご質問や、システム導入のご相談など、お気軽にお問い合わせください。