MySQL中的休眠连接
我正在运行以下代码来计算我们应用程序的DAU(每日活动用户):MySQL中的休眠连接,mysql,ruby,rubygems,Mysql,Ruby,Rubygems,我正在运行以下代码来计算我们应用程序的DAU(每日活动用户): EM.run do db = EventMachine::Synchrony::ConnectionPool.new(size: numDays) do Mysql2::EM::Client.new( :host => config[:server], :username => config[:
EM.run do
db = EventMachine::Synchrony::ConnectionPool.new(size: numDays) do
Mysql2::EM::Client.new(
:host => config[:server],
:username => config[:user],
:password => config[:pwd],
:database => config[:db_name],
:connect_timeout => 60,
:cache_rows => false
)
end
slice.to_a.each do
|day|
defer = db.aquery("BIG QUERY HERE")
defer.callback do |obj|
puts "#{day} inserted into database"
a += 1
EM.stop unless a < numDays
end
end
end
start = Time.now
Date.parse(config[:from]).upto(Date.parse(config[:to])).each_slice(config[:slice]) do
|slice|
em_dau(config,slice)
puts "Total time elapsed: #{Time.now-start}"
end
EM.run do
db=EventMachine::Synchrony::ConnectionPool.new(大小:numDays)do
Mysql2::EM::Client.new(
:host=>config[:server],
:username=>config[:user],
:password=>config[:pwd],
:database=>config[:db_name],
:连接超时=>60,
:cache_rows=>false
)
结束
每个人都做切片
|一天|
defer=db.aquery(“此处的大查询”)
延迟回调do | obj|
将“#{day}插入数据库”
a+=1
EM.除非a
这样做的目的是,比如说,获取一年的用户数据,并将其分为N个大小的数据块,在每一天异步执行查询,返回循环并发送另一个N个数据块,重复此过程,直到覆盖完整的数据集。“问题”(用引号括起来,因为我不确定这是否真的是个问题)是,当脚本运行时,客户端建立的每个连接似乎都处于“睡眠”状态,直到整个脚本运行完毕。我假设ConnectionPool在管理db连接,但现在我想我需要做一些明确的管理。问题是我实际上不知道如何关闭事件循环中的连接。欢迎提出任何意见/建议。谢谢