将巨大的XML导入Rails数据库

时间:2014-03-22 01:15:08

标签: ruby-on-rails xml postgresql xml-parsing sidekiq

我有一个巨大的(超过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

0 个答案:

没有答案