今回はMongoDBの特徴についてまとめます。
ドキュメントデータベース
JSONドのようにキーバリューの組み合わせをそのまま保存できるドキュメント形式のデータベースです。 バリューにはさまざまな型が指定でき、例えば数値、文字列はもちろん、配列やオブジェクトが保存できるのも特徴です。 また、このバリューの型は動的に変更することができますし、同一のフィールド名に複数の型を入れることもできます。 言い換えればスキーマレスのドキュメントデータベースです。
性能
性能を出すため、以下のような機能を実装しています。
- 組み込みデータモデルを利用したI/O処理の削減
- インデックスのサポート
NoSQLながら「インデックス」をサポートしているあたりはMongoDBの特徴だと思います。 「インデックス」に関連して「ユニークキー」の指定もできます。
クエリ
JSON形式で指定する特殊なクエリを利用してDBを検索します。 クエリを用いてできる操作は基本的な CRUD 操作はもちろん、以下にあげる特徴的なクエリがあります。
- 集約(Aggregation、Map-Reduce)
- "テキストインデックス" を用いた文字列検索
- 地理空間クエリ
「集約(Aggregation、Map-Reduce)」では、保存しているデータに対してさまざまな統計を行うことができます。 クエリ単体の組み立ては独特な実装なので慣れが必要ですが、処理順がパイプライン化されており、コードの見通しは良いと思います。
「地理空間クエリ」は組み込みの「GeoJSON」形式を利用して「範囲内のポイント検索」ができます。
可用性
MongoDB では レプリカセット と呼ばれる機能でレプリケーション機能を提供しています。 この レプリカセットでは 自動フェールオーバー や データ冗長性 を提供します。
水平拡張
水平拡張とは、いわゆる「マシンを増やすことで性能向上できる」という特徴です。 MongoDBではコア機能(シャーディングという仕組み)で水平拡張性を実現しています。
複数ストレージエンジンのサポート
MongoDBは複数のストレージエンジンをサポートしています。 通常利用されるファイルシステム以外にもインメモリエンジンを選択することもできます。 また、ストレージエンジンAPIを公開しているのでサードパーティーのストレージエンジンを作ることもできます。
今回はMontoDBの特徴についてまとめました。 ざっくりまとめると以下のようになります。 (ホント?と思う部分もありはしますが…公式サイトでも記載される内容ではあります。)
- ドキュメントデータベース(NoSQL)
- 特殊なクエリ
- 高性能
- 高可用性
- 水平拡張性
参考になったでしょうか? 本記事がお役に立っていると嬉しいです!!
参考記事
最後に… このブログに興味を持っていただけた方は、 ぜひ 「Facebookページ に いいね!」または 「Twitter の フォロー」 お願いします!!