読者です 読者をやめる 読者になる 読者になる

全文検索エンジンgroongaについて中の人に来ていただき社内勉強会をやった

groonga

とある案件で日本語の全文検索をする必要があり、MySQLを使っていることからTritonnを候補にしていたのだが、新規開発は行わず、groonga(グルンガ)という新しいプロダクトに引き継がれているという状況でした。

そこで、Tritonn&「groongaストレージエンジン(MySQL 5.1対応の全文検索エンジン)」の中の人である id:mirさんに来ていただき社内勉強会を開きました。
堅苦しい感じではなく、ざっくり現状をいろいろ聞く感じ。


「groonga」と「groongaストレージエンジン」を混同していたのですが、groonga本体は最近1.0がリリースされていたのですが、MySQL全文検索エンジンである「groongaストレージエンジン」は、まだ0.1でこれからという感じだそうです。
なので、案件に使うのは、2010/09/08現在では無理とのこと。


Tritonnの話は以前聞いたことがあったので、groongaの話をメインにしていただきました。

詳しくはサイト参照してください。
ちなみに、猫は開発者のぐにゃらくんの猫だそうですw

  • groonga本体は、Tritonnでも使用していた Sennaという組み込み型の全文検索エンジンの後継プロダクトで、検索機能だけではなく、ストレージの機能を合わせもったものです。
  • httpのサーバとして立てることとかできる jsonでやり取りができる
  • オリジナルプロトコルもある
  • memcachedのバイナリプロトコルもある
    • 作ってみたらテキストプロトコルの方がはやっていて バイナリプロトコルは流行っていないwという感じらしい


メインな売りは、リアルタイム インデックス更新。
ちょー大規模だったらgoogleさんとか買うとか他の手段がいろいろある。
でも、短時間でそれほど大規模じゃないシステムで簡単に管理コストも下げて というところに手軽に使えるというのがターゲットだそうです。


以前のTritonnでは、MyISAMをベースにしていたこともあり、更新時には検索もロックされてしまっていたが、groongaでは、更新時はテーブルロックがかかるのは同じだが、検索は更新中もOKとのこと。


言語バインディングとしては、ruby拡張とMySQL(groongaストレージエンジン)がある。


特徴いくつか

  • 「タンデム構成」という名前を付けていたが、別々の方式で同じデータを扱うことができる。
    • つまり、ruby拡張でデータを高速に登録しておいて、groongaストレージエンジンでSQLを使ってアクセスとかが出来る。
  • ドリルダウン
    • 検索で絞り込んだ先の件数が簡単に取れる
    • オフレコ 事例がある
  • データ量による更新スピードの劣化が少ない
    • Sennaの場合、データが数Gできつくなる 更新時に内部でコピーが発生する
      • Senna 二次関数的
      • groonga 一時関数的
  • NASでの共有はむり
    • nmap使っているので同一サーバ内で
  • ライセンスはLGPL
    • 「おとといLGPLになりました」(2010/9/8時点で)
  • yum aptで入れられる

groongaストレージエンジンの2010/9/8時点での現状

  • ヒットしたのが順不同で返ってくる
  • スコア無い
  • 年内に
    • マルチカラムなどができれば・・
    • Tritonn相当の機能を開発するのがまずは優先課題

あと、参考になったざっくり感覚

  • MySQLで like とかで検索するか、全文検索を導入する必要があるかの目安
    • 10MB切っていたら全文検索必要ない
    • 100MBだと頑張ればなんとかできなくはない
    • 1Gだと10秒とかかかる

けっきょく

Tritonnは先方の要件もありNGになったので、groongaを使って構築中です。
いくつかメモもあるので随時エントリあげようと思います。