MongoDB の特徴

今回は MongoDB の特徴について見てみよう。

公式サイトにも記載されている内容として、特徴は大きく以下のように整理できる。

  • ドキュメントデータベース(NoSQL)
  • 特殊クエリ
  • 高性能
  • 高可用性
  • 水平スケーラビリティ

ドキュメントデータベース(NoSQL)

JSON のようにキー・バリュー(Key-Value)の組み合わせをそのまま保存できる、ドキュメント形式のデータベースである。バリューにはさまざまな形式を指定できる。たとえば数値や文字列はもちろん、配列やオブジェクトを保存できることも特徴である。また、このバリューの形式は動的に変更でき、同じフィールド名に複数の形式を入れることもできる。つまり、スキーマレス(schemaless)なドキュメントデータベースである。

性能

性能を出すために、次のような機能が実装されている。

  • 埋め込みデータモデルによる I/O 処理の削減
  • インデックス(index)のサポート

NoSQL でありながら「インデックス」をサポートしていることが MongoDB の特徴である。「インデックス」に関連して「ユニークキー」を指定することもできる。

特殊クエリ

JSON 形式で指定する特殊クエリを活用して DB を検索する。クエリで実行できる操作は基本的な CRUD 操作はもちろん、以下のような特徴的なクエリがある。

  • 集計(Aggregation、Map-Reduce)
  • 「テキストインデックス」を使った文字列検索
  • 地理空間クエリ

集計(Aggregation、Map-Reduce)では、保存されたデータに対してさまざまな統計処理を実行できる。クエリ単体の組み立ては独特な実装なので慣れが必要だが、処理順序がパイプライン化されているため、コードの見通しはよい。

「地理空間クエリ」は、組み込みの「GeoJSON」形式を利用して「範囲内のポイント検索」を行うことができる。

可用性

MongoDB はレプリカセットという機能でレプリケーション機能を提供する。このレプリカセットは自動フェイルオーバーとデータ冗長性を提供する。

水平スケーリング

水平スケーリングという特徴は、「マシンを増やすことで性能を向上できる」ということである。MongoDB では、コア機能であるシャーディングという仕組みによって水平スケーラビリティを実現している。

複数ストレージエンジンのサポート

MongoDB は複数のストレージエンジンをサポートする。一般的に使用されるファイルシステムのほか、インメモリエンジンを選択できる。また、ストレージエンジン API を公開しているため、サードパーティ製ストレージエンジンを作成することもできる。

参考文書