我正在开发一个小脚本来处理一些数据。如果我尝试ab -n10 -c1
(一个接一个地发送请求的基准),请求大约需要 750 毫秒。相反,如果我尝试-c2
(一次发送两个请求),请求似乎需要 >2 秒。代码如下所示:
get '/url/' do
# ...
# Images is a mongodb collection
Images.find({'searchable_data.i' => {
'$in' => color_codes
}}).limit(5_000).each do |image|
found_images << {
:url => image['url'],
:searchable_data => image['searchable_data'],
}
end
# ...
从调试中我注意到对 mongo 的请求大约在同一时间触发,并在大致相同的时间返回(但是如果我一次运行它们,它们会花费 > 2 倍的时间。另外,我看过 cpu /memory 使用 mongo 进程,而 mongo 甚至没有退缩)。这是我连接到 mongo 的方式:
configure do
# ...
server_connection = Mongo::Connection.new(db.host, db.port, :pool_size => 60)
DB = server_connection.db(db_name)
DB.authenticate(db.user, db.password) unless (db.user.nil? || db.user.nil?)
Images = DB[:Images]
end
有什么我做错了吗?我无法想象 Mongodb 驱动程序如此糟糕。