Kouhei Sutou
kou****@clear*****
2015年 5月 15日 (金) 23:10:31 JST
須藤です。 In <CA+Tq-RoWWgN_onKT+****@mail*****> "[groonga-dev,03230] groonga-command-parser for jruby." on Thu, 14 May 2015 21:09:22 +0900, Hiroyuki Sato <hiroy****@gmail*****> wrote: > 諸般の事情で、groonga-clientをjrubyで使いたいと思っています。 > 残念ながら、groonga-comand-parserはjruby未対応のyajl-rubyに依存しています。 > > 代わりにjson-streamをjrubyの時だけ使ったらどうだろうということを考えました。 > おそらくjson-streamよりyajl-rubyの方がパースが速いためです > > だいぶ汚いのですが、yajlをjson-streamに置き換えて動くようにしてみました。 > rake testもとおりました。 > > 課題は次の二つです。 > ・gemspecで、crubyの時は、yajl-rubyを、jrubyの時はjson-steamを入れるようにしたい。 > 単純にパースする時は、JSON.parseを利用する。エンコードはto_jsonを使う。 > ・crubyの時は、yajlを、jrubyの時はjson-streamを使うようなパーサクラスに変更したい。 > > gemスペックはRUBY_PLATFORM =~ /java/ とかやれば上手くいくと思ったのですがうまくできませんでした > > ということを下手な英語で書きました。どなたか良い案がございましたらアドバイスをください。 > > https://github.com/groonga/groonga-command-parser/issues/1 yajl-rubyの場合とjson-streamの場合でベンチマークをとってもら えますか?もし、json-streamが十分速かったらjson-streamにしよ うと思います。 複数のJSONパーサーをサポートしてメンテナンスし続けるのはツラ そうなので1つにしたいです。。。 Groongaのコマンドは全部がJSONではなく、loadのためにに途中だ けJSONがでてくる、という構造になっています。それに対応するた めにゴニョゴニョやっているところがあるんですが、json-stream を使うことでそこをいい感じにできるならjson-streamの方が速く なる可能性もあるんじゃないかと思っています。 具体的には、json-streamに入力を投げ込むとJSONの終わりまでき たらそこで処理を終了して、余ったテキストを取り出せるようになっ ていると速くなるかもしれないと思っています。 https://github.com/groonga/groonga-command-parser/blob/master/lib/groonga/command/parser.rb#L219 json, separator, rest =****@buffe*****(/[\]},]/) あたりのコードがまるっとなくなるイメージです。 -- 須藤 功平 <kou****@clear*****> 株式会社クリアコード <http://www.clear-code.com/> Groongaベースの全文検索システムを総合サポート: http://groonga.org/ja/support/ パッチ採用 - プログラミングが楽しい人向けの採用プロセス: http://www.clear-code.com/recruitment/ プログラミングが好きな学生のための勉強会: http://www.seplus.jp/sezemi/