SlideShare a Scribd company logo
1 of 55
Download to read offline
Rubyを使った 
分散全文検索ミドルウェア 
須藤功平 
株式会社クリアコード 
RubyWorld Conference 2014 
2014/11/13 
Rubyを使った分散全文検索ミドルウェアPowered by Rabbit 2.1.4
趣意書 
Rubyを 
普通の人々に 
浸透させたい! 
Rubyを使った分散全文検索ミドルウェアPowered by Rabbit 2.1.4
この発表の内容 
浸透促進案の 
提案 
Rubyを使った分散全文検索ミドルウェアPowered by Rabbit 2.1.4
浸透対象の普通の人々 
よくプログラムを書く人 
✓ただしRubyとは縁遠い 
✓→よくRubyを書くようになる 
✓ 
たまにプログラムを書く人 
✓インフラの人とか 
✓→たまにRubyを書くようになる 
✓ 
Rubyを使った分散全文検索ミドルウェアPowered by Rabbit 2.1.4
浸透方法 
技術的な攻め方 
✓多機能・高機能・高性能 
✓他よりいいですよ 
✓ 
心理的・政治的な攻め方 
✓流行り 
✓「みんな」使っていますよ 
✓ 
Rubyを使った分散全文検索ミドルウェアPowered by Rabbit 2.1.4
提案方針 
技術的な攻め方 
✓多機能・高機能・高性能 
✓他よりいいですよ 
✓ 
心理的・政治的な攻め方 
✓流行り 
✓「みんな」使っていますよ 
✓ 
Rubyを使った分散全文検索ミドルウェアPowered by Rabbit 2.1.4
流行っている状態 
シェアを独占している 
キラーアプリがある 
✓例:Ruby on Rails 
✓ 
有用アプリの多くがRuby製 
例:Chef, Puppet, Vagrant, 
Serverspec 
✓ 
✓ 
Rubyを使った分散全文検索ミドルウェアPowered by Rabbit 2.1.4
キラーアプリは難しい 
シェアを独占している 
キラーアプリがある 
✓例:Ruby on Rails 
✓ 
有用アプリの多くがRuby製 
例:Chef, Puppet, Vagrant, 
Serverspec 
✓ 
✓ 
Rubyを使った分散全文検索ミドルウェアPowered by Rabbit 2.1.4
多有用アプリ状況を目指す 
Ruby製アプリ使う 
✓Ruby製アプリを優先して選ぶ 
✓使っていることを広くアピール 
✓ 
Ruby製アプリを作る 
✓そこそこ有用で十分 
✓たくさん作る 
✓ 
Rubyを使った分散全文検索ミドルウェアPowered by Rabbit 2.1.4
Ruby製アプリ作りを促す 
成功事例(きっかけ) 
✓後続が真似したくなればよい 
✓そんなに流行らなくてもよい 
✓ 
開発ノウハウ(助け) 
✓後続が開発しやすくなる 
✓ライブラリー化されていると尚よし 
✓ 
Rubyを使った分散全文検索ミドルウェアPowered by Rabbit 2.1.4
どんなアプリがよいか 
ミドルウェア 
↓ 
自作のアプリは 
好きな言語で書ける 
(言語による採用障壁が低め) 
(例:RabbitMQはErlang製だがアプリはErlang以外が多い) 
Rubyを使った分散全文検索ミドルウェアPowered by Rabbit 2.1.4
ミドルウェア 
✓データストア(RDBMSやKVS) 
✓検索システム 
✓メールシステム 
✓メッセージキュー 
✓ログ活用(分析や監視) 
Rubyを使った分散全文検索ミドルウェアPowered by Rabbit 2.1.4
Rubyでミドルウェア 
成功事例 
✓Fluentd, ROMA 
✓milter manager 
分散全文検索エンジンを開発中 
(Droonga) 
✓ 
✓ 
開発ノウハウ 
✓→これから紹介 
✓ 
Rubyを使った分散全文検索ミドルウェアPowered by Rabbit 2.1.4
開発ノウハウ:方針 
トレードオフと向き合う 
✓どこを強みにするか 
✓どこは競合と戦わないか 
✓ 
全方位で勝つことはできない 
✓Rubyだって速さじゃCに勝てない 
✓でも楽しさならCに勝てる 
✓ 
Rubyを使った分散全文検索ミドルウェアPowered by Rabbit 2.1.4
強みの選び方 
✓使いやすさで勝負する 
✓最高速で勝負しない 
✓多機能で勝負しない 
Rubyを使った分散全文検索ミドルウェアPowered by Rabbit 2.1.4
ミドルウェアの使いやすさ 
導入・設定・運用の簡単さ 
✓多くのミドルウェアは大変←ヒント 
✓例:設定なしで動くと簡単 
✓ 
止めないことが前提 
✓無停止で設定再読み込み 
✓無停止でアップグレード 
✓ 
Rubyを使った分散全文検索ミドルウェアPowered by Rabbit 2.1.4
強みの選び方 - 使いやすさ 
使いやすさで勝負する 
✓ユーザーの手間を減らす 
✓かゆいところに手が届く 
✓ 
✓最高速で勝負しない 
✓多機能で勝負しない 
Rubyを使った分散全文検索ミドルウェアPowered by Rabbit 2.1.4
性能 
最高速は目指さない 
✓C/C++とかJavaに負ける 
✓ 
十分な速度は目指す 
ミドルウェアが 
ボトルネックにならない程度 
✓ 
✓ 
Rubyを使った分散全文検索ミドルウェアPowered by Rabbit 2.1.4
ミドルウェアと性能 
ミドルウェア=サーバー 
✓並行処理をいかにがんばるか 
✓ 
評価基準 
✓レイテンシー(1リクエストに注目) 
✓スループット(単位時間に注目) 
✓ 
Rubyを使った分散全文検索ミドルウェアPowered by Rabbit 2.1.4
ボトルネックの解消方法 
なりやすい箇所 
✓CPU 
✓ネットワーク 
✓ 
なるかもしれない箇所 
✓I/Oとメモリー 
✓ 
Rubyを使った分散全文検索ミドルウェアPowered by Rabbit 2.1.4
CPUネック 
✓処理を減らす 
マルチプロセス 
✓後述 
✓ 
Cで拡張ライブラリーを書く 
✓Fluentd: MessagePack 
✓Droonga: MessagePack, Groonga 
✓ 
Rubyを使った分散全文検索ミドルウェアPowered by Rabbit 2.1.4
マルチプロセス実装 
ServerEngine(ライブラリー) 
✓nスレッド+シグナル+fork(spawn) 
✓ 
Droonga 
✓1スレッド+パイプ+spawn+イベントループ 
✓↑の方がオススメ 
✓ 
Rubyを使った分散全文検索ミドルウェアPowered by Rabbit 2.1.4
ServerEngine 
Process Thread 
Supervisor 
fork Worker 
heartbeat 
signal 
Logging 
Heartbeat 
Signal 
Worker 
Worker 
Rubyを使った分散全文検索ミドルウェアPowered by Rabbit 2.1.4
ServerEngineモデル1 
✓基本はSupervisor→Worker 
gracefulな再起動をしにくい 
(無停止で設定再読み込みできれば必要ない) 
✓新Workerの準備完了を知れない 
✓ 
✓無停止アップグレード× 
Rubyを使った分散全文検索ミドルウェアPowered by Rabbit 2.1.4
ServerEngineモデル2 
スレッドは難しい 
エラーをちゃんと処理しないと 
問題を見逃す 
✓ 
✓ 
シグナルは難しい 
✓終了中に何度でもSIGINT 
✓ 
✓forkは難しい 
Rubyを使った分散全文検索ミドルウェアPowered by Rabbit 2.1.4
ServerEngineモデル3 
✓ライブラリー化していてえらい 
Rubyを使った分散全文検索ミドルウェアPowered by Rabbit 2.1.4
Droonga 
Process Event loop 
Supervisor 
spawn Worker 
pipe 
command 
Worker 
Worker 
(ready) 
(stop) 
Rubyを使った分散全文検索ミドルウェアPowered by Rabbit 2.1.4
Droongaモデル1 
✓通信はSupervisor↔Worker 
gracefulな再起動をしやすい 
新Workerが準備完了 
→Supervisorに通知 
→旧Workerをgracefulに終了 
✓ 
✓ 
✓無停止更新ができる 
Rubyを使った分散全文検索ミドルウェアPowered by Rabbit 2.1.4
Droongaモデル2 
シンプルになる 
✓1スレッド・シグナルなし 
✓stop中にn回stopがこない 
✓終了処理中に割り込まれない 
✓ 
✓イベント駆動は複雑 
Rubyを使った分散全文検索ミドルウェアPowered by Rabbit 2.1.4
ネットワークネック 
通信量を減らす 
データを減らす(ムリなら圧縮) 
(LZ4で十分ならLZ4、ムリならzlib) 
✓ 
✓ 
ノンブロッキングI/Oと多重化 
✓拡張ライブラリー必須 
✓→Cool.io, nio4r, EventMachine 
✓イベント駆動なコードは複雑 
✓ 
Rubyを使った分散全文検索ミドルウェアPowered by Rabbit 2.1.4
イベント駆動なコード 
Coolio::TCPServer.new(HOST, PORT) do |client| 
n_reads = 0 
client.on_read do |data| 
p data 
client.write(data) 
n_reads += 1 
if n_reads == 2 
client.on_write_complete {client.close} 
end 
end 
end 
Rubyを使った分散全文検索ミドルウェアPowered by Rabbit 2.1.4
同期っぽく書けるAPI 
Coolio::TCPServer.new(HOST, PORT) do |client| 
Fiber.run do # <- 並行にしたい処理を明示 
client.extend(Synchronizable) # <- 42行 
2.times do 
data = client.read 
p data 
client.write(data) 
end 
client.close 
end 
end 
Rubyを使った分散全文検索ミドルウェアPowered by Rabbit 2.1.4
同期っぽく書けるAPI 
ユーザーがFiberを書くのが 
カッコ悪い 
✓ 
同期っぽい中で 
並行に処理したくなったら? 
✓pubsubっぽいことをしたいとか 
✓ 
Rubyを使った分散全文検索ミドルウェアPowered by Rabbit 2.1.4
Promiseな世界 
server.accept.then do |client| 
client.read.then do |data| 
p data 
client.write(data) 
end.then do 
client.close 
end 
end.catch do |error| 
end 
Rubyを使った分散全文検索ミドルウェアPowered by Rabbit 2.1.4
Promiseな世界 
✓繰り返しを書きにくい 
✓メソッドチェーンがカッコ悪い 
✓catchがカッコ悪い 
Rubyを使った分散全文検索ミドルウェアPowered by Rabbit 2.1.4
API案:基本 
# 同期っぽいAPI 
clinet = server.accept 
# 非同期API 
server.accept do |request| 
begin 
client = request.socket 
rescue 
end 
end 
Rubyを使った分散全文検索ミドルウェアPowered by Rabbit 2.1.4
API案:組み合わせ 
server.accept do |request| 
client = request.socket 
2.times do 
data = client.read 
p data 
client.write(data) 
end 
client.close 
end 
Rubyを使った分散全文検索ミドルウェアPowered by Rabbit 2.1.4
API案 
✓Fiberが見えない 
書き方の組み合わせが自然 
✓ブロックなし→同期っぽいAPI 
✓ブロックあり→非同期API 
✓ 
✓実装していない 
Rubyを使った分散全文検索ミドルウェアPowered by Rabbit 2.1.4
I/Oとメモリーネック 
データストアをCで書く 
✓Droonga: Groonga 
✓ROMA: Tokyo Cabinet, SQLite3 
✓ 
コアの機能もCで書く 
✓データコピーも減らしたいとき 
✓ 
Rubyを使った分散全文検索ミドルウェアPowered by Rabbit 2.1.4
強みの選び方 - 性能 
✓使いやすさで勝負する 
最高速で勝負しない 
✓でも、十分な速度は目指す 
✓ボトルネックにならなければよい 
✓ 
✓多機能で勝負しない 
Rubyを使った分散全文検索ミドルウェアPowered by Rabbit 2.1.4
機能 
多機能をウリにしない 
✓多機能だと遅くなる(ことが多い) 
✓ 
組み込みの機能より拡張性 
✓→プラグイン機能 
✓Fluentd, ROMA, Droonga 
✓ 
Rubyを使った分散全文検索ミドルウェアPowered by Rabbit 2.1.4
プラグイン機能のポイント 
開発者向け 
✓作りやすい 
✓テストしやすい 
✓リリースしやすい 
✓ 
ユーザー向け 
✓インストールしやすい 
✓設定しやすい 
✓ 
Rubyを使った分散全文検索ミドルウェアPowered by Rabbit 2.1.4
開発者向け 
作りやすさ 
✓scaffoldいらずのAPI 
✓ 
テストしやすさ 
✓ドライバー・スタブを提供 
✓ 
リリースしやすさ 
✓gem 
✓ 
Rubyを使った分散全文検索ミドルウェアPowered by Rabbit 2.1.4
ユーザー向け 
インストールのしやすさ 
Rubyをそんなに知らない前提なのに 
直接gemを使ってもらうのってアリ? 
✓ 
✓ 
設定のしやすさ 
✓できるだけ少なく 
✓できればno configuration 
✓ 
Rubyを使った分散全文検索ミドルウェアPowered by Rabbit 2.1.4
強みの選び方 - 機能 
✓使いやすさで勝負する 
✓最高速で勝負しない 
多機能で勝負しない 
✓組込機能よりも簡単拡張で勝負 
✓Ruby初心者でも開発できる簡単さ 
→プラグイン開発でRubyデビュー 
(tDiaryスタイルのRuby浸透方法) 
✓ 
✓ 
Rubyを使った分散全文検索ミドルウェアPowered by Rabbit 2.1.4
まとめ1 
趣意書 
✓Rubyを浸透させたい! 
✓ 
この発表 
✓浸透促進案の提案 
✓ミドルウェア分野での促進案 
✓ 
Rubyを使った分散全文検索ミドルウェアPowered by Rabbit 2.1.4
まとめ2:促進案 
たくさんの人が使う 
他の方がよさそうでも 
Ruby製を優先して使う 
✓ 
✓使っていることを広める 
✓ 
✓たくさん作る 
Rubyを使った分散全文検索ミドルウェアPowered by Rabbit 2.1.4
まとめ3:作るノウハウ 
使いやすさで勝負する 
✓ユーザーの手間を減らす 
✓ 
最高速で勝負しない 
✓ボトルネックにならなければよい 
✓ 
多機能で勝負しない 
✓組込機能より拡張性 
✓ 
Rubyを使った分散全文検索ミドルウェアPowered by Rabbit 2.1.4
おまけ 
Droongaの紹介 
Rubyを使った分散全文検索ミドルウェアPowered by Rabbit 2.1.4
Droongaとは 
✓Ruby製 
✓分散全文検索エンジン 
✓SPOFなしの構成 
Rubyを使った分散全文検索ミドルウェアPowered by Rabbit 2.1.4
Droongaの特徴 
処理をパイプラインとして 
つなげられる予定 
✓ 
処理はプラグイン可能 
✓Rubyで簡単に(予定)書ける 
✓ 
Groonga互換API提供 
✓Groonga = 既存全文検索エンジン 
✓ 
Rubyを使った分散全文検索ミドルウェアPowered by Rabbit 2.1.4
Droongaの実装:性能 
レイテンシー 
Groongaより高いけど 
気になるほどではない 
✓ 
✓ 
スループット 
✓ノード数を増やせばGroongaより速い 
✓ 
Rubyを使った分散全文検索ミドルウェアPowered by Rabbit 2.1.4
Droongaの実装:機能 
✓プラグインで拡張可能 
Rubyを使った分散全文検索ミドルウェアPowered by Rabbit 2.1.4
Droongaの実装:使いやすさ 
インストール 
✓インストーラー提供で簡易化 
✓ 
これからがんばる 
✓設定・更新・運用 
✓プラグインの作りやすさ 
✓ 
Rubyを使った分散全文検索ミドルウェアPowered by Rabbit 2.1.4
Droonga 
http://droonga.org/ 
11/29(いい肉の日) 
Groongaイベント開催 
(東京) 
http://groonga.doorkeeper.jp/events/15816 
Rubyを使った分散全文検索ミドルウェアPowered by Rabbit 2.1.4

More Related Content

What's hot

コンテナ時代だからこそ要注目! Cloud Foundry
コンテナ時代だからこそ要注目! Cloud Foundryコンテナ時代だからこそ要注目! Cloud Foundry
コンテナ時代だからこそ要注目! Cloud FoundryKazuto Kusama
 
Cloud Foundryで学ぶ、PaaSのしくみ講座
Cloud Foundryで学ぶ、PaaSのしくみ講座Cloud Foundryで学ぶ、PaaSのしくみ講座
Cloud Foundryで学ぶ、PaaSのしくみ講座Kazuto Kusama
 
Webアプリ開発向け ゆるふわDocker使いが Cloud Naive開発に必要なetc.
Webアプリ開発向け ゆるふわDocker使いが Cloud Naive開発に必要なetc.Webアプリ開発向け ゆるふわDocker使いが Cloud Naive開発に必要なetc.
Webアプリ開発向け ゆるふわDocker使いが Cloud Naive開発に必要なetc.YASUKAZU NAGATOMI
 
[JANOG35.5] WhiteBox SW検証 ~サーバサイド編~
[JANOG35.5] WhiteBox SW検証  ~サーバサイド編~[JANOG35.5] WhiteBox SW検証  ~サーバサイド編~
[JANOG35.5] WhiteBox SW検証 ~サーバサイド編~gree_tech
 
Capistrano in practice - WebCareer
Capistrano in practice - WebCareerCapistrano in practice - WebCareer
Capistrano in practice - WebCareerKyosuke MOROHASHI
 
ISUCONの勝ち方 YAPC::Asia Tokyo 2015
ISUCONの勝ち方 YAPC::Asia Tokyo 2015ISUCONの勝ち方 YAPC::Asia Tokyo 2015
ISUCONの勝ち方 YAPC::Asia Tokyo 2015Masahiro Nagano
 
Cloudn PaaSチームのChatOps実践
Cloudn PaaSチームのChatOps実践Cloudn PaaSチームのChatOps実践
Cloudn PaaSチームのChatOps実践Kazuto Kusama
 
Mobage を支える Ruby の技術 ~ 複数DB編 ~
Mobage を支える Ruby の技術 ~ 複数DB編 ~Mobage を支える Ruby の技術 ~ 複数DB編 ~
Mobage を支える Ruby の技術 ~ 複数DB編 ~Naotoshi Seo
 
RubyもApache Arrowでデータ処理言語の仲間入り
RubyもApache Arrowでデータ処理言語の仲間入りRubyもApache Arrowでデータ処理言語の仲間入り
RubyもApache Arrowでデータ処理言語の仲間入りKouhei Sutou
 
ZabbixのAPIを使って運用を楽しくする話
ZabbixのAPIを使って運用を楽しくする話ZabbixのAPIを使って運用を楽しくする話
ZabbixのAPIを使って運用を楽しくする話Masahito Zembutsu
 
BOSHでお手軽CFデプロイon AWS
BOSHでお手軽CFデプロイon AWSBOSHでお手軽CFデプロイon AWS
BOSHでお手軽CFデプロイon AWSi_yudai
 
Ansible ではじめるサーバ作業の自動化
Ansible ではじめるサーバ作業の自動化Ansible ではじめるサーバ作業の自動化
Ansible ではじめるサーバ作業の自動化Masashi Shinbara
 
DevStackで始めるCloud FoundryとBOSH
DevStackで始めるCloud FoundryとBOSHDevStackで始めるCloud FoundryとBOSH
DevStackで始めるCloud FoundryとBOSHi_yudai
 
MogileFS をバックエンドとしたPrivate S3の作り方 【後半】API 編
MogileFS をバックエンドとしたPrivate S3の作り方 【後半】API 編MogileFS をバックエンドとしたPrivate S3の作り方 【後半】API 編
MogileFS をバックエンドとしたPrivate S3の作り方 【後半】API 編hiboma
 
CFの便利機能を他の環境でも。Open Service Broker
CFの便利機能を他の環境でも。Open Service BrokerCFの便利機能を他の環境でも。Open Service Broker
CFの便利機能を他の環境でも。Open Service BrokerKazuto Kusama
 
microPCFを使ってみよう
microPCFを使ってみようmicroPCFを使ってみよう
microPCFを使ってみようHiroaki_UKAJI
 
Kubernetes ときどき Serverless -- cndjp第1回勉強会
Kubernetes ときどき Serverless -- cndjp第1回勉強会Kubernetes ときどき Serverless -- cndjp第1回勉強会
Kubernetes ときどき Serverless -- cndjp第1回勉強会Hiroshi Hayakawa
 
Webアプリ開発向け ゆるふわDocker使いがCloud Naive開発に必要そうなetc.
Webアプリ開発向け ゆるふわDocker使いがCloud Naive開発に必要そうなetc.Webアプリ開発向け ゆるふわDocker使いがCloud Naive開発に必要そうなetc.
Webアプリ開発向け ゆるふわDocker使いがCloud Naive開発に必要そうなetc.YASUKAZU NAGATOMI
 
もう XAMPP / MAMP はいらない!
Vagrant で作る PHP 開発環境
もう XAMPP / MAMP はいらない!
Vagrant で作る PHP 開発環境もう XAMPP / MAMP はいらない!
Vagrant で作る PHP 開発環境
もう XAMPP / MAMP はいらない!
Vagrant で作る PHP 開発環境Masashi Shinbara
 

What's hot (20)

コンテナ時代だからこそ要注目! Cloud Foundry
コンテナ時代だからこそ要注目! Cloud Foundryコンテナ時代だからこそ要注目! Cloud Foundry
コンテナ時代だからこそ要注目! Cloud Foundry
 
Cloud Foundryで学ぶ、PaaSのしくみ講座
Cloud Foundryで学ぶ、PaaSのしくみ講座Cloud Foundryで学ぶ、PaaSのしくみ講座
Cloud Foundryで学ぶ、PaaSのしくみ講座
 
Webアプリ開発向け ゆるふわDocker使いが Cloud Naive開発に必要なetc.
Webアプリ開発向け ゆるふわDocker使いが Cloud Naive開発に必要なetc.Webアプリ開発向け ゆるふわDocker使いが Cloud Naive開発に必要なetc.
Webアプリ開発向け ゆるふわDocker使いが Cloud Naive開発に必要なetc.
 
[JANOG35.5] WhiteBox SW検証 ~サーバサイド編~
[JANOG35.5] WhiteBox SW検証  ~サーバサイド編~[JANOG35.5] WhiteBox SW検証  ~サーバサイド編~
[JANOG35.5] WhiteBox SW検証 ~サーバサイド編~
 
Capistrano in practice - WebCareer
Capistrano in practice - WebCareerCapistrano in practice - WebCareer
Capistrano in practice - WebCareer
 
ISUCONの勝ち方 YAPC::Asia Tokyo 2015
ISUCONの勝ち方 YAPC::Asia Tokyo 2015ISUCONの勝ち方 YAPC::Asia Tokyo 2015
ISUCONの勝ち方 YAPC::Asia Tokyo 2015
 
Cloudn PaaSチームのChatOps実践
Cloudn PaaSチームのChatOps実践Cloudn PaaSチームのChatOps実践
Cloudn PaaSチームのChatOps実践
 
Mobage を支える Ruby の技術 ~ 複数DB編 ~
Mobage を支える Ruby の技術 ~ 複数DB編 ~Mobage を支える Ruby の技術 ~ 複数DB編 ~
Mobage を支える Ruby の技術 ~ 複数DB編 ~
 
RubyもApache Arrowでデータ処理言語の仲間入り
RubyもApache Arrowでデータ処理言語の仲間入りRubyもApache Arrowでデータ処理言語の仲間入り
RubyもApache Arrowでデータ処理言語の仲間入り
 
ZabbixのAPIを使って運用を楽しくする話
ZabbixのAPIを使って運用を楽しくする話ZabbixのAPIを使って運用を楽しくする話
ZabbixのAPIを使って運用を楽しくする話
 
BOSHでお手軽CFデプロイon AWS
BOSHでお手軽CFデプロイon AWSBOSHでお手軽CFデプロイon AWS
BOSHでお手軽CFデプロイon AWS
 
Spring Boot on Kubernetes : Yahoo!ズバトク事例 #jjug_ccc
Spring Boot on Kubernetes : Yahoo!ズバトク事例 #jjug_cccSpring Boot on Kubernetes : Yahoo!ズバトク事例 #jjug_ccc
Spring Boot on Kubernetes : Yahoo!ズバトク事例 #jjug_ccc
 
Ansible ではじめるサーバ作業の自動化
Ansible ではじめるサーバ作業の自動化Ansible ではじめるサーバ作業の自動化
Ansible ではじめるサーバ作業の自動化
 
DevStackで始めるCloud FoundryとBOSH
DevStackで始めるCloud FoundryとBOSHDevStackで始めるCloud FoundryとBOSH
DevStackで始めるCloud FoundryとBOSH
 
MogileFS をバックエンドとしたPrivate S3の作り方 【後半】API 編
MogileFS をバックエンドとしたPrivate S3の作り方 【後半】API 編MogileFS をバックエンドとしたPrivate S3の作り方 【後半】API 編
MogileFS をバックエンドとしたPrivate S3の作り方 【後半】API 編
 
CFの便利機能を他の環境でも。Open Service Broker
CFの便利機能を他の環境でも。Open Service BrokerCFの便利機能を他の環境でも。Open Service Broker
CFの便利機能を他の環境でも。Open Service Broker
 
microPCFを使ってみよう
microPCFを使ってみようmicroPCFを使ってみよう
microPCFを使ってみよう
 
Kubernetes ときどき Serverless -- cndjp第1回勉強会
Kubernetes ときどき Serverless -- cndjp第1回勉強会Kubernetes ときどき Serverless -- cndjp第1回勉強会
Kubernetes ときどき Serverless -- cndjp第1回勉強会
 
Webアプリ開発向け ゆるふわDocker使いがCloud Naive開発に必要そうなetc.
Webアプリ開発向け ゆるふわDocker使いがCloud Naive開発に必要そうなetc.Webアプリ開発向け ゆるふわDocker使いがCloud Naive開発に必要そうなetc.
Webアプリ開発向け ゆるふわDocker使いがCloud Naive開発に必要そうなetc.
 
もう XAMPP / MAMP はいらない!
Vagrant で作る PHP 開発環境
もう XAMPP / MAMP はいらない!
Vagrant で作る PHP 開発環境もう XAMPP / MAMP はいらない!
Vagrant で作る PHP 開発環境
もう XAMPP / MAMP はいらない!
Vagrant で作る PHP 開発環境
 

Similar to Rubyを使った分散全文検索ミドルウェア

DLR言語によるSilverlightプログラミング
DLR言語によるSilverlightプログラミングDLR言語によるSilverlightプログラミング
DLR言語によるSilverlightプログラミングterurou
 
Rubyと仕事と自由なソフトウェア
Rubyと仕事と自由なソフトウェアRubyと仕事と自由なソフトウェア
Rubyと仕事と自由なソフトウェアKouhei Sutou
 
Docker friendly PHP / Laravel
Docker friendlyPHP / LaravelDocker friendlyPHP / Laravel
Docker friendly PHP / LaravelKentarou Takeda
 
密着!わたしのコンソールアプリ開発環境
密着!わたしのコンソールアプリ開発環境密着!わたしのコンソールアプリ開発環境
密着!わたしのコンソールアプリ開発環境Fumihito Yokoyama
 
リーダブルコードワークショップ(パイオニア向け)の概要
リーダブルコードワークショップ(パイオニア向け)の概要リーダブルコードワークショップ(パイオニア向け)の概要
リーダブルコードワークショップ(パイオニア向け)の概要Kouhei Sutou
 
静的サイトどこにする?
静的サイトどこにする?静的サイトどこにする?
静的サイトどこにする?ogawatti
 
はてなにおける継続的デプロイメントの現状と Docker の導入
はてなにおける継続的デプロイメントの現状と Docker の導入はてなにおける継続的デプロイメントの現状と Docker の導入
はてなにおける継続的デプロイメントの現状と Docker の導入Yu Nobuoka
 
デブサミ2013【15-E-2】Ruby開発者のみなさん、mrubyで楽しく快適な組み込みアプリ開発を始めませんか?
デブサミ2013【15-E-2】Ruby開発者のみなさん、mrubyで楽しく快適な組み込みアプリ開発を始めませんか?デブサミ2013【15-E-2】Ruby開発者のみなさん、mrubyで楽しく快適な組み込みアプリ開発を始めませんか?
デブサミ2013【15-E-2】Ruby開発者のみなさん、mrubyで楽しく快適な組み込みアプリ開発を始めませんか?Developers Summit
 
誰にでもできるパフォーマンスチューニング
誰にでもできるパフォーマンスチューニング誰にでもできるパフォーマンスチューニング
誰にでもできるパフォーマンスチューニングKiyokazu Kaba
 
minneで学ぶクラウド脳
minneで学ぶクラウド脳minneで学ぶクラウド脳
minneで学ぶクラウド脳Uchio Kondo
 
苫小牧高専 ソフトウェアテクノロジー部 Rubyで遊ぼう 1
苫小牧高専 ソフトウェアテクノロジー部 Rubyで遊ぼう 1苫小牧高専 ソフトウェアテクノロジー部 Rubyで遊ぼう 1
苫小牧高専 ソフトウェアテクノロジー部 Rubyで遊ぼう 1Takuya Mukohira
 
地方企業がソーシャルゲーム開発を成功させるための10のポイント
地方企業がソーシャルゲーム開発を成功させるための10のポイント地方企業がソーシャルゲーム開発を成功させるための10のポイント
地方企業がソーシャルゲーム開発を成功させるための10のポイントKentaro Matsui
 
ChefユーザのためのAnsible入門
ChefユーザのためのAnsible入門ChefユーザのためのAnsible入門
ChefユーザのためのAnsible入門Mahito Ogura
 
ゲームのインフラをAwsで実戦tips全て見せます
ゲームのインフラをAwsで実戦tips全て見せますゲームのインフラをAwsで実戦tips全て見せます
ゲームのインフラをAwsで実戦tips全て見せますinfinite_loop
 
20150228_渋谷Webエンジニア朝会LT資料
20150228_渋谷Webエンジニア朝会LT資料20150228_渋谷Webエンジニア朝会LT資料
20150228_渋谷Webエンジニア朝会LT資料慎平 仁藤
 

Similar to Rubyを使った分散全文検索ミドルウェア (20)

DLR言語によるSilverlightプログラミング
DLR言語によるSilverlightプログラミングDLR言語によるSilverlightプログラミング
DLR言語によるSilverlightプログラミング
 
Rubyと仕事と自由なソフトウェア
Rubyと仕事と自由なソフトウェアRubyと仕事と自由なソフトウェア
Rubyと仕事と自由なソフトウェア
 
Fabric Essentials
Fabric EssentialsFabric Essentials
Fabric Essentials
 
Docker friendly PHP / Laravel
Docker friendlyPHP / LaravelDocker friendlyPHP / Laravel
Docker friendly PHP / Laravel
 
密着!わたしのコンソールアプリ開発環境
密着!わたしのコンソールアプリ開発環境密着!わたしのコンソールアプリ開発環境
密着!わたしのコンソールアプリ開発環境
 
リーダブルコードワークショップ(パイオニア向け)の概要
リーダブルコードワークショップ(パイオニア向け)の概要リーダブルコードワークショップ(パイオニア向け)の概要
リーダブルコードワークショップ(パイオニア向け)の概要
 
静的サイトどこにする?
静的サイトどこにする?静的サイトどこにする?
静的サイトどこにする?
 
はてなにおける継続的デプロイメントの現状と Docker の導入
はてなにおける継続的デプロイメントの現状と Docker の導入はてなにおける継続的デプロイメントの現状と Docker の導入
はてなにおける継続的デプロイメントの現状と Docker の導入
 
Chef
ChefChef
Chef
 
Haikara
HaikaraHaikara
Haikara
 
デブサミ2013【15-E-2】Ruby開発者のみなさん、mrubyで楽しく快適な組み込みアプリ開発を始めませんか?
デブサミ2013【15-E-2】Ruby開発者のみなさん、mrubyで楽しく快適な組み込みアプリ開発を始めませんか?デブサミ2013【15-E-2】Ruby開発者のみなさん、mrubyで楽しく快適な組み込みアプリ開発を始めませんか?
デブサミ2013【15-E-2】Ruby開発者のみなさん、mrubyで楽しく快適な組み込みアプリ開発を始めませんか?
 
誰にでもできるパフォーマンスチューニング
誰にでもできるパフォーマンスチューニング誰にでもできるパフォーマンスチューニング
誰にでもできるパフォーマンスチューニング
 
minneで学ぶクラウド脳
minneで学ぶクラウド脳minneで学ぶクラウド脳
minneで学ぶクラウド脳
 
苫小牧高専 ソフトウェアテクノロジー部 Rubyで遊ぼう 1
苫小牧高専 ソフトウェアテクノロジー部 Rubyで遊ぼう 1苫小牧高専 ソフトウェアテクノロジー部 Rubyで遊ぼう 1
苫小牧高専 ソフトウェアテクノロジー部 Rubyで遊ぼう 1
 
130207 kyotorb
130207 kyotorb130207 kyotorb
130207 kyotorb
 
地方企業がソーシャルゲーム開発を成功させるための10のポイント
地方企業がソーシャルゲーム開発を成功させるための10のポイント地方企業がソーシャルゲーム開発を成功させるための10のポイント
地方企業がソーシャルゲーム開発を成功させるための10のポイント
 
ChefユーザのためのAnsible入門
ChefユーザのためのAnsible入門ChefユーザのためのAnsible入門
ChefユーザのためのAnsible入門
 
Ad stirの裏側
Ad stirの裏側Ad stirの裏側
Ad stirの裏側
 
ゲームのインフラをAwsで実戦tips全て見せます
ゲームのインフラをAwsで実戦tips全て見せますゲームのインフラをAwsで実戦tips全て見せます
ゲームのインフラをAwsで実戦tips全て見せます
 
20150228_渋谷Webエンジニア朝会LT資料
20150228_渋谷Webエンジニア朝会LT資料20150228_渋谷Webエンジニア朝会LT資料
20150228_渋谷Webエンジニア朝会LT資料
 

More from Kouhei Sutou

RubyKaigi 2022 - Fast data processing with Ruby and Apache Arrow
RubyKaigi 2022 - Fast data processing with Ruby and Apache ArrowRubyKaigi 2022 - Fast data processing with Ruby and Apache Arrow
RubyKaigi 2022 - Fast data processing with Ruby and Apache ArrowKouhei Sutou
 
Apache Arrow Flight – ビッグデータ用高速データ転送フレームワーク #dbts2021
Apache Arrow Flight – ビッグデータ用高速データ転送フレームワーク #dbts2021Apache Arrow Flight – ビッグデータ用高速データ転送フレームワーク #dbts2021
Apache Arrow Flight – ビッグデータ用高速データ転送フレームワーク #dbts2021Kouhei Sutou
 
RubyKaigi Takeout 2021 - Red Arrow - Ruby and Apache Arrow
RubyKaigi Takeout 2021 - Red Arrow - Ruby and Apache ArrowRubyKaigi Takeout 2021 - Red Arrow - Ruby and Apache Arrow
RubyKaigi Takeout 2021 - Red Arrow - Ruby and Apache ArrowKouhei Sutou
 
Apache Arrowフォーマットはなぜ速いのか
Apache Arrowフォーマットはなぜ速いのかApache Arrowフォーマットはなぜ速いのか
Apache Arrowフォーマットはなぜ速いのかKouhei Sutou
 
Apache Arrow 1.0 - A cross-language development platform for in-memory data
Apache Arrow 1.0 - A cross-language development platform for in-memory dataApache Arrow 1.0 - A cross-language development platform for in-memory data
Apache Arrow 1.0 - A cross-language development platform for in-memory dataKouhei Sutou
 
Redmine検索の未来像
Redmine検索の未来像Redmine検索の未来像
Redmine検索の未来像Kouhei Sutou
 
Apache Arrow - A cross-language development platform for in-memory data
Apache Arrow - A cross-language development platform for in-memory dataApache Arrow - A cross-language development platform for in-memory data
Apache Arrow - A cross-language development platform for in-memory dataKouhei Sutou
 
Better CSV processing with Ruby 2.6
Better CSV processing with Ruby 2.6Better CSV processing with Ruby 2.6
Better CSV processing with Ruby 2.6Kouhei Sutou
 
Apache Arrow - データ処理ツールの次世代プラットフォーム
Apache Arrow - データ処理ツールの次世代プラットフォームApache Arrow - データ処理ツールの次世代プラットフォーム
Apache Arrow - データ処理ツールの次世代プラットフォームKouhei Sutou
 
MySQL・PostgreSQLだけで作る高速あいまい全文検索システム
MySQL・PostgreSQLだけで作る高速あいまい全文検索システムMySQL・PostgreSQLだけで作る高速あいまい全文検索システム
MySQL・PostgreSQLだけで作る高速あいまい全文検索システムKouhei Sutou
 
MySQL 8.0でMroonga
MySQL 8.0でMroongaMySQL 8.0でMroonga
MySQL 8.0でMroongaKouhei Sutou
 
Mroongaの高速全文検索機能でWordPress内のコンテンツを有効活用!
Mroongaの高速全文検索機能でWordPress内のコンテンツを有効活用!Mroongaの高速全文検索機能でWordPress内のコンテンツを有効活用!
Mroongaの高速全文検索機能でWordPress内のコンテンツを有効活用!Kouhei Sutou
 
MariaDBとMroongaで作る全言語対応超高速全文検索システム
MariaDBとMroongaで作る全言語対応超高速全文検索システムMariaDBとMroongaで作る全言語対応超高速全文検索システム
MariaDBとMroongaで作る全言語対応超高速全文検索システムKouhei Sutou
 
PGroonga 2 – Make PostgreSQL rich full text search system backend!
PGroonga 2 – Make PostgreSQL rich full text search system backend!PGroonga 2 – Make PostgreSQL rich full text search system backend!
PGroonga 2 – Make PostgreSQL rich full text search system backend!Kouhei Sutou
 
PGroonga 2 - PostgreSQLでの全文検索の決定版
PGroonga 2 - PostgreSQLでの全文検索の決定版PGroonga 2 - PostgreSQLでの全文検索の決定版
PGroonga 2 - PostgreSQLでの全文検索の決定版Kouhei Sutou
 

More from Kouhei Sutou (20)

RubyKaigi 2022 - Fast data processing with Ruby and Apache Arrow
RubyKaigi 2022 - Fast data processing with Ruby and Apache ArrowRubyKaigi 2022 - Fast data processing with Ruby and Apache Arrow
RubyKaigi 2022 - Fast data processing with Ruby and Apache Arrow
 
Apache Arrow Flight – ビッグデータ用高速データ転送フレームワーク #dbts2021
Apache Arrow Flight – ビッグデータ用高速データ転送フレームワーク #dbts2021Apache Arrow Flight – ビッグデータ用高速データ転送フレームワーク #dbts2021
Apache Arrow Flight – ビッグデータ用高速データ転送フレームワーク #dbts2021
 
RubyKaigi Takeout 2021 - Red Arrow - Ruby and Apache Arrow
RubyKaigi Takeout 2021 - Red Arrow - Ruby and Apache ArrowRubyKaigi Takeout 2021 - Red Arrow - Ruby and Apache Arrow
RubyKaigi Takeout 2021 - Red Arrow - Ruby and Apache Arrow
 
Apache Arrowフォーマットはなぜ速いのか
Apache Arrowフォーマットはなぜ速いのかApache Arrowフォーマットはなぜ速いのか
Apache Arrowフォーマットはなぜ速いのか
 
Apache Arrow 1.0 - A cross-language development platform for in-memory data
Apache Arrow 1.0 - A cross-language development platform for in-memory dataApache Arrow 1.0 - A cross-language development platform for in-memory data
Apache Arrow 1.0 - A cross-language development platform for in-memory data
 
Apache Arrow 2019
Apache Arrow 2019Apache Arrow 2019
Apache Arrow 2019
 
Redmine検索の未来像
Redmine検索の未来像Redmine検索の未来像
Redmine検索の未来像
 
Apache Arrow - A cross-language development platform for in-memory data
Apache Arrow - A cross-language development platform for in-memory dataApache Arrow - A cross-language development platform for in-memory data
Apache Arrow - A cross-language development platform for in-memory data
 
Better CSV processing with Ruby 2.6
Better CSV processing with Ruby 2.6Better CSV processing with Ruby 2.6
Better CSV processing with Ruby 2.6
 
Apache Arrow
Apache ArrowApache Arrow
Apache Arrow
 
Apache Arrow - データ処理ツールの次世代プラットフォーム
Apache Arrow - データ処理ツールの次世代プラットフォームApache Arrow - データ処理ツールの次世代プラットフォーム
Apache Arrow - データ処理ツールの次世代プラットフォーム
 
Apache Arrow
Apache ArrowApache Arrow
Apache Arrow
 
MySQL・PostgreSQLだけで作る高速あいまい全文検索システム
MySQL・PostgreSQLだけで作る高速あいまい全文検索システムMySQL・PostgreSQLだけで作る高速あいまい全文検索システム
MySQL・PostgreSQLだけで作る高速あいまい全文検索システム
 
MySQL 8.0でMroonga
MySQL 8.0でMroongaMySQL 8.0でMroonga
MySQL 8.0でMroonga
 
My way with Ruby
My way with RubyMy way with Ruby
My way with Ruby
 
Red Data Tools
Red Data ToolsRed Data Tools
Red Data Tools
 
Mroongaの高速全文検索機能でWordPress内のコンテンツを有効活用!
Mroongaの高速全文検索機能でWordPress内のコンテンツを有効活用!Mroongaの高速全文検索機能でWordPress内のコンテンツを有効活用!
Mroongaの高速全文検索機能でWordPress内のコンテンツを有効活用!
 
MariaDBとMroongaで作る全言語対応超高速全文検索システム
MariaDBとMroongaで作る全言語対応超高速全文検索システムMariaDBとMroongaで作る全言語対応超高速全文検索システム
MariaDBとMroongaで作る全言語対応超高速全文検索システム
 
PGroonga 2 – Make PostgreSQL rich full text search system backend!
PGroonga 2 – Make PostgreSQL rich full text search system backend!PGroonga 2 – Make PostgreSQL rich full text search system backend!
PGroonga 2 – Make PostgreSQL rich full text search system backend!
 
PGroonga 2 - PostgreSQLでの全文検索の決定版
PGroonga 2 - PostgreSQLでの全文検索の決定版PGroonga 2 - PostgreSQLでの全文検索の決定版
PGroonga 2 - PostgreSQLでの全文検索の決定版
 

Rubyを使った分散全文検索ミドルウェア