groongaを囲む夕べ

11/29の夜、渋谷へ行って 全文検索エンジンgroongaを囲む夕べ 3 @groonga : ATND に参加してきた。
とりあえず備忘のためのメモ。
それにしても発表者のgroongaへの愛の深さを感じるセッションが多かった。

groongaの紹介

  • 開発者からの話。
  • KVSはkey-valueペア
  • groongaは、keyからid、idからvalueを取り出す
  • tableはkey->id->keyの高速検索
  • columnは固有のデータ型を持つ。
  • DBを複数プロセスで共有可能。
    • コア数が多い環境に強い。リアルタイムウェブ向き。
  • クエリの計算量
  • key usec単位
  • index msec単位
  • fulltext 10-100ms単位
  • tablescan sec単位
  • 今後
    • スケーラビリティ向上、スケールアップ、スケールアウト
    • groonga++
      • 最大レコード数を一兆に!
      • MARISA-trieの組み込み(gzipより圧縮、高速検索)
    • レプリケーション
      • Spider + mroonga!
      • fluentdでsharding(試験実装)・・・node.jsを使ってる

 テストデータにWikipediaを使っている。

Mroonga 今年の収穫

広告配信システムでgroongaを使った話

  • rrongaを経由している。
  • なぜ、groongaを使ったのか。
    • 製品データを取り回しやすい。シンプルに実装できた。
    • DB用サーバを用意しなくていい。APサーバだけでおk
    • 導入コストが安い。

nanapiでの利用。

  • ハウツーを蓄積するWebサービス
    • tritonn→mroongaに更改
    • mroongaのwrapper modeを利用
  • nanapiでは記事の複数バージョンの保持が必要だった。
  • TokyoTyrantのようなKVSも併用
  • 検索サジェストの表示にもmroongaを使っている。
    • 階層が非常に深い(10000超)ディレクトリを持っている
    • 複合インデクスを利用
  • mroongaで困ったこと。
    • バグっぽい挙動があったが2.0.9で修正された。
  • mroongaにあるといいな
    • マルチセクションでの重み付け

rroongaで生放送コメントを検索(ニコ番)

  • rrongaを使った理由
  • selectクエリの話
    • 書き方に注意しないとハマる
  • 構成
    • コメント収集と検索専用システムに分けている。
    • groongaファイルに書き込みつつ検索も参照ロックフリーで。
  • groongaのMLも頼りにはなる。

外資就活ドットコムのサイト内検索

  • 当初はWordPressブログとして運用(検索もWordPress機能)
  • コンテンツ種類が増えたのでそこでgroongaを使うことにした。
  • 全文検索方式はN-gram
  • http_build_query()を利用。
  • スニペットやワードのハイライトはアプリケーション側で実装していた。

Milkodeでrroonga ソースコード検索エンジン

  • Mikodeの紹介
  • rroongaを使った理由
    • groongaがカラムストアだから
    • rroongaの配布が簡単。(gemで一発)
    • 日本語情報が豊富
  • rrroongaの使用方法
    • テキストファイル内の行の絞りこみをrronngaである程度行い、後はアプリコード内で特定
    • トークナイザは用途別に使うと効果的ということか。

アニメを録画した後の話しをします

  • Twitterまとめを使ったプレゼン。
  • 動画の検索
    • 1日60GB増えるデータ・・・
    • ファイル名や動画メタデータでは貧弱
    • 番組データ(出演者等)をgroongaに突っ込んで検索
  • 現状の検索システムの大半はテキスト検索に特化してないか?という不満から作った。
  • Rubyを使う場合は「とりあえずgroonga」はあり。
  • インプロセスDBとしてSQLiteの代替もあり?
  • 文書に対してインデクスを張る、というアイディアから離れる
  • そういえば技術プレゼンにアニメネタ使うな、と最初に宣言していたけど、検索デモのキーワードが思いっきりアニメの声優さんでワラタ。

mroongaを使った高速な対訳検索・ダウンロードシステム

  • Web系でないBI的な使い方
  • データは16GB、3500万件の日英対訳データ
  • Mroongaで全文検索
  • ユーザ要望
    • 300秒→5〜10秒にしろ!
  • システム構築
    • RAMDisk上にmroongaを構築
    • CPU数に応じてテーブルを分割
    • PHP、sh、mysqlの組み合わせ、8プロセスをバックグラウンドで実行しbashのwait→cat
    • こんなんでも100倍以上の高速化!(検索が2秒以下)

Amazon CloudSearch APIをgroongaで実装したら

  • Amazon CloudSearch
    • 今はまだベータ版
    • Amazon CloudSearchは有料・・・
    • 日本語データが格納できない・・・?
  • Amazon CloudSearch互換のAPIをgroongaをベースに!
    • OSS、日本語OK、無料!
    • 管理コンソールもあり(gcs)

そういえば、勉強会聞きながら手元の環境で11/29にリリースされたばかりのgroonga 2.0.9をビルド&インストールしてたんだけど、2.0.8で発生していたインストール時の問題が2.0.9では発生しなかった。いったい何だったんだろう・・・。>2.0.8でのインストール失敗