Импорт огромного 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