Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
Turbo Selector (grn_ts)
の紹介
未来検索ブラジル
矢田 晋
@s5yata
Turbo Selector
(grn_ts - ぐるんたす)
の概要
2015年11月29日(日) Groonga Meatup 2015
Grnxx の構想(旧プロジェクト)
次期 Groonga として開発
モダンな設計
オンメモリ ☒ 永続化サポートなし
シングルスレッド ☒ Groonga 非互換
列指向...
2015年11月29日(日) Groonga Meatup 2015
grn_ts の構想(現プロジェクト)
Groonga の検索用モジュールとして開発
モダンな設計
オンメモリ ☒ 永続化サポートなし
シングルスレッド ☒ Groonga ...
2015年11月29日(日) Groonga Meatup 2015
grn_ts の位置づけ
5
Groonga
コマンド
MySQL
MariaDB
Mroonga
Ruby
ユーザ
Rroonga
etc.
データストアキー管理 転置索引...
2015年11月29日(日) Groonga Meatup 2015
grn_ts の目標
インタフェースはそのまま
→ アプリケーションは変更しなくて大丈夫
データストアや索引もそのまま
→ DB は作り直さなくて大丈夫
検索用モジュールを使...
現状における
できること・できないこと
2015年11月29日(日) Groonga Meatup 2015
grn_ts の使い方
ビルド時にマクロ GRN_WITH_TS を定義
$ ./configure CFLAGS="-g -O2 -DGRN_WITH_TS"
$ make...
2015年11月29日(日) Groonga Meatup 2015
grn_ts でできること
使えるコマンド
select
使える引数と例
--filter ‘?X && Y < 50 || Z > 50’
--scorer ‘_score...
2015年11月29日(日) Groonga Meatup 2015
grn_ts でできないこと
使えないコマンド・引数
できること以外
引数の制限事項
filter 一部の演算のみサポート
索引の使用は未サポート
scorer 一部の演算の...
2015年11月29日(日) Groonga Meatup 2015
grn_ts でできること(裏技)
カラム同士の比較
--filter ‘?X < Y && Y < Z’
演算結果による整列
--sortby ‘X + Y, -(Z + ...
2015年11月29日(日) Groonga Meatup 2015
grn_ts 開発者からのお願い
ご意見・ご質問・ご感想などをお待ちしております
○○ できるようにして欲しい
○○ みたいな使い方で速くなる?
○○ みたいな情報が欲しい
...
どのくらい速くなるのか
2015年11月29日(日) Groonga Meatup 2015
実験設定
実験環境
CPU: Core i7 3720QM, RAM: 4GB
Ubuntu 15.10 on VMWare Fusion 8.0.2
実験データ
1,000...
2015年11月29日(日) Groonga Meatup 2015
実験結果(--filter, Bool)
キャッシュを無効にしてベストタイムを計測
select Table --filter ‘???’ --limit 0
15
??? ...
2015年11月29日(日) Groonga Meatup 2015
実験結果(--filter, Int64)
キャッシュを無効にしてベストタイムを計測
select Table --filter ‘???’ --limit 0
16
???...
2015年11月29日(日) Groonga Meatup 2015
実験結果(--filter, Text)
キャッシュを無効にしてベストタイムを計測
select Table --filter ‘???’ --limit 0
17
??? ...
2015年11月29日(日) Groonga Meatup 2015
実験結果(--sortby)
キャッシュを無効にしてベストタイムを計測
select Table --sortby ‘???’ --limit 1
18
??? 従来[秒] ...
今後の予定
2015年11月29日(日) Groonga Meatup 2015
grn_ts の今後
現状
フィルタ・整列をサポート
整列は要改善
今後の予定
整列の効率化
索引のサポート
全文検索のサポート
ドリルダウンのサポート
※ ご意見・ご質問・...
Upcoming SlideShare
Loading in …5
×

grn_ts の紹介 - Groonga Meatup 2015

1,018 views

Published on

Groonga に追加された新しい検索用モジュール grn_ts を紹介します.

Published in: Software
  • Be the first to comment

  • Be the first to like this

grn_ts の紹介 - Groonga Meatup 2015

  1. 1. Turbo Selector (grn_ts) の紹介 未来検索ブラジル 矢田 晋 @s5yata
  2. 2. Turbo Selector (grn_ts - ぐるんたす) の概要
  3. 3. 2015年11月29日(日) Groonga Meatup 2015 Grnxx の構想(旧プロジェクト) 次期 Groonga として開発 モダンな設計 オンメモリ ☒ 永続化サポートなし シングルスレッド ☒ Groonga 非互換 列指向クエリエンジン ☑ 超高速 → かなり高速化できるものの Groonga の代替としては使えない 3
  4. 4. 2015年11月29日(日) Groonga Meatup 2015 grn_ts の構想(現プロジェクト) Groonga の検索用モジュールとして開発 モダンな設計 オンメモリ ☒ 永続化サポートなし シングルスレッド ☒ Groonga 非互換 列指向クエリエンジン ☑ 超高速 → Groonga の使い勝手はそのままに 検索を高速化する 4
  5. 5. 2015年11月29日(日) Groonga Meatup 2015 grn_ts の位置づけ 5 Groonga コマンド MySQL MariaDB Mroonga Ruby ユーザ Rroonga etc. データストアキー管理 転置索引 検索用モジュール(grn_ts) 今までどおり
  6. 6. 2015年11月29日(日) Groonga Meatup 2015 grn_ts の目標 インタフェースはそのまま → アプリケーションは変更しなくて大丈夫 データストアや索引もそのまま → DB は作り直さなくて大丈夫 検索用モジュールを使い分け → 一部の検索クエリは高速化 6
  7. 7. 現状における できること・できないこと
  8. 8. 2015年11月29日(日) Groonga Meatup 2015 grn_ts の使い方 ビルド時にマクロ GRN_WITH_TS を定義 $ ./configure CFLAGS="-g -O2 -DGRN_WITH_TS" $ make フィルタの先頭に ‘?’ を挿入 $ groonga tmp/db > select Items --filter ‘?X < 50 && Y < 50’ … [...] http://groonga.org/ja/blog/2015/10/22/grn_ts.html (参考) 8 デフォルトで有効になっていま す
  9. 9. 2015年11月29日(日) Groonga Meatup 2015 grn_ts でできること 使えるコマンド select 使える引数と例 --filter ‘?X && Y < 50 || Z > 50’ --scorer ‘_score = X + Y * Z’ --sortby ‘X, -Y, Z’ --output_columns ‘_id, _score, X, Y, Z’ --offset 10 --limit 10 9
  10. 10. 2015年11月29日(日) Groonga Meatup 2015 grn_ts でできないこと 使えないコマンド・引数 できること以外 引数の制限事項 filter 一部の演算のみサポート 索引の使用は未サポート scorer 一部の演算のみサポート sortby 一部の演算のみサポート output_columns ベクタのベクタは未サポート offset 負の値は未サポート 10
  11. 11. 2015年11月29日(日) Groonga Meatup 2015 grn_ts でできること(裏技) カラム同士の比較 --filter ‘?X < Y && Y < Z’ 演算結果による整列 --sortby ‘X + Y, -(Z + Y)’ ※ 先頭の ‘-’ は降順にする記号扱いなので注意 演算結果の出力 --output_columns ‘_id, X + Y, Z / 100.0’ ※ 仕様として決まっているわけではありません 実装の都合や皆様のご意見により変わる可能性があります 11
  12. 12. 2015年11月29日(日) Groonga Meatup 2015 grn_ts 開発者からのお願い ご意見・ご質問・ご感想などをお待ちしております ○○ できるようにして欲しい ○○ みたいな使い方で速くなる? ○○ みたいな情報が欲しい ○○ には使えそう・使えなさそう ○○ が期待する結果にならない Twitter: @groonga, @s5yata GitHub: https://github.com/groonga/groonga ML: groonga-dev@lists.osdn.me 12
  13. 13. どのくらい速くなるのか
  14. 14. 2015年11月29日(日) Groonga Meatup 2015 実験設定 実験環境 CPU: Core i7 3720QM, RAM: 4GB Ubuntu 15.10 on VMWare Fusion 8.0.2 実験データ 1,000 万行 データは擬似乱数により生成 Bool: false or true Int64: [0, 100) Text: 長さ [4, 8] の大文字アルファベット列 14
  15. 15. 2015年11月29日(日) Groonga Meatup 2015 実験結果(--filter, Bool) キャッシュを無効にしてベストタイムを計測 select Table --filter ‘???’ --limit 0 15 ??? 従来[秒] grn_ts[秒] X 1.839 0.162 X && Y 2.608 0.214 X && Y && Z 3.303 0.240 X || Y 2.637 0.240 X || Y || Z 3.523 0.298
  16. 16. 2015年11月29日(日) Groonga Meatup 2015 実験結果(--filter, Int64) キャッシュを無効にしてベストタイムを計測 select Table --filter ‘???’ --limit 0 16 ??? 従来[秒] grn_ts[秒] X < 1 1.777 0.134 X < 10 1.919 0.141 X < 99 2.300 0.132 X + Y + Z < 150 3.863 0.283 X < Y N/A 0.207
  17. 17. 2015年11月29日(日) Groonga Meatup 2015 実験結果(--filter, Text) キャッシュを無効にしてベストタイムを計測 select Table --filter ‘???’ --limit 0 17 ??? 従来[秒] grn_ts[秒] X < “B” 2.066 0.529 X < “N” 2.433 0.554 X < “Z” 2.579 0.519 X < “N” && Y < “N” 3.544 0.805 X < Y && Y < Z N/A 1.506
  18. 18. 2015年11月29日(日) Groonga Meatup 2015 実験結果(--sortby) キャッシュを無効にしてベストタイムを計測 select Table --sortby ‘???’ --limit 1 18 ??? 従来[秒] grn_ts[秒] IntX 0.560 0.298 IntX, IntY 0.665 0.304 IntX + IntY N/A 0.383 TextX 0.652 0.795 IntX, TextX 0.691 0.256
  19. 19. 今後の予定
  20. 20. 2015年11月29日(日) Groonga Meatup 2015 grn_ts の今後 現状 フィルタ・整列をサポート 整列は要改善 今後の予定 整列の効率化 索引のサポート 全文検索のサポート ドリルダウンのサポート ※ ご意見・ご質問・ご感想などをお待ちしております 20

×