我有大约260万条记录需要通过外部请求进行外部更新(使用PUT)。这只是一次性的事情,所以我有以下几点:
@hydra ||= Typhoeus::Hydra.hydra
million_records.each do |id|
typhoeus_request = Typhoeus::Request.new(
url: "http://localhost:300/posts/#{id}"
headers: {'content-type' => 'application/json'},
params: {field1: 'Hello World'}
method: :put
)
@hydra.queue typhoeus_request
end
@hydra.run
我阅读了有关并行请求的文档,并指出:
Hydra还将处理您可以并行处理的请求数量。如果你试图在同一时间提出太多请求,事情就会变得松懈。内置限制为200.当比这更多的请求排队时,hydra将保存它们以供日后使用,并在其他请求完成时启动请求。
我的问题是,上述有任何性能缺陷吗?如果是这样,我怎样才能改进上述内容,使其更具性能。
或者另外一个建议是,对于每次迭代,创建一个新的hyrda实例队列并将hydra实例推入一个数组,然后使用Parallel
gem进行遍历。例如:
batches = []
million_records.each do |id|
hydra ||= Typhoeus::Hydra.hydra
typhoeus_request = Typhoeus::Request.new(
url: "http://localhost:300/posts/#{id}",
params: {field1: 'Hello World'},
headers: {'content-type' => 'application/json'},
method: :put
)
hydra.queue typhoeus_request
batches.push(hydra)
end
Parallel.each(batches, in_threads: 5) do |batch|
batch.run
end