[groonga-dev,03237] Re: groonga-command-parser for jruby.

Back to archive index

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/




groonga-dev メーリングリストの案内
Back to archive index