[groonga-dev,03267] Re: Embulk-output-groongaの紹介と質問

Back to archive index

Kouhei Sutou kou****@clear*****
2015年 5月 21日 (木) 22:54:48 JST


須藤です。

In <CA+Tq-RqPPTwOZQgqq6tCp-TkhRfS6oybXwgAkokiVh=oQa03****@mail*****>
  "[groonga-dev,03254] Embulk-output-groongaの紹介と質問" on Wed, 20 May 2015 22:31:15 +0900,
  Hiroyuki Sato <hiroy****@gmail*****> wrote:

> embulk-command-outputというのを作成中です。紹介と質問です。
> https://github.com/hiroyuki-sato/embulk-output-groonga

すごい!
いやぁ、あるといいかなぁと思っていたんですよねぇ。

> Embulkとは
> 
>   Embulk(エンバルク)はプラガブルなバルクローダです。
>   CSVファイルをMySQLやPostgreSQLなどに簡単にインポートできるツールです
> 
>   これの出力先としてGroongaに出力できたらいいねと思い作ったのがこちらのプラグインです
> 
>   Embulkについてはこちらを参照ください。
>   http://www.embulk.org/docs/
>   http://qiita.com/hiroysato/items/397f36c4838a0a93e352
> 
> embulk-output-groongaの利用例
> 
>   まだ作りかけですが、簡単なデータの投入はできるようになっています。
>   (まだ文字列しかテストをしておりません)
> 
>>   https://gist.github.com/hiroyuki-sato/d62b42a8c48299b3f9d3
> 
>   次のようにコマンドを実行するとCSVファイルからデータを読み込んで
>   Groongaの指定したテーブルにデータを投入します。
> 
>      embulk run config.yml

おぉ、動いていますねぇ。

  https://github.com/hiroyuki-sato/embulk-output-groonga/blob/master/lib/embulk/output/groonga.rb#L84

はexist?のtypoかしら。


> 質問
>   groonga-clientなどのソースをみてぼちぼち書いておりますが
>   次のような情報があるとよいと思ったので質問をいたします。
> 
>   (1) 利用例について
>     groonga-clientのテーブルの作成や、カラムの作成などの例が載った
>     ソースはどこかにありますでしょうか?
>     例えばgroonga-clientを使ったアプリケーションなど

fluent-plugin-groongaというのがあって、それのoutputの方が参
考になると思います。

  https://github.com/groonga/fluent-plugin-groonga/blob/master/lib/fluent/plugin/out_groonga.rb

NetworkClient周辺を見るといいと思います。

もし、テーブル・カラムの自動作成までサポートするならSchema・
TableDefinition・TableCreater周辺をみるといいと思います。

>   (2) コマンドそのまま実行
> 
>     groonga-clientで、下記のような文字列を渡したら
>    コマンドをそのまま実行することは可能でしょうか?
> 
>     table_create --name Site2 --flags TABLE_HASH_KEY --key_type ShortText
>     column_create --table Site2 --name title --type ShortText

はい、実行できます。
bin/groonga-clientがあるんですが、そいつに流しこむと実行でき
ます。実装は

  https://github.com/ranguba/groonga-client/blob/master/lib/groonga/client/command-line/groonga-client.rb

にあります。

>   (3) エラーハンドリング
> 
>     返ってくるエラー処理の例などどこかにありますでしょうか?

fluent-plugin-groongaが参考になると思います。

基本的にGroonga::Client::Errorでrescueすればいいです。

> 課題
> 
> * groonga-command-parserのjruby対応(現在専用パッチを適用)
> * JSONのパースに、yaj-rubyの代わりにjson-streamを使ったがjson-streamは遅い。
> * 代替案としてjavaクライアントを利用する(誰かが作成していれば)

masterではffi-yajlを使うようにしたので試してみてください。
ffi-yajlだとJRubyでも動くとのことです。

groonga-command-parserの用途(JSON全体を一気にパースではなく、
大きなJSONをストリームとして少しずつパース)では、yajl-ruby
よりも高速になっているはずです。

手元でるりまサーチ(*)のダンプデータをパースして速度を見なが
ら作っていたんですが、それだとyajl-ruby版で33秒、ffi-yajl版
で5秒くらいでした。

(*) http://docs.ruby-lang.org/ja/search/


--
須藤功平 <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