MongoDBについて簡単にまとめる
MongoDBのセミナーへ参加。その内容を備忘録としてまとめる。
MongoDBの前にNoSQLについて。
NoSQL
非構造データ、ビックデータ処理はRDBMSでは不向き。
そこで出てきたのがNoSQL
ちなみにここ2年で全データの9割が作られているとのこと。⇒ビックデータ
生成されるデータの8割が非構造データであるらしい。
ちなみに非構造データとは
情報を出す側で構造を変える。
よって非構造データは構造が変わるので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を知っている人であれば敷居は低いため。
NoSQL:数字以外の世界(非構造データ)
Hadoop:バッチ性の高い処理
そもそもの普及の背景にはRDBMSでは管理しにくデータが増えてきたこと。※決してRDBMSに置き換わるものではない。
RDBMSは設計とくにスキーマ設計にとても時間がかかっていた。
設計の違いでいうといかになる。
RDBMS:データの格納パターンに重きを置いている
NoSQL:データのアクセスパターンに重きを置いている(Read,Writeがどんな風に発生しているか)
アクセスは基本オンメモリ処理。よって安価なサーバを横にならべてスケールアップで拡張可能。アクセス頻度が低いものはSSDなどへ格納。
KVSとの違いは?
KVSは超シンプル(2値管理)。よって超高速処理むき。こちらはめっちゃとがった製品のイメージ。とがったといえばグラフ指向も(Neo4j)
逆にドキュメント指向はとてもわかりやすいもの。RDBMSとKVSのいいところ取りをしている感じ。
事例もいくつかあったが身近なところで、ログ管理で使ってみたいな。
Fluentdで収集してその保管先がMongoDBって事例がある。
この方の公開している資料が参考になります。