【发布时间】:2015-08-20 22:47:24
【问题描述】:
我有这个代码,它需要很长时间。
当我使用 -r profile 时,它表明大部分时间似乎都在使用 mysql ......我怎样才能加快速度? MySQL 批量插入?
Profiler 输出在这里: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
【问题讨论】:
-
似乎更适合codereview.stackexchange.com,因为这段代码确实有效,不是吗?
-
是的,我不知道有一个存在...
标签: mysql ruby optimization