全文検索エンジンgroongaがつなぐコミュニティの輪

EnterpriseZine / 2012年12月12日 0時0分

「いいにくの日」(11月29日)に開催する「全文検索エンジンgroongaを囲む夕べ 3 @groonga」は今年で3年目を迎えた。groongaを通じてMySQLやRubyなど、分野が異なる複数のオープンソースコミュニティメンバーが集う日でもある。今年は利用事例の発表が中心となった。

 まずはgroongaとはなにか。端的に言えば、オープンソースでカラムストア機能がついた全文検索エンジンである。「Senna」というオープンソースの組み込み型全文検索エンジンの後継にあたる。基本的にはCのライブラリ、またはHTTPでアクセスできる全文検索サーバーとして使用する。更新が頻繁に生じる環境で高速な全文検索が求められる場面に強い。

 groongaは単体で使うほかに、関連プロジェクトと組み合わせると使い方が広がるのも大きな特徴である。関連プロジェクトは「groongaファミリー」、「*roonga族」などと呼ばれている。

 いま主要なファミリーは4つ。まず1つめは検索エンジン「groonga」(ぐるんが)。2つめはデータベースという側面をいかしたRDBMSのストレージエンジン。主にMySQLのストレージエンジン「mroonga」(むるんが)がある。3つめはRubyのライブラリ「rroonga」(るるんが)、4つめはNode.jsのライブラリ「nroonga」(ぬるんが)。

 groonga開発者である未来検索ブラジルの森大二郎さんはgroongaのコアについて「KVSはkey-valueがペアになっているが、groongaのデータモデルはkey←→id、id→valueとなっている。またgroongaにおけるテーブルとは(RDBMSのテーブルとは異なり)key←→idを高速に検索(変換)するモジュールである。ハッシュ表やトライなどで実装されている。一方テーブルとは別に、それぞれが固有のデータ構造を持つカラムが存在していている。これにより複数のカラムを持つことができ、多様なデータ構造を表現できるようになっている」と説明。またデータベースを複数プロセスで共有可能となっていることや、更新処理は先に述べたテーブルやカラム単位でアトミックに実行できるのも特徴だ。これで更新と検索の性能が両立できている。

 ただしこの多様な側面はgroonga初心者にとって「どう使い分けるべきか?」と悩みの種でもある。森さんはヒントとして「クエリごとに計算量が異なる」とし、処理時間の違いを示した。短い順にキー参照(usec単位)、インデックス参照(msec単位)、全文検索(10m~100msec)、テーブルスキャン(sec単位)と単位が異なる。KVS的に使うなら低レイヤのAPI(例えばrroonga)、全文検索ならHTTP経由のアクセス(groonga)ということになりそうだ。

EnterpriseZine

この記事に関連するニュース

トピックスRSS

ランキング