11/29(火)に渋谷の株式会社VOYAGE GROUPさんにて行われた、全文検索エンジンgroongaを囲む夕べ 2にいってきたのでそのまとめと感想です。
おかしな部分や、追記した方がいいこと、誤字脱字ありましたらご指摘いただけると嬉しいです。スライドへのリンクも貼りますので、発表時のスライドを公開できる方はよろしければご連絡ください。
感想
Tech編
- grn_dat (ダブル配列)はgrn_patの代わりにMikodeで使えるかも。
- ぐるなびさんがどのようなサーバー構成でgroongaを使っているかが具体的に分かって良かった
- libgroonga, DB API, groongaコマンド, 各ライブラリの関係が分かってよかった
- RDBMSとSQLの基本や、最近のトレンドがざっくりと分かってよかった
- PostgreSQLのPGXN(Perlでいう所のCPANに相当するもの) はこなれてきたらすごく便利になりそう
- どのような基準でベンチマークを取れば、ソフトウェアのパフォーマンスを伝えられるかの参考になった 。特に横軸に検索負荷(クエリ数)、縦軸にスループットを取った棒グラフは分かりやすかった。
色々編
雑多メモ、groonga村
発表者 : 株式会社クリアコード 須藤さん
スライドへのリンク : コチラ
groonga、信念と収穫の祭り
発表者 : 有限会社未来検索ブラジル 森大二郎さん
来し方
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. ヒュペニ 楕円体上にて距離を算出
測地系?
構成
実際のパフォーマンス
54万件 3734件ヒット 0.34秒 → 転置インデックス使うと 0.03秒 (90%以上の高速化)
質問で出た話
- 障害の量はどうですか? → 今の所そんなに起きていない
- 壊れやすさ → プロセスが落ちても結構大丈夫。ロックは残ります。
- groongaサーバー3台、アプリ本体のサーバーとはhttp通信でやり取りする
- 3台には全て同じデータが入っており、データの同期ツールは独自に作成している模様
groonga with PostgreSQL
発表者 : フォルシア株式会社 板垣貴裕 奥野晃裕 さん
PostgreSQLについて
- Extensibility of PostgreSQL (PostgreSQLの拡張性)
- http://www.slideshare.net/HitoshiHarada/extensions-on-postgresql
- 拡張性が高いよー
- PGXNが出来た(Perlでいう所のCPANに相当するもの) 例. tinyint (1byteの整数型)
$ 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の未サポート機能について
- 0跨ぎの緯度経度
- トランザクション rollbackすると戻らない
坂井さんからみんなに質問
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にて
- 電車がなくなりそうだったので途中で帰りました
- 来年も参加したいです。