今回はドキュメント指向データベースである MongoDB についてです。
※いまごろ 何故、NoSQLなの? という疑問もありますが、
著者が触れたくなったのです。
MongoDB はC++言語で開発されたオープンソースのドキュメント指向データベースです。
ドキュメント指向データベースは、NoSQLに分類されるデータベースです。
NoSQLと言いますと、RDB(MS)ではないデータベースで、大きく分けて下記の分類のものがあります。
・キー・バリュー型(Key-Value Store型:KVS型)
・テーブル指向型
・ドキュメント指向型
※テーブル指向型は広義でKVS型の一種とされることもあります。
上記のうち、ドキュメント指向型に属す NoSQL データベースが MongoDB です。
RDBでは、レコードをテーブルで管理する構造となっていますが、
ドキュメント指向型ではドキュメントをコレクションで管理する構造となっています。
<RDBのレコード>
ドキュメント
<RDBのテーブル>
コレクション
<RDBのデータベース>
データベース
MongoDB は、JSONのような形式のドキュメントを管理します。
例えばこんなドキュメントです。
-----
{
username: "bob",
address: {
street: "123 Main Street",
sity: "Springfield"
state: "NY"
}
}
-----
このようなドキュメントを管理、操作できるデータベースが MongoDB です。
MongoDB もそうですが、ドキュメント指向型データベースでは、スキーマ定義が不要です。
MongoDB の場合は、上記のようなJSONライクな構造を決める事がスキーマ定義と同等の役割となります。
同等な役割にはなりますが、RDBのスキーマ定義の概念とは大きく異なる点があります。
テーブルのスキーマにあったレコードしか格納できないのがRDBでの当たり前ですが、ドキュメント指向型データベースの場合は、コレクション(RDBでいうテーブル)にスキーマの異なるドキュメントが格納可能です。
先のドキュメントを users というコレクションに格納したとします。
先に格納してあるドキュメントと構造を合わせなければと思いますが、MongoDB の場合は、次のように例えば「age」という先のドキュメントに存在しなかった要素を保持したドキュメントを格納することが可能です。
-----
{
username: "tom",
address: {
street: "123 Main Street",
sity: "Springfield"
state: "NY"
},
age: 18
}
-----
イメージはできましたね。
上記のドキュメントを、MongoDB のツール(CUI)を使って登録してみたいと思います。
MongoDB のインストールや、操作の詳細は割愛させて頂き、
CUI実行時のスクリーンショットを貼っておきます。
このような感じです。何となく先の説明と上記CUIのイメージがつながってきましたかね。
users というコレクションを作成。このコレクションにドキュメントを追加(insert)しています。
追加後に、users コレクションに対して検索(find)をかけています。
NoSQL データベース なので、SQL実行ではないですね。
SQLのWHERE句のように条件をつける場合は、どうするのでしょうか。
こちらも、CUI実行時のスクリーンショットを貼っておきます。
findの引数がありますね。findの引数が「{"address.state" : "NY"}」になっています。
ドキュメントの階層構造を意識した条件になっていますね。
「address配下のstateが"NY"のもの」という直感的な条件式ですね。
今回は、ドキュメント指向型のNoSQL データベース MongoDB を触ってみました。
monipet
動物病院の犬猫の見守りをサポート
病院を離れる夜間でも安心
ASSE/CORPA
センサー、IoT、ビッグデータを活用して新たな価値を創造
「できたらいいな」を「できる」に
OSGi対応 ECHONET Lite ミドルウェア
短納期HEMS開発をサポート!
GuruPlug
カードサイズ スマートサーバ
株式会社ジェイエスピー
横浜に拠点を置くソフトウェア開発・システム開発・
製品開発(monipet)、農業も手がけるIT企業
※いまごろ 何故、NoSQLなの? という疑問もありますが、
著者が触れたくなったのです。
MongoDB はC++言語で開発されたオープンソースのドキュメント指向データベースです。
ドキュメント指向データベースは、NoSQLに分類されるデータベースです。
NoSQLと言いますと、RDB(MS)ではないデータベースで、大きく分けて下記の分類のものがあります。
・キー・バリュー型(Key-Value Store型:KVS型)
・テーブル指向型
・ドキュメント指向型
※テーブル指向型は広義でKVS型の一種とされることもあります。
上記のうち、ドキュメント指向型に属す NoSQL データベースが MongoDB です。
RDBでは、レコードをテーブルで管理する構造となっていますが、
ドキュメント指向型ではドキュメントをコレクションで管理する構造となっています。
<RDBのレコード>
ドキュメント
<RDBのテーブル>
コレクション
<RDBのデータベース>
データベース
MongoDB は、JSONのような形式のドキュメントを管理します。
例えばこんなドキュメントです。
-----
{
username: "bob",
address: {
street: "123 Main Street",
sity: "Springfield"
state: "NY"
}
}
-----
このようなドキュメントを管理、操作できるデータベースが MongoDB です。
MongoDB もそうですが、ドキュメント指向型データベースでは、スキーマ定義が不要です。
MongoDB の場合は、上記のようなJSONライクな構造を決める事がスキーマ定義と同等の役割となります。
同等な役割にはなりますが、RDBのスキーマ定義の概念とは大きく異なる点があります。
テーブルのスキーマにあったレコードしか格納できないのがRDBでの当たり前ですが、ドキュメント指向型データベースの場合は、コレクション(RDBでいうテーブル)にスキーマの異なるドキュメントが格納可能です。
先のドキュメントを users というコレクションに格納したとします。
先に格納してあるドキュメントと構造を合わせなければと思いますが、MongoDB の場合は、次のように例えば「age」という先のドキュメントに存在しなかった要素を保持したドキュメントを格納することが可能です。
-----
{
username: "tom",
address: {
street: "123 Main Street",
sity: "Springfield"
state: "NY"
},
age: 18
}
-----
イメージはできましたね。
上記のドキュメントを、MongoDB のツール(CUI)を使って登録してみたいと思います。
MongoDB のインストールや、操作の詳細は割愛させて頂き、
CUI実行時のスクリーンショットを貼っておきます。
このような感じです。何となく先の説明と上記CUIのイメージがつながってきましたかね。
users というコレクションを作成。このコレクションにドキュメントを追加(insert)しています。
追加後に、users コレクションに対して検索(find)をかけています。
NoSQL データベース なので、SQL実行ではないですね。
SQLのWHERE句のように条件をつける場合は、どうするのでしょうか。
こちらも、CUI実行時のスクリーンショットを貼っておきます。
findの引数がありますね。findの引数が「{"address.state" : "NY"}」になっています。
ドキュメントの階層構造を意識した条件になっていますね。
「address配下のstateが"NY"のもの」という直感的な条件式ですね。
今回は、ドキュメント指向型のNoSQL データベース MongoDB を触ってみました。
monipet
動物病院の犬猫の見守りをサポート
病院を離れる夜間でも安心
ASSE/CORPA
センサー、IoT、ビッグデータを活用して新たな価値を創造
「できたらいいな」を「できる」に
OSGi対応 ECHONET Lite ミドルウェア
短納期HEMS開発をサポート!
GuruPlug
カードサイズ スマートサーバ
株式会社ジェイエスピー
横浜に拠点を置くソフトウェア開発・システム開発・
製品開発(monipet)、農業も手がけるIT企業