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