groonga 勉強会@VOYAGE GROUPに行ってきた
忘れないうちにメモ。
40分くらい遅れてしまったので、そこからの話。
mroonga
- 全文検索エンジン
- MySQLで使える => wrapper mode
- 位置情報での検索が出来る
- spider を使うとshardingできる => scaleout
- ruby on rails サポート
- maria DBにbundleされることになった
Geographical searching
- ぐるなびの人
- レストラン、地図、駅、GPSの検索
- 緯度軽度検索 - 2点間の座標から形成される矩形、または円形内のデータを検索する
- geo_in_rectangle(), geo_in_circle()
- 距離もわかる
- geo_distance() : 方形近似 - 精度が低く計算が速い
- geo_distance2() : 円形近似
- geo_distance3() : 楕円近似(ヒュベニ) - 精度が高く計算が遅い
- 測地系
* モデルにしている楕円体が違うのが理由
- 当初はパフォーマンスが悪かった
- => 転置インデックスの利用でパフォーマンス確保した
- 540,000件のデータでのパフォーマンス
* 0.34sec => 0.03sec
groonga with PostgreSQL
- Extensibility of PostgreSQL
- PostgreSQLは拡張性が高い
- function, data type, PL をすべて拡張できる
- index の拡張
- table も拡張できるようになった
- PGXN => CPANみたいな extension library
- > pgxn install tinyint でinstall 出来る
- > echo "CREATE EXTENSION tinyint;" > psql
- How to work with groonga
- textsearch_groonga
- fulltext search index in postgresql
- N-gram, 形態素解析の両方が可能
- > CREATE INDEX index ON table USING groonga (doc);
- groonga_fdw
- SQL/MED
- from SQL:2003 standard
- Foreign table/ DATALINK
mroonga のbenchmark
- MySQLでのパフォーマンス
- benchmark 項目
- 高速な全文検索
- 高速な位置情報検索
- 即時更新
- 全文検索機能パフォーマンス
- 位置情報検索
- 1Mのtweetが保存されているテーブルに20,000件のtweetを新たに追加する場合
- mroonga のでほうがむちゃくちゃ速い
- 検索しながらの更新でもパフォーマンスの低下が少ない
- 1000クエリ/sec でも0.5%くらいの低下
話が早くて追いきれなかった。。
mroonga未サポート機能
- UTF-8 のみサポート
- COLLATION はNFKCを使っているがMySQLのCOLLATIONは使えない
- condition pushdownは未サポート
- 点以外の空間情報はサポートしていない
- 要件募集中
- 0またぎの緯度経度の検索が出来ない
- 北極周辺とかはうまく検索できない
- 日本地図上は問題なし
- MySQL5.6で登場する一情報検索はサポートしていない
- ストレージモードでNULLは使えない
- InnoDBでトランザクションでrollbackすると、mroongaのindexが置き去りにされる
- repair table は未サポート groonga は修復されない
- parallel searching by spiderはできない
groonga開発予報
- 本日リリース 1.2.8
- grn_dat : ダブル配列 => 参照最速、前方一致検索、参照ロックフリー
- grn_pat : パトリシアトライ => 前方一致検索
- grn_hash : ハッシュ表 => 速いけど前方一致をサポートしない
- 文字列更新をサポートしている
- 前方一致検索
- Common Prefix Search
- Predictive Search
- 参照メインのデータの処理に使いなさい
- benchmark
- wikipedia title 1M件
- ランダム登録からの参照 => grn_pat より30%くらい速い
- 更新は遅くなった
- メモリ消費は2倍くらいになる
- 今後
- 頻出語のキャッシュ機能
- grn_hashの構築時間の修正
- アクセスの少ないデータを圧縮する機能
Q&Aタイム
- Q. benchmark に使用したindexのタイプを教えてほしい
- Q. ぐるなびでの使用は障害対応、原因を教えてください
- A. 20QPS x 3 で運用しているが、障害は起きてない
- A. 緯度経度検索のバグはある
- Q. データの壊れやすさって。。
- A. 現状の実装ではプロセス停止では壊れないけどKernelが落ちるとやばいかも
- A. プロセス停止時にはmemory corruptionが心配
- Q. groonga を3台で動かす方法
- A. データは同じデータを持っている
- A. 参照はHTTPでgroongaと通信していて、Load Balancerを使っている
- A. 更新はバックグラウンドプロセスで3台一緒に更新している
半分くらいの人が使ってた。業務ベースでは10人未満