Análise de XML grande com o Nokogiri

Então, estou tentando analisar um arquivo XML de 400k + linhas usando o Nokogiri.

O arquivo XML tem este formato básico:

<?xml version="1.0" encoding="windows-1252"?>
<JDBOR date="2013-09-01 04:12:31" version="1.0.20 [2012-12-14]" copyright="Orphanet (c) 2013">
 <DisorderList count="6760">

  *** Repeated Many Times ***
  <Disorder id="17601">
  <OrphaNumber>166024</OrphaNumber>
  <Name lang="en">Multiple epiphyseal dysplasia, Al-Gazali type</Name>
  <DisorderSignList count="18">
    <DisorderSign>
      <ClinicalSign id="2040">
        <Name lang="en">Macrocephaly/macrocrania/megalocephaly/megacephaly</Name>
      </ClinicalSign>
      <SignFreq id="640">
        <Name lang="en">Very frequent</Name>
      </SignFreq>
    </DisorderSign>
  </Disorder>
  *** Repeated Many Times ***

 </DisorderList>
</JDBOR>

Aqui está o código que criei para analisar e retornar cada ID e nome de DisorderSign em um banco de dados:

require 'nokogiri'

sympFile = File.open("Temp.xml")
@doc = Nokogiri::XML(sympFile)
sympFile.close()
symptomsList = []

@doc.xpath("////DisorderSign").each do |x|
    signId = x.at('ClinicalSign').attribute('id').text()      
    name = x.at('ClinicalSign').element_children().text()
    symptomsList.push([signId, name])
end

symptomsList.each do |x|
    Symptom.where(:name => x[1], :signid => Integer(x[0])).first_or_create
end

Isso funciona perfeitamente nos arquivos de teste que usei, embora fossem muito menores, em torno de 10.000 linhas.

Quando tento executar isso no arquivo XML grande, ele simplesmente não é concluído. Eu deixei-o ligado durante a noite e parecia apenas bloqueio. Existe algum motivo fundamental pelo qual o código que escrevi tornaria essa memória muito intensiva ou ineficiente? Eu percebo que eu armazeno todos os pares possíveis em uma lista, mas isso não deve ser grande o suficiente para encher a memória.

Obrigado por qualquer ajuda.

questionAnswers(4)

yourAnswerToTheQuestion