SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

EnterpriseZine(エンタープライズジン)編集部では、情報システム担当、セキュリティ担当の方々向けに、EnterpriseZine Day、Security Online Day、DataTechという、3つのイベントを開催しております。それぞれ編集部独自の切り口で、業界トレンドや最新事例を網羅。最新の動向を知ることができる場として、好評を得ています。

直近開催のイベントはこちら!

EnterpriseZine編集部ではイベントを随時開催しております

EnterpriseZine(エンタープライズジン)編集部では、情報システム担当、セキュリティ担当の方々向けの講座「EnterpriseZine Academy」や、すべてのITパーソンに向けた「新エバンジェリスト養成講座」などの講座を企画しています。EnterpriseZine編集部ならではの切り口・企画・講師セレクトで、明日を担うIT人材の育成をミッションに展開しております。

お申し込み受付中!

DB Press

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


「いいにくの日」(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開発者である
未来検索ブラジルの森大二郎さん

 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)ということになりそうだ。

 将来的にはスケールアップとスケールアウトのいずれも取り組む。スケールアップは「groonga++」で最大レコード数を1000倍の1兆にまで拡大するとのこと。スケールアウトはMySQLユーザー向けにはSpiderとmroongaの組み合わせがあり、ほかにもfluentdでレプリケーションだけではなくシャーディングもできないかと「絶賛実験中」だそうだ。

 今回の勉強会はコンパクトなユーザー事例が次々と報告された。特にrroongaの事例が目立った。rroongaだと低レイヤのAPIが使えるためか、速さを求められられるシステムで採用されることが多いようだ。例えばVOYAGE GROUPで使われる広告配信システム、ニコニコ生放送のリアルタイムコメント検索の「ニコ番」、ソースコード検索エンジン「Milkode」などが紹介された。

 ニコ番を開発した「てみた」さんは、当初「ニコ生のコメントを使えば人力の地震速報ができるのでは」という構想を抱いた。キーボードに手を置いているユーザーの声を拾えば速くて確実ということだ。しかしそれを実現するにはワードの抽出やプッシュ配信という機能を持たせなくてはならない。

 「KVSのような検索エンジンがほしい。動的に構築できて、かつ高速に検索できるもの。どうせならRubyでいろいろと試したい」と思っていたところ、rroongaが条件にうまく合った。チュートリアルが分かりやすかったのも良かったそうだ。そうしてできたのが「ニコ番」だそうだ。

 Milkodeは2万ファイル程度であれば、1秒以内に目的の行を検索できるとのこと。開発した「ongaeshi(おんがえし)」さんはgroongaとrroongaを使う良さとして、groongaにはカラムストア(データベース)機能があるため、groongaをインストールすれば別途データベースをインストールする必要がないこと、Rubyだけで書けること、ローカル検索にも強いことを挙げた。

 mroongaの事例にはnanapiの和田さんが登場した。今では検索のサジェストにmroongaを使っている。サイトの上部に表示される検索バーにキーワードを入力すると表示されるものだ。例えば「恋愛」と入力すると「恋愛のハウツー」、「恋愛トラブルの対処法」など関連するカテゴリがサジェストされる。もともとnanapiでは記事やカテゴリにはMySQLを使っていたため、mroongaは相性がよかった。MySQLとの相性と即座に検索結果を返せるという要件がうまくはまった。

 最後は「しだら」さんが「もしgroongaがAmazon CloudSearch互換のAPIだったら」というタイトルで発表。Amazonが提供するクラウド型の検索サービスとしてAmazon CloudSearchがある。これの互換APIとしてGroonga CloudSearchを紹介した。当然オープンソースであり、無料である。現時点ではおおよそのクライアントライブラリは使えるとのこと。ソースはgithubにある。

 groongaは毎月29日に最新版をリリースしている。来年も「いいにくの日」にイベントを開催する予定だ。毎年コミュニティの輪が広がり、groongaやそのファミリーの特性を生かした事例が増えてきている。勉強会では参加者のgroongaへの愛着が感じられ、オープンソースコミュニティらしいオープンで創造的な雰囲気に満ちている。来年も楽しみだ。

この記事は参考になりましたか?

  • Facebook
  • Twitter
  • Pocket
  • note
DB Press連載記事一覧

もっと読む

この記事の著者

加山 恵美(カヤマ エミ)

EnterpriseZine/Security Online キュレーターフリーランスライター。茨城大学理学部卒。金融機関のシステム子会社でシステムエンジニアを経験した後にIT系のライターとして独立。エンジニア視点で記事を提供していきたい。EnterpriseZine/DB Online の取材・記事も担当しています。Webサイト:https://emiekayama.net

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

EnterpriseZine(エンタープライズジン)
https://enterprisezine.jp/article/detail/4419 2012/12/12 12:52

Job Board

AD

おすすめ

アクセスランキング

アクセスランキング

イベント

EnterpriseZine(エンタープライズジン)編集部では、情報システム担当、セキュリティ担当の方々向けに、EnterpriseZine Day、Security Online Day、DataTechという、3つのイベントを開催しております。それぞれ編集部独自の切り口で、業界トレンドや最新事例を網羅。最新の動向を知ることができる場として、好評を得ています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング