Kouhei Sutou
kou****@clear*****
2013年 7月 29日 (月) 23:31:33 JST
須藤です。 今日は肉の日ですね! groongaのRubyバインディングであるrroonga 3.0.5をリリースしま した。Windows版は今日リリースされたgroonga 3.0.6をバンドルし ています。 Web: http://ranguba.org/ja/#about-rroonga ○ rroongaとは rroongaはRubyらしい書き方でgroongaを操作できることを重視して います。同時に、groongaの速度をそのまま生かすことも大事にして います。 ○ 今回のリリースについて 今回のリリースではメモリープールという仕組みを導入しました。 (もしかしたら名前は変更するかも。ピンとこない名前だなぁとか 思ったら教えてください。) 何をする仕組みかというと、一時テーブルを自動で解放する仕組み です。RubyにはGCがあって一時テーブルは自動で解放されるはずな のにどうしてこの仕組みが必要かというと、もっとこまめに解放す るためです。こまめに解放することによりGC関連のオーバーヘッド が少なくなり、パフォーマンスがあがります。手元のほとんど groongaで処理をしているプログラムでは10%速くなりました。また、 最大メモリ使用量が減るというメリットもあります。 追加方は簡単で自動で位置テーブルで解放したい処理を Groonga::Context#push_memory_poolで囲むだけです。 before: table.select {...}.sort(...)... after: Groonga::Context.default.push_memory_pool do table.select {...}.sort(...)... end こうするとブロックを抜けたときにブロック内で作成した一時テー ブルを解放します。 リクエスト・レスポンス型のサービスをrroongaで作っている場合 は、レスポンス処理の部分をpush_memory_poolのブロックで囲むと よいでしょう。 例(るりまサーチ): https://github.com/clear-code/rurema-search/blob/master/lib/rurema_search/groonga_searcher.rb#L412 rroongaでもう少しメモリーにやさしくしたいなぁと思ったら試し てみてください。 ○ インストール % gem install rroonga ○ チュートリアル irbを使ったrroongaのチュートリアルがあります。 http://ranguba.org/rroonga/ja/file.tutorial.html はじめての方はまずこちらを試してみてください。 3.0.4からの変更点は以下の通りです。 http://ranguba.org/rroonga/ja/file.news.html#3-0-5 3.0.5: 2013-07-29 ================= 改善 ---- * [dumper] ダブル配列トライのダンプに対応。 * Int8/UInt8/Int16/UInt16型の値をRubyのオブジェクトへ変換で きるようにした。 [groonga-dev,01524][吉岡 真治さんが報告] * GCを簡単に減らすためのメモリープールという仕組みを追加し た。 Groonga::Context#push_memory_poolと Groonga::Context#pop_memory_pool が追加されています。以下 のようにすれば一時テーブルを自動的に閉じることができます。 context.push_memory_pool do # select、group、sortなどで一時テーブルを作成 end # 作成された一時テーブルは自動的に閉じられている * 32bit整数を超えるFixnumに対応。 [xtuaokさんが報告] 修正 ---- * [dumper] カラムのないテーブルがダンプされない問題を修正。 感謝 ---- * 吉岡 真治さん * xtuaokさん -- 須藤 功平 <kou****@clear*****> 株式会社クリアコード <http://www.clear-code.com/> (03-6231-7270) groongaサポート: http://groonga.org/ja/support/ パッチ採用はじめました: http://www.clear-code.com/recruitment/ コミットへのコメントサービスはじめました: http://www.clear-code.com/services/commit-comment.html