MongoDBについて簡単にまとめる

MongoDBのセミナーへ参加。その内容を備忘録としてまとめる。

 

MongoDBの前にNoSQLについて。

NoSQL

 非構造データ、ビックデータ処理はRDBMSでは不向き。

 そこで出てきたのがNoSQL

 ちなみにここ2年で全データの9割が作られているとのこと。⇒ビックデータ

 生成されるデータの8割が非構造データであるらしい。

 

ちなみに非構造データとは

 情報を出す側で構造を変える。

 RDBMSは、最初に構造を定義する必要がある(スキーマ

 よって非構造データは構造が変わるのでRDMBSでの管理は不向きになる。

 最初は管理できても構造が変わればスキーマを拡張。列がめっちゃ増えるってことか。

 

RDBMSは、スケールアップでは性能限界がくるしスケールアウトもできなくないがコストがめっちゃ高くなる(Oracle クラスタなど?)

そんな背景もあってNoSQLが登場。

 

MongoDBとは

 ドキュメント指向型のデータベース。

 ちなみに、列指向型がKVSとなる。

 ドキュメント指向=JSONで扱う。

 JSON(階層型データ)とは、軽量なデータ交換フォーマット。

 XMLシンプルで読みやすい。(JSONとかあんまり詳しくない。。。)

 

 MongoDBを一言でいうとRDBMSとKVSのいいところどり。

 KVSに比べてリッチなデータモデル。ちなみにKVSは2値。

 RDBMSのようにインデックスも張れる。DynamoDBもはれるが5つまでと制限があるとのこと。

 

 RDBMSと比較して強いところは、水平分散(シャーディング)が得意なのと複製が簡単であること。

 つまりは、水平と垂直両方が得意ってことらしい。

 

 あと、セットアップが非常に簡単である。

 RDBMSを使ってた人が使いやすいように作られている。

 (セットアップの容易さと分かりやすさをめっちゃアピールしてました。)

 

 MMS(MongoDB管理サービス)なんてのもある。

 

 注意点は以下。

  トランザクションが無い

  外部キー、結合がない

  スキーマがない

  集計分散はしない

  ※いくつかアンチパターンもあるもよう。こちらは導入時には注意が必要。

   特にシャーディングキーの設計は重要。(シャードキー)

   でないと一つのノードに負荷集中してだんだん遅くなるってのもあるとのこと。

 

MongoDBはクラウドでの利用が多い。それはアジャイル的な利用に向いているから。

テーブル設計などせずにすぐに、簡単に始められるってこと。またRDBMSを知っている人であれば敷居は低いため。

 

RDBMS:数字の世界(構造データ、トランザクション

NoSQL:数字以外の世界(非構造データ)

Hadoop:バッチ性の高い処理

 

そもそもの普及の背景にはRDBMSでは管理しにくデータが増えてきたこと。※決してRDBMSに置き換わるものではない。

RDBMSは設計とくにスキーマ設計にとても時間がかかっていた。

設計の違いでいうといかになる。

 RDBMS:データの格納パターンに重きを置いている

 NoSQL:データのアクセスパターンに重きを置いている(Read,Writeがどんな風に発生しているか)

 

アクセスは基本オンメモリ処理。よって安価なサーバを横にならべてスケールアップで拡張可能。アクセス頻度が低いものはSSDなどへ格納。

 

KVSとの違いは?

 KVSは超シンプル(2値管理)。よって超高速処理むき。こちらはめっちゃとがった製品のイメージ。とがったといえばグラフ指向も(Neo4j)

 逆にドキュメント指向はとてもわかりやすいもの。RDBMSとKVSのいいところ取りをしている感じ。

 

事例もいくつかあったが身近なところで、ログ管理で使ってみたいな。

Fluentdで収集してその保管先がMongoDBって事例がある。

 

この方の公開している資料が参考になります。

初心者向けMongoDBのキホン!