我有這個代碼,它需要很長的時間。如何優化這個ruby腳本?
當我使用-r配置文件時,它表明大部分時間似乎都去了mysql ...我怎麼能加快速度呢? MySQL批量插入?
探查輸出是在這裏:http://pastebin.com/fH51ZeEB
代碼:
#!/usr/bin/env ruby
require 'mysql'
require 'open-uri'
require 'nokogiri'
begin
i=0
src = Mysql.new 'localhost', 'me', 'pass', 'db'
rs = src.query("SELECT * FROM npanxx")
rs.each_hash do |row|
doc = Nokogiri::XML(open("http://localcallingguide.com/xmllocalprefix.php?npa="<< row["npa"].to_s << "&nxx=" << row["nxx"].to_s << "&dir=1"))
lca = Hash.new
doc.xpath("//prefix/npa | //prefix/nxx | //prefix/exch").each do |prefix|
if !lca.has_key? "npa"
lca["npa"] = prefix.content
next
end
if !lca.has_key? "nxx"
lca["nxx"] = prefix.content
next
end
if !lca.has_key? "exch"
lca["exch"] = prefix.content
src.query("INSERT INTO npanxxlca (npa,nxx,tnpa,tnxx,texch) VALUES (#{row['npa']}, #{row['nxx']}, #{lca['npa']}, #{lca['nxx']}, #{lca['exch']})")
lca = Hash.new
end
end
puts (i+=1).to_s << "- #{row['npa']}, #{row['nxx']}\n"
end
rescue Mysql::Error => e
puts e.errno
puts e.error
ensure
src.close if src
end
似乎更適合http://codereview.stackexchange.com/因爲這段代碼實際上起作用了,不是嗎? – Oka
是的,我不知道那個存在... – zevlag