MongoDBとRDBMSの比較
MongoDBはドキュメント型NoSQLデータベースであり、リレーショナルデータベース(MySQL/Oracle/SQL Server)と比較して、非構造化データの柔軟な保存とスケーラビリティに優れます。両者は相互補完的関係にあり、固定スキーマデータはRDBMS、可変スキーマデータはMongoDBで管理するのが実践的です。Redisはインメモリ型でキャッシュ用途に特化しているため、MongoDBとは用途が異なります。
基本操作とインストール
Linux環境でのインストール手順は公式ドキュメントを参照。主要な操作コマンド例:
データベース操作
// データベース選択
use CustomerDB
// データベース削除
db.dropDatabase()
// バージョン確認
db.version()
コレクション操作
// 固定サイズコレクション作成
db.createCollection("Clients", {capped: true, size: 2048, max: 500})
// 範囲検索
db.Clients.find({clientId: {$gt: 100}})
// データ更新
db.Clients.update({name: "田中"}, {$set: {status: "active"}})
C#ドライバ実装例
public class MongoDataAccess
{
private readonly IMongoDatabase _database;
public MongoDataAccess(string connectionString)
{
var client = new MongoClient(connectionString);
_database = client.GetDatabase("CustomerDB");
}
public bool AddDocument<T>(T entity)
{
var collection = _database.GetCollection<T>(typeof(T).Name);
var result = collection.InsertOne(entity);
return result.IsAcknowledged;
}
public T GetDocument<T>(string field, object value)
{
var filter = Builders<T>.Filter.Eq(field, value);
return _database.GetCollection<T>(typeof(T).Name).Find(filter).FirstOrDefault();
}
}
適用シナリオ
- 複数マイクロサービスからのデータ統合(例:人事システムの出勤/申請/ユーザーデータをDataXでMongoDBに集約)
- 可変スキーマが必要な開発初期段階のデータ管理
- ログ分析システムでの半構造化データ保存
ストレージ構造とインデックス
クエリはMongoDB Query Languageで処理され、BSON形式で保存されます。WiredTigerストレージエンジンは二重書き込み戦略を採用:メモリキャッシュとジャーナルファイルへの同時書き込みによりデータ整合性を確保します。インデックス戦略:
- 単一フィールドインデックス:デフォルトで_idに適用
- 複合インデックス:クエリ頻度の高いフィールドの組み合わせ、範囲指定順序に注意
レプリケーション構成
高可用性実現のため最小3ノード構成(プライマリ1、セカンダリ2)を推奨。設定例:
設定ファイル
storage:
dbPath: /data/mongo/27020
net:
port: 27020
replication:
replSetName: rs1
クラスター初期化
rs.initiate()
rs.add("192.168.1.10:27021")
rs.add("192.168.1.10:27022")
フェイルオーバー機制
プライマリ障害時、セカンダリノードが選挙を開始。投票過半数で新プライマリを選出。ノード数は奇数が必須(偶数だとスプリットブレイン発生リスク)。