Groongaではdumpコマンドを利用すると、データベースのダンプを取ることができます。
8.3.14. dump — Groonga v3.1.0ドキュメント
しかし、ダンプするデータを一度メモリにロードする実装になっているようで、メモリが足りないとダンプできず困っていました。
そんなときにgrndump
を使うと良いという噂を目にしたので実験してみました。
hirose31
dumpコマンドはメモリ食うのでgrndumpでストリームなダンプとった方がいいらしい(要確認)
http://b.hatena.ne.jp/hirose31/20131114#bookmark-169201846
##grndumpとは
grndump
は以下の記事の後半にある通り、rroongaをインストールすると使えるようになるコマンドです。
groongaのデータベースをダンプ・リストアする方法 - Qiita [キータ]
Rubyがインストールされた環境であれば、以下のようにしてrroongaをインストールすることでgrndump
コマンドを利用できるようになります。
$ sudo apt-get install libgroonga-dev
$ sudo gem install rroonga
実験環境
実験環境として、VirtualBox + Vagrantで以下の環境を作りました。
- OS: Ubuntu 12.04 x86_64
- Groonga / rroonga: v3.1.0
- Memory: 512MB
- Swap: 512MB
ちょっとメモリが少なすぎますが、データベースサイズに対してメモリが少ない環境ということで。
実験内容
以下の2つのコマンドでダンプを取った時のメモリ消費量を比較します。
$ groonga db/db dump > dump-groonga-dump.grn
$ grndump db/db > dump-grndump.grn
なお、dumpしたいDBのサイズは5.6GBです。
$ du -sm db
5611 db
メモリ消費量の計測は以下のページを参考にしました。
特定プロセスのプロセスメモリ使用量の推移をとりつづける - runny egg’s diary
実験結果
結果は次のようになり、確かにgrndumpはメモリが少ない状況でも正常にダンプできました。
- dump:途中でKillされる
- grndump:正常に終了する
メモリ消費量をプロットすると、下図のようになりました。
##結論
現時点では、メモリが足りなくてdumpできないときにはrroongaのgrndump
を使うと良いです。他にもgrndump
は上で紹介した記事にあるように、いろいろなオプションがあり便利なコマンドです。
ちなみに、メモリが十分にあるときはGroongaのdumpのほうが速くダンプできました。Groongaのdumpでもストリームのダンプができるようになると嬉しいです。