mongodb3でドキュメントの圧縮が可能になる
mongoは、私の好きなプロダクトの一つだ。ただひとつ困ったことがあって、あれもこれもと入れていくと、ディスクサイズが増えがちだということだ。
mongodbは3から今までのストレージエンジンmmapv1と併用して、WiredTigerというストレージエンジンを選べるようになった。
こちらの記事によると
ドキュメントロックになり、書き込み性能7〜10倍UP
ドキュメント圧縮が選べるようになり、最大80%圧縮
とのこと。私の場合、スクレイプしたデータの保存場所に、mongoを使うことが多いので、ドキュメントの圧縮が効くというのはすごく魅力的だ。ドキュメントを圧縮出来るので、昔ながらのHDDではなく(小容量だが速度が早い)SSDに保存も可能になった。
ubuntuにmongodb3を入れる
ubuntu14.04にmongodbを入れた。入れ方はこちらの記事を参考。
特に迷うことなくmongodbが入る。変更点は、/etc/mongodb.confから/etc/mongod.confに名前が変わる。yaml表記が可能になるの2点だ。
mongodb3で圧縮を有効にしたconf
圧縮方式はsnappyにした。こちらの記事で速度と圧縮率でバランスがとれていると感じたからだ。
confファイルは次のようにした。こちらの記事を参考にした。
storage:
dbPath: "/var/lib/mongodb/wt"
engine: "wiredTiger"
wiredTiger:
collectionConfig:
blockCompressor: "snappy"
engineConfig:
cacheSizeGB: 1
statisticsLogDelaySecs: 5
journalCompressor: "snappy"
directoryForIndexes: true
systemLog:
destination: file
path: "/var/log/mongodb/mongodb_wt.log"
logAppend: true
storage:
journal:
enabled: true
net:
bindIp: 127.0.0.1
port: 27017
mongodb如何にwtディレクトリを掘ってデータを格納する。wtの所有者はmongodbにしておくと良い。
効果測定
mongodb2で250GB程度のコレクションを、読み込んでみてどの程度圧縮されるか検証した。
mmapv1
従来のmmapv1は251GBあった。
ubuntu@xxx/var/lib/mongodb$ du -h
3.1G ./journal
251G .
wiredtiger
wiredtigerでは、約53GBだった。大体1/5になり、当初書かれていた様に80%削減出来た。
ubuntu@xxxxxxxxx:/var/lib/mongodb/wt$ du -h
201M ./journal
48G ./collection
4.0K ./_tmp
4.7G ./index
53G .
読み込み速度
圧縮した分、速度低下が起こるかと思ったが、ざっと触ってみたところ、速度低下はなかった。
webサイトのスクレイパー向き
個人的によくwebサイトのスクレイピングをするが、そのような用途ではすぐディスクサイズが圧迫される。webサイトは多種多様な形式のため、あまりカラム型で圧縮も難しい。wiredtigerは手軽に容量を1/5に圧縮できるので、そのような用途では良いかもしれない。、