我有一个巨大的(超过700mb)XML文件,其中包含我需要添加到db的条目。我使用Nokogiri迭代节点并将其保存到db。花了差不多一天。然后我添加了sidekiq宝石,创造了工人,减少了5个小时的时间。 奇怪的是,经过一个小时左右,它会变慢。在开始时,我的配置创建大约100个条目/秒,然后在剩余的过程中减慢到20-50。 问题是我找不到瓶颈,为什么它会变慢。需要帮助
Ruby 1.9.3 + Rails 4.0.3 + PostgreSQL + Redis + sidekiq + Nokogiri
Nokogiri迭代器:
doc.xpath('data/entries/entry').each do |entry|
product = {
sid: entry.at_css('sid').content,
title: entry.at_css('title').content,
description: entry.at_css('description').content
}
EntryWorker.perform_async product
end
工人:
class EntryWorker
include Sidekiq::Worker
def perform hash
hash.symbolize_keys!
sid = hash[:sid]
product = Product.where(sid: sid).first_or_initialize
product.assign_attributes(hash)
product.save!
end
end