狠狠撸

狠狠撸Share a Scribd company logo
Turbo Selector (grn_ts)
の紹介
未来検索ブラジル
矢田 晋
@s5yata
Turbo Selector
(grn_ts - ぐるんたす)
の概要
2015年11月29日(日) Groonga Meatup 2015
Grnxx の構想(旧プロジェクト)
次期 Groonga として開発
モダンな設計
オンメモリ ? 永続化サポートなし
シングルスレッド ? Groonga 非互換
列指向クエリエンジン ? 超高速
→ かなり高速化できるものの
Groonga の代替としては使えない
3
2015年11月29日(日) Groonga Meatup 2015
grn_ts の構想(現プロジェクト)
Groonga の検索用モジュールとして開発
モダンな設計
オンメモリ ? 永続化サポートなし
シングルスレッド ? Groonga 非互換
列指向クエリエンジン ? 超高速
→ Groonga の使い勝手はそのままに
検索を高速化する
4
2015年11月29日(日) Groonga Meatup 2015
grn_ts の位置づけ
5
Groonga
コマンド
MySQL
MariaDB
Mroonga
Ruby
ユーザ
Rroonga
etc.
データストアキー管理 転置索引
検索用モジュール(grn_ts)
今までどおり
2015年11月29日(日) Groonga Meatup 2015
grn_ts の目標
インタフェースはそのまま
→ アプリケーションは変更しなくて大丈夫
データストアや索引もそのまま
→ DB は作り直さなくて大丈夫
検索用モジュールを使い分け
→ 一部の検索クエリは高速化
6
現状における
できること?できないこと
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
デフォルトで有効になっていま
す
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
2015年11月29日(日) Groonga Meatup 2015
grn_ts でできないこと
使えないコマンド?引数
できること以外
引数の制限事項
filter 一部の演算のみサポート
索引の使用は未サポート
scorer 一部の演算のみサポート
sortby 一部の演算のみサポート
output_columns ベクタのベクタは未サポート
offset 負の値は未サポート
10
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
2015年11月29日(日) Groonga Meatup 2015
grn_ts 開発者からのお願い
ご意見?ご質問?ご感想などをお待ちしております
○○ できるようにして欲しい
○○ みたいな使い方で速くなる?
○○ みたいな情報が欲しい
○○ には使えそう?使えなさそう
○○ が期待する結果にならない
Twitter: @groonga, @s5yata
GitHub: https://github.com/groonga/groonga
ML: groonga-dev@lists.osdn.me
12
どのくらい速くなるのか
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
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
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
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
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
今后の予定
2015年11月29日(日) Groonga Meatup 2015
grn_ts の今後
現状
フィルタ?整列をサポート
整列は要改善
今后の予定
整列の効率化
索引のサポート
全文検索のサポート
ドリルダウンのサポート
※ ご意見?ご質問?ご感想などをお待ちしております
20

More Related Content

grn_ts の紹介 - Groonga Meatup 2015

  • 2. Turbo Selector (grn_ts - ぐるんたす) の概要
  • 3. 2015年11月29日(日) Groonga Meatup 2015 Grnxx の構想(旧プロジェクト) 次期 Groonga として開発 モダンな設計 オンメモリ ? 永続化サポートなし シングルスレッド ? Groonga 非互換 列指向クエリエンジン ? 超高速 → かなり高速化できるものの Groonga の代替としては使えない 3
  • 4. 2015年11月29日(日) Groonga Meatup 2015 grn_ts の構想(現プロジェクト) Groonga の検索用モジュールとして開発 モダンな設計 オンメモリ ? 永続化サポートなし シングルスレッド ? Groonga 非互換 列指向クエリエンジン ? 超高速 → Groonga の使い勝手はそのままに 検索を高速化する 4
  • 5. 2015年11月29日(日) Groonga Meatup 2015 grn_ts の位置づけ 5 Groonga コマンド MySQL MariaDB Mroonga Ruby ユーザ Rroonga etc. データストアキー管理 転置索引 検索用モジュール(grn_ts) 今までどおり
  • 6. 2015年11月29日(日) Groonga Meatup 2015 grn_ts の目標 インタフェースはそのまま → アプリケーションは変更しなくて大丈夫 データストアや索引もそのまま → DB は作り直さなくて大丈夫 検索用モジュールを使い分け → 一部の検索クエリは高速化 6
  • 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. 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. 2015年11月29日(日) Groonga Meatup 2015 grn_ts でできないこと 使えないコマンド?引数 できること以外 引数の制限事項 filter 一部の演算のみサポート 索引の使用は未サポート scorer 一部の演算のみサポート sortby 一部の演算のみサポート output_columns ベクタのベクタは未サポート offset 負の値は未サポート 10
  • 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. 2015年11月29日(日) Groonga Meatup 2015 grn_ts 開発者からのお願い ご意見?ご質問?ご感想などをお待ちしております ○○ できるようにして欲しい ○○ みたいな使い方で速くなる? ○○ みたいな情報が欲しい ○○ には使えそう?使えなさそう ○○ が期待する結果にならない Twitter: @groonga, @s5yata GitHub: https://github.com/groonga/groonga ML: groonga-dev@lists.osdn.me 12
  • 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. 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. 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. 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. 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
  • 20. 2015年11月29日(日) Groonga Meatup 2015 grn_ts の今後 現状 フィルタ?整列をサポート 整列は要改善 今后の予定 整列の効率化 索引のサポート 全文検索のサポート ドリルダウンのサポート ※ ご意見?ご質問?ご感想などをお待ちしております 20