我有大约 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