丸の内 MongoDB 勉強会 #22 に行ってきましたので,内容メモ書き.
個人的な興味の濃淡で記載の厚さも変えていますがご容赦ください.
勉強会詳細
https://mongonouchi.doorkeeper.jp/events/26940
ハンズオンと最近開催された MongoDB World のサマリーについて.特に MongoDB の特長の話やハンズオンについては,最新の v3.0 についての話あり.
Part1: MongoDB とは & MongoDB Hands-on
今回の勉強会主催の渡部徹太郎さん (@fetarodc) による MongoDB の概要説明と,各自の持参したノートブックを通じてのハンズオン.
MongoDB のキホン
以下のスライドを元に渡部さんがトーク.
http://www.slideshare.net/tetsutarowatanabe/mongo-db-32210761
ほとんどスライドに書いてある通りだが,気になったのは以下.
- NoSQL と一口に言っても KVS, カラムナー,グラフなど様々あるが,最近になって多くのデータストアプロダクトがドキュメント型なテイストを取り入れている.(ex. DynamoDB, MySQL, PostgreSQL)
- ドキュメント DB の中でも,MongoDB は動的にクエリを打てる (SQL のように,その場で書いて実行できる).しかし CouchDB などは静的なデータ問い合わせしかできない.(予め MapReduce ロジックを準備しておく必要がある.起動する前にデプロイが必要になるようなイメージ?)
- ドキュメント型 DB だと KVS と違って階層構造を持った表現力もあり,なおかつスキーマレス.例えば病院の統合で病院ごとにカルテのスキーマが違っても,共通するキーは共通させ,統合元の病院ごとに固有の列はそのままにする,みたいなことができる.
- ドキュメント DB はその取っ付き易さ故,最近アメリカでは「SQL は出来ないけど MongoDB は触れる」っていう若者が出てき始めているらしい.
MongoDB ハンズオン (と,実務でのつまりどころなどの Q&A)
以下のスライドのコマンドを打ちながら渡部さんがレクチャー.その後 Q&A が 20 分ほど.(渡部さんいわく,Q&A がここまで盛り上がったのは初めてだったらしい)
https://github.com/syokenz/marunouchi-mongodb/blob/master/20150716/fetarodc/README.md
気になった点をいくつか.
WiredTiger を使うには?
3.0 から WiredTiger ストレージエンジンが利用可能になった.MongoDB 3.0 で WiredTiger を使うには,mongod
の初回起動時にオプションを付せば良い.
WiredTiger とドキュメントのリロケーション
MongoDB 2.6 までは,一度挿入されたドキュメントが update されてデータ量が肥大化して当初確保した領域に入りきらなくなった場合にリロケーションが起きる.
WiredTiger を使うと,このリロケーションが起きなくなるらしい.(ここの仕組みの詳細は渡部さんも知らないみたいだった)
今回の勉強会の参加者の中には,MongoDB 2.6 以前で db.myCollection.find()
でカーソルを取得した後にリロケーションが起きて,カーソルを進めていくと同じドキュメントが2回登場する,という事故に遭遇した人がいたようだが,2.6 のリロケーションが原因の可能性が高い様子.
WiredTiger と圧縮
WiredTiger はディスクに書き込まれるデータの圧縮も行う.
ドキュメント型 DB はドキュメントごとに列情報を保存する分,従来の RDB と同じ構造のデータを保存した場合には数倍のストレージの食い方をするのがザラだとか.そのため,データ圧縮はある意味必須.渡部さんの実験では 1GB のデータが 50MB に圧縮されたらしい.(詳細はこちら を参照.)
MongoDB の定期保守
MongoDBの 2.6 までは,先述したリロケーションによるフラグメンテーションに対処しなければならず,オフラインのタイミングでデータのコンプレッションを行う必要があった.これは「MongoDB あるある」として有名.
WiredTiger になるとこの問題は生じないのも前述のとおりだが,その代わりに何か定期保守としてオペレーションが必要になるのかどうかは今のところ分かっていない.
いろいろあるけど WiredTiger が "Highly Recommended" っぽい.
長くなってしまったので,後編は別途書きます.