在MySQL中睡觉连接

时间:2013-10-01 18:17:36

标签: mysql ruby rubygems

我正在运行以下代码来计算应用程序的DAU(每日活跃用户):

        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

这样做是比较一年的用户数据,并将其分成N个大小的块,并在每天的时间内异步查询,返回循环并发送另一个N块,重复该过程,直到涵盖完整数据集。 “问题”(在引号中,因为我不确定它确实是一个问题)是,当脚本运行时,似乎客户端所做的每个连接都保持“休眠”状态,直到整个脚本完成运行。我假设ConnectionPool正在管理数据库连接,但现在我认为我需要做一些明确的管理。问题是我实际上并不知道如何关闭事件循环中的连接。欢迎任何想法/建议。感谢。

0 个答案:

没有答案