MySQLPlusを試す

まず、普通のクエリを投げてみる。

require 'rubygems'
require 'mysqlplus'

my = Mysql.connect('localhost', 'root', '', 'mysql')
my.query("select sleep(10)")
#my.send_query("select sleep(10)")
my.close

当然、10秒かかる。


~/work# time ruby foo.rb

real 0m10.250s
user 0m0.170s
sys 0m0.080s

つづいて、非同期にクエリを投げてみる。

require 'rubygems'
require 'mysqlplus'

my = Mysql.connect('localhost', 'root', '', 'mysql')
#my.query("select sleep(10)")
my.send_query("select sleep(10)")
my.close

こっちは、すぐ終わる…と。


~/work# time ruby foo.rb

real 0m0.250s
user 0m0.200s
sys 0m0.050s

結果を取得する

非同期クエリの結果はMysql#get_resultで得られる。

require 'rubygems'
require 'mysqlplus'

my = Mysql.connect('localhost', 'root', '', 'mysql')
my.send_query("show tables")
puts 'wait...'
sleep 3
my.get_result.each_hash do |row|
  p row
end


~/work# ruby foo.rb | head -n 5
wait...
{"Tables_in_mysql"=>"columns_priv"}
{"Tables_in_mysql"=>"db"}
{"Tables_in_mysql"=>"func"}
{"Tables_in_mysql"=>"help_category"}