Rabbit Slide Show

第7回フクオカRuby大賞本審査資料:全文検索エンジンGroongaへのmrubyの組み込み

2015-01-23

Description

第7回フクオカRuby大賞本審査用の資料です。「全文検索エンジンGroongaへのmrubyの組み込み」という応募の説明です。 次の3つの項目を含んでいます。 (1) 特徴を表現するもの (2) Rubyを適用した箇所 (3) Rubyを活用したことによる効果、社会に及ぼす影響

Text

Page: 1

全文検索エンジン
Groongaへの
mrubyの組み込み
須藤功平
Groongaプロジェクト
第7回フクオカRuby大賞
2015-01-23
全文検索エンジン Groongaへの mrubyの組み込み
Powered by Rabbit 2.1.3

Page: 2

説明すること
1. 特徴
2. Rubyを適用した箇所
3. Rubyを活用したことによる
効果、社会に及ぼす影響
全文検索エンジン Groongaへの mrubyの組み込み
Powered by Rabbit 2.1.3

Page: 3

(1) 特徴
mrubyの使い方が
少し違う
全文検索エンジン Groongaへの mrubyの組み込み
Powered by Rabbit 2.1.3

Page: 4

使い方の分類
 主体
対象者
ユーザー
向け
開発者
向け
全文検索エンジン Groongaへの mrubyの組み込み
mruby
C
1 2
3 4
Powered by Rabbit 2.1.3

Page: 5

分類の補足
主体
メインの処理を実装する言語
あるいは
プログラムのエントリーポイントを
実装する言語
対象者
Rubyを書く人はだれか
全文検索エンジン Groongaへの mrubyの組み込み
Powered by Rabbit 2.1.3

Page: 6

よくある使い方
 主体
対象者
ユーザー
向け
開発者
向け
全文検索エンジン Groongaへの mrubyの組み込み
mruby
C
1 2
3 4
Powered by Rabbit 2.1.3

Page: 7

Groongaの使い方
 主体
対象者
ユーザー
向け
開発者
向け
全文検索エンジン Groongaへの mrubyの組み込み
mruby
C
1 2
3 4
Powered by Rabbit 2.1.3

Page: 8

よくある使い方(1)
ユーザー向け・mruby主体
ユーザーがRubyを書く・mrubyでメインの処理を実装
拡張性が高いアプリ
PCで動かすならCRubyでもよい
CRuby + バインディング
単体で配布可能なバイナリーを
作れることが便利
全文検索エンジン Groongaへの mrubyの組み込み
Powered by Rabbit 2.1.3

Page: 9

よくある使い方(2)
ユーザー向け・C主体
ユーザーがRubyを書く・Cでメインの処理を実装
プラグイン・設定
C側がマルチスレッドや
マルチプロセスでも組み込みやすい
CRubyだと難しい・面倒
シグナル・RUBY_INIT_STACK…
全文検索エンジン Groongaへの mrubyの組み込み
Powered by Rabbit 2.1.3

Page: 10

よくある使い方(3)
開発者向け・mruby主体
開発者がRubyを書く・mrubyでメインの処理を実装
組み込み環境向けアプリケーション
消費リソースが少なくてうれしい
開発速度があがる
CRuby感覚で使うと機能が少なくて
ツライ
全文検索エンジン Groongaへの mrubyの組み込み
Powered by Rabbit 2.1.3

Page: 11

Groongaの使い方
 主体
対象者
ユーザー
向け
開発者
向け
全文検索エンジン Groongaへの mrubyの組み込み
mruby
C
1 2
3 4
Powered by Rabbit 2.1.3

Page: 12

Groongaの使い方
開発者向け・C主体
開発者がRubyを書く・Cでメインの処理を実装
アプリ内のコア機能の一部を実装
開発速度があがる
mruby対応がそこそこ大変
バインディングの開発・ビルドシステムへの統合・
テストの仕組み…
全文検索エンジン Groongaへの mrubyの組み込み
Powered by Rabbit 2.1.3

Page: 13

開発者向け・C主体の使い方
使い所は難しい
仕組み作りを乗り越えられれば有用
仕組みできる→開発速度はあがる
難易度も高い
プロジェクト依存部分が大きい
Groongaの事例から一般化できるといいなぁ
全文検索エンジン Groongaへの mrubyの組み込み
Powered by Rabbit 2.1.3

Page: 14

(2) Rubyを適用した箇所
1. 特徴
2. Rubyを適用した箇所
3. Rubyを活用したことによる
効果、社会に及ぼす影響
全文検索エンジン Groongaへの mrubyの組み込み
Powered by Rabbit 2.1.3

Page: 15

コア機能の実装
クエリーオプティマイザー
予定:式のJIT化
全文検索エンジン Groongaへの mrubyの組み込み
Powered by Rabbit 2.1.3

Page: 16

クエリーオプティマイザー
クエリー
最適化
最適化された 全文検索
普通の検索
クエリー
クエリー
オプティマイザー
by Yukihiro Matsumoto
評価器
結果セット
全文検索エンジン Groongaへの mrubyの組み込み
Powered by Rabbit 2.1.3

Page: 17

例
10 <= x && x <= 20
10
10 <= x <= 20
20
10 <= x
最適化
10
20
x <= 20
&&
上限・下限を一度に評価
上限・下限を別に評価してAND
全文検索エンジン Groongaへの mrubyの組み込み
Powered by Rabbit 2.1.3

Page: 18

mrubyは割にあうか
最適化→10倍以上高速化も可
C→mrubyの速度低下は影響小
C→mrubyで開発速度向上
課題:GDBが使えない
→ppをmrubyに移植してなんとか…
全文検索エンジン Groongaへの mrubyの組み込み
Powered by Rabbit 2.1.3

Page: 19

予定:式のJIT化
クエリー
コンパイル
+ LLVM
by Yukihiro Matsumoto
クエリー専用
評価器
評価器を
実行
JITコンパイラー
API
結果セット
全文検索エンジン Groongaへの mrubyの組み込み
全文検索
普通の検索
Powered by Rabbit 2.1.3

Page: 20

(3) 影響
1. 特徴
2. Rubyを適用した箇所
3. Rubyを活用したことによる
効果、社会に及ぼす影響
全文検索エンジン Groongaへの mrubyの組み込み
Powered by Rabbit 2.1.3

Page: 21

影響(1)
「コア機能をRubyで実装」
という使い方の実例を示した
フリーソフトウェアなので
他のプロダクトは参考にできる
仕組み作りをできれば割にあう
→「技術支援」という仕事をしたい
全文検索エンジン Groongaへの mrubyの組み込み
Powered by Rabbit 2.1.3

Page: 22

影響(2)
mrubyがよくなる
開発中に見つけた問題は
直してパッチを送っている
全文検索エンジン Groongaへの mrubyの組み込み
Powered by Rabbit 2.1.3

Page: 23

まとめ
1. 特徴
類をみないmrubyの使い方
2. Rubyを適用した箇所
クエリーオプティマイザー
3. Rubyを活用したことによる
効果、社会に及ぼす影響
参考にできる・mrubyがよくなる
全文検索エンジン Groongaへの mrubyの組み込み
Powered by Rabbit 2.1.3

Other slides

Apache Arrow
2017-06-13
Apache Arrow
2017-05-28
Mroonga!
2015-10-30