我对 ruby 很陌生,我正在学习如何在多个线程中进行处理。我所做的是使用 Nokogiri 解析一个 170mb 的 xml 文件,并将数据库(Postgresql)插入到我的 .each() 中的一个新线程中。请提出一种更好的方法来处理这个非常大的文件并在多个线程中进行。这是我到目前为止所拥有的。
conn = PGconn.connect("localhost", 5432, "", "", "oaxis","postgres","root")
f = File.open("metadata.xml")
doc = Nokogiri::XML(f)
counter = 0
threadArray = []
doc.xpath('//Title').each do |node|
threadArray[counter] = Thread.new{
titleVal = node.text
random_string = (0...10).map{ ('a'..'z').to_a[rand(26)] }.join
conn.prepare('ins'+random_string, 'insert into sample_tbl (title) values ($1)')
conn.exec_prepared('ins'+random_string, [titleVal])
puts titleVal+" ==>"+random_string+ " \n"
counter += 1
}
end
threadArray.each {|t| t.join}
f.close