Kouhei Sutou
kou****@clear*****
2014年 12月 27日 (土) 15:33:59 JST
須藤です。
WindowsでGroongaを使っている人に動作確認のお願いがあります。
Windows版のGroongaではカラムを作るといきなり大きめのサイズ
(128MiB)のファイルを作ります。そのため、10個カラムを作ると
1.25GiBのストレージを消費します。それぞれのカラムに128MiBく
らいのデータを入れる場合は無駄な領域はそれほどないのですが、
数KiBくらいしかデータをいれないときは結構無駄な領域になりま
す。
なお、Windows以外の環境、例えばGNU/Linuxの環境、ではいきなり
大きめのサイズのファイルを作らず、必要に応じて徐々に追加して
いきます。
Windowsでもそのような挙動の方がストレージの使用効率がよくな
ります。で、実は、ソースの中にはそれを実現するためのコードが
あるのですが、無効になっています。手元で試した感じ(*)ではそ
れっぽく動いてそうなのですが、不安なので、他にもWindowsで
Groongaを使っている人に動作確認をして欲しいのです。
WindowsでGroongaまたはRroongaを使っている人は協力してもらえ
ないでしょうか?
協力してくれる方は後述する手順を試してその結果を教えて欲しい
です。
(*) Cygwinで次のようにして確認した。
$ mkdir -p db
$ cat load.rb
puts "table_create logs TABLE_NO_KEY"
puts "column_create logs message COLUMN_SCALAR Text"
puts "load --table logs"
puts "["
100000.times do |i|
puts "{\"message\": \"#{i.to_s * 1000}\"}"
end
puts "]"
$ ruby load.rb | groonga-4.0.8-x64-reduce-db-size/bin/groonga.exe -n db/db
$ ls -lah db
total 1.3G
drwxr-xr-x+ 1 kou None 0 Dec 27 06:06 .
drwxr-xr-x+ 1 kou None 0 Dec 27 06:05 ..
-rwxr-xr-x 1 kou None 64K Dec 27 06:05 db
-rwxr-xr-x 1 kou None 21M Dec 27 06:05 db.0000000
-rwxr-xr-x 1 kou None 17M Dec 27 06:06 db.0000100
-rwxr-xr-x 1 kou None 1021M Dec 27 06:06 db.0000101
-rwxr-xr-x 1 kou None 232M Dec 27 06:07 db.0000101.001
-rwxr-xr-x 1 kou None 1.0M Dec 27 06:05 db.001
たとえば、↑のdb.0000101(logsテーブルのファイル)のサイ
ズが17Mとなっていて128MiBより小さい。
他にも、db.0000101(messagesカラムのファイル)のサイズが
1GiBまで増えている。既存のGroongaでは128MiBのファイルば
かりになる。
試し方
------
1. http://packages.groonga.org/tmp/groonga-4.0.8-x64-reduce-db-size.zip
をダウンロードして展開する。
2. Rroongaの人はRroongaのgemのディレクトリーの中のvendor\local\
以下を↑で置き換える。
3. 新しくデータベースを作成する。
注意:このGroongaは既存のデータベースと互換性がないので、
既存のデータベースは使わないでください。壊れるかもしれ
ません。
4. いつもと同じ使い方をする。
→既存のGroongaと同じ挙動だったか教えてください。
→もしわかるなら次のことも教えて欲しいです。
* 複数のプロセスから同じデータベースを開いたか
* 複数のスレッドで同じデータベースにアクセスしたか
* データの書き込みをしたか参照だけだったか
期待する挙動:既存のGroongaと同じ挙動。
5. データベースのサイズを確認する。
→データベースのサイズを教えてください。前述の私が試し
たときの確認方法のようにファイル名とファイルサイズが入っ
たリストになっていればOKです。(Cygwinをインストールし
てlsを使う必要はありません。)
今後の予定
----------
もし、試してもらった結果で問題がないことが確認できたら、既存
のテーブル・カラムを使うときはこれまでと同じ挙動(最初に
128MiBを確保する)、新しいテーブル・カラムを作ったらそれらは
新しい挙動(必要に応じて徐々に大きくする)で動くようにしよう
と思っています。
つまり、後方互換性を維持しよう(新しいGroongaでも古いGroonga
で作ったデータベースを開ける)と思います。
一方、前方互換性は維持しない(新しいGroongaで作ったデータベー
スは古いGroongaで使えない)予定です。
WindowsでのGroongaユーザーのみなさん、協力おねがいします!
--
須藤 功平 <kou****@clear*****>
株式会社クリアコード <http://www.clear-code.com/>
Groongaベースの全文検索システムを総合サポート:
http://groonga.org/ja/support/
パッチ採用 - プログラミングが楽しい人向けの採用プロセス:
http://www.clear-code.com/recruitment/
コードリーダー育成支援 - 自然とリーダブルコードを書くチームへ:
http://www.clear-code.com/services/code-reader/