「MongoDB」はNoSQLの中でもドキュメント型NoSQLに分類されます。MongoDBは他のNoSQLと同様に、リレーショナルデータベース(RDBMS)と比較してビックデータや非構造データの処理が得意といった特徴がありますが、ここではそういったNoSQLの一般的な特徴の紹介は割愛し、他のNoSQLとは違うドキュメント型NoSQLならではの特徴、そしてMongoDBならではの特徴を紹介します。
ドキュメント型ならではの特徴
ドキュメント型NoSQLではデータとして階層型データ構造であるJSONを扱います。図1にRDBMSのリレーショナルデータ構造、キーバリューストア(KVS)のキーバリューデータ構造、ドキュメント型NoSQLのJSONを比較します。
最初にリレーショナルデータと比較すると、リレーショナルデータは美しく正規化されていますが、データの全貌を見たいときには結合(JOIN)する必要があり、SQLを操れるエンジニアでなければデータの全貌を知ることができません。また、JSONはデータの変化に柔軟であり、RDBMSとは違いデータ構造変更のオペレーションをすることなくデータ構造を更新できます。
次にキーバリューデータに注目すると、1対多のデータ構造を表現しようとした時に、キーの値に連番を振らなくてはならず、表現が難しいことがわかります。これらのことからJSONの特徴は、エンジニアでなくてもデータの全貌がわかり、構造の変更が柔軟で、かつ1対多のような複雑なデータ構造も扱えるといえます。
図1:データ構造の比較(筆者作成)
図2:OpenWeatherMapでのデータ形式(筆者作成)
JSONはデータ通信の主流なフォーマットになりつつあります。以前は、同じ階層型データ構造であるXMLが主流でしたが、よりシンプルに書けることから現在ではJSONが普及しており、TwitterやFacebookをはじめとした多くのウェブサービスで採用されています。
例えば、OpenWeatherMapというウェブサービスでは、URLにアクセスするとJSON形式で天気のデータを取得できます(図2参照)。近年話題の“モノのインターネット(Internet of Things:IoT)”や“機械間通信(Machine to Machine:M2M)”でもセンサや機器などが出すデータの多くはJSON形式です。
これまでを整理すると、ドキュメント型NoSQLならではの以下の4つの特徴があることになります。
- キーバリューよりも複雑なデータが簡単に扱える
- データ構造の変更が柔軟
- エンジニアでなくても全貌がわかる
- ウェブサービスやM2Mの標準的なデータ構造
図3:ウェブサイトやオンラインゲームでの構成(筆者作成)
キーバリュー型よりも複雑なデータが簡単に扱える
この特徴がメリットとなる代表的なケースは、ウェブアプリケーションやオンラインゲームです。例えば、オンラインゲームでは、プレイヤーは複数のアイテムを持っていますし、アイテムには複数の属性があるでしょう。このような複雑なデータ構造はキーバリューでの表現は困難ですが、JSONであれば難なく扱うことができます。
RDBMSで扱えるかというと、データの量が少ない時は問題ないですが、サービスが流行して一気にユーザーが増えた時に、RDBMSでは現実的なコストで処理しきれない可能性があります。