Импорт огромного XML в базу данных Rails

У меня есть огромный (более 700 МБ) XML-файл с записями, которые мне нужно добавить в БД. Я использовал Nokogiri для перебора узлов и сохранения его в БД. Это заняло почти день. Затем я добавил драгоценный камень Sidekiq, создал рабочих и сократил время до 5 часов. Странно то, что примерно через час он замедляется. При запуске моя конфигурация создает около 100 записей в секунду, а затем замедляется до 20-50 для остальной части процесса. Проблема в том, что я не могу найти узкое место и почему оно замедляется. Нужна помощь

Ruby 1.9.3 + Rails 4.0.3 + PostgreSQL + Redis + sidekiq + 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 ответов

Другие вопросы по тегам