全文検索エンジンgroongaを囲む夕べ 2、まとめ

11/29(火)に渋谷の株式会社VOYAGE GROUPさんにて行われた、全文検索エンジンgroongaを囲む夕べ 2にいってきたのでそのまとめと感想です。

おかしな部分や、追記した方がいいこと、誤字脱字ありましたらご指摘いただけると嬉しいです。スライドへのリンクも貼りますので、発表時のスライドを公開できる方はよろしければご連絡ください。

感想

Tech編

  • grn_dat (ダブル配列)はgrn_patの代わりにMikodeで使えるかも。
  • ぐるなびさんがどのようなサーバー構成でgroongaを使っているかが具体的に分かって良かった
  • libgroonga, DB API, groongaコマンド, 各ライブラリの関係が分かってよかった
  • RDBMSSQLの基本や、最近のトレンドがざっくりと分かってよかった
  • PostgreSQLのPGXN(Perlでいう所のCPANに相当するもの) はこなれてきたらすごく便利になりそう
  • どのような基準でベンチマークを取れば、ソフトウェアのパフォーマンスを伝えられるかの参考になった 。特に横軸に検索負荷(クエリ数)、縦軸にスループットを取った棒グラフは分かりやすかった。

色々編

  • Milkodeのことを知っている方がいて嬉しかった。
  • プレゼンスライドの下で、リアルタイムにTwitterのタイムラインが表示されているのがすごかった。Rabbitの機能?
  • スライドのページ送りをiPhoneでやっていて格好よかった。そういうアプリがあるのかな?
  • 司会の坂井さんが大人数を上手く回していて格好よかった。
  • ブラジルの森さんや、クリアコードの須藤さんに久しぶりにお会い出来て嬉しかった。

雑多メモ、groonga村

発表者 : 株式会社クリアコード 須藤さん
スライドへのリンク : コチラ

  • libgroonga, DB, groongaコマンド、各ライブラリ関係がよく分かった (スライド18ページを参考)
  • ベンチマークをとることがあればデータを教えてくれると嬉しい。
  • スライドのページ送りをiPhoneでやってた。
  • Rabbitでスライド作ってる、下につぶやきが表示されている、すごい!!

groonga、信念と収穫の祭り

発表者 : 有限会社未来検索ブラジル 森大二郎さん

来し方

  • 2005年2月にSennaをリリース
  • 2chを検索するために開発
  • 全板のカキコを即時検索可能に
  • 当時から同的構築を即時反映
  • 静的構築と動的構築

groongaに改名してからは

  • カラムストア機能を追加

参考

現在

  • カラムストア
  • 静的構築も作っている
  • MySQL ALTER TABLE
  • Sedue groonga plugin

行く末

  • カラムストアの機能強化
  • 参照回数による圧縮
  • 頻出パターン抽出
  • 開発者募集

質問

  • なんでnode.js作ったの? (グニャラ君)
  • httpより柔軟なWeb Socketとか使いたい

mroongaのご紹介

発表者 : 斯波健徳 さん

更新が混在しても、高速な全文検索

MySQLの概念図

------------------------------
クライアント
コネクションプール
perser
ストレージエンジンAPI
MyISAM InnoDB Spider groonga
------------------------------

ラッパーモード

  • 他のストレージエンジンを使ったり、NULLカラムが使えたりする

ここ一年の成果

  • auto_increment
  • ラッパーモード COMMENT='engine myisam'
  • 全文検索用パーサーカスタマイズ COMMENT='parser "TokenMecab"'
  • rename/alter tableが可能に ruby on rails でもバッチリです。
  • 他のストレージエンジンとの連携 Spider(データベースを分割できる), VP

今後の予定

  • MariaDBにバンドルされます

まとめ

  • 更新と参照が混在する用途に強い
  • Spiderと組み合わせて、shardingすることでスケールアウト
  • ruby on rails でも使えるよ

Geographical Searching

発表者 : 株式会社ぐるなび 塩畑公一さん

2008年6月に検索システム再構築

  • 商用パッケージからオープンソース
  • groonga 0.8 から使っている
  • 2010年04〜現在 groongaを利用したサービス開始

緯度経度検索機能の実現 矩形と円形

  • 矩形 geo_in_rectangle()
  • 円形 中心と半径 geo_in_circle()

距離が欲しい

  • a. 方形近似 geo_distance()
  • b. 球面近似 地球儀上にて距離を geo_distance2()
  • c. ヒュペニ 楕円体上にて距離を算出

測地系

構成

  • DDLの構成も紹介してた(メモしきれなかった・・残念)
  • スペック Xeon 2.0GHz x 4
  • 実際はサーバーを立てて、アプリ側はhttpでアクセスする?

実際のパフォーマンス

54万件
3734件ヒット
0.34秒                → 転置インデックス使うと 0.03秒  (90%以上の高速化)

質問で出た話

  • 障害の量はどうですか? → 今の所そんなに起きていない
  • 壊れやすさ → プロセスが落ちても結構大丈夫。ロックは残ります。
  • groongaサーバー3台、アプリ本体のサーバーとはhttp通信でやり取りする
  • 3台には全て同じデータが入っており、データの同期ツールは独自に作成している模様

groonga with PostgreSQL

発表者 : フォルシア株式会社 板垣貴裕 奥野晃裕 さん

PostgreSQLについて

$ pgxn install tinyint
$ psql
# CREATE EXTENTION tinyint;

textsearch_groongaについて

  • 一番シンプルなやつ、index検索にgroongaを使う

groonga_fwdについて

  • SQLの外部データとして、groongaデータベースにアクセスする
  • SQL/MED (外部のデータをどう扱うか?)
  • FWD .. Foregign Data Wrapper
  • 外部データとして、Oracle, MySQL, Twitter などにアクセスする仕組み
Parser -> Planner -> Executer -> Internal Data
                   +----------------+------> Foreign Data

mroongaのベンチマーク

発表者 : 斯波健徳さん / 株式会社クリアコード 須藤功平さん

mroongaの特徴

  • 高速な全文検索
  • 高速な位置情報検索機能
  • 即時更新

それらを検証するためにとったデータ

  • 約100万件のtweetに対して1万回のフレーズ検索にかかった時間
  • 約1100万件の番地データに対して千回のMBRContaints + ORDER BY検索にかかった時間
  • 約1100万件の番地データに対して千回のMBRContaints SELECT 1検索にかかった時間
  • 98万件のtweetが保存されている状態で2万件のtweetを追加した時の更新スループット
  • 更新スループットが縦、検索負荷(クエリ数)、水平なほど負荷に強い

mroongaの未サポート機能について

坂井さんからみんなに質問

groonga使ってる?

業務で使ってる 5%
遊びで使った 50%
これから使う   40%

groonga開発予報

発表者 : 有限会社未来検索ブラジル 矢田晋さん
資料 : groonga - grn_dat - 参照ロックフリーなダブル配列

参照ロック不要なダブル配列について

  • groonga1.2.8ではgrn_datが含まれています
  • ダブル配列
  • 文字列をIDと関連づけるモジュール
  • grn_pat, grn_hash の仲間

grn_datの特徴

  • grn_pat .. 前方一致検索が出来る
  • grn_hash .. 前方一致検索をサポートしない代わりに高速
  • grn_dat .. 前方一致検索をサポートし、高速
  • 更新速度、サイズが少し弱い
  • 前方が一致する候補を全て表示する
  • 文字列更新
  • 参考資料 : 参照ロックフリーなダブル配列

ベンチマークテスト

  • jawiki-20111111-all-titles-in-ns0
  • 先頭の100万件を使用

ベンチマーク

  • 参照時間
  • 更新時間
  • メモリ使用量

今後の作業

  • 頻出する索引後をキャッシュしたい
  • 不安定な構築時間の安定化
  • 見る機会の少ないデータを圧縮 marisa

懇親会

  • VOYAGEのAJITOにて
  • 電車がなくなりそうだったので途中で帰りました
  • 来年も参加したいです。