所以我正在尝试为美国和加拿大编写自己的地理编码数据库,因为我需要令人难以置信的速度,并且没有速率限制。我有以下用于 Rails 批量地理编码的算法,但我想知道是否有更好的方法来急切加载初始批次的城市。我一直在进行基准测试,我已经把它归结为这个算法,它在大约 19 秒内给了我 1000 个地理编码,覆盖率约为 50%。
我的问题是,在尝试“向下钻取”时,是否有更好的操作方法而不是重新查询数据库?
ids = City.where('lower(name) IN (?)', locations).pluck(:id) # Eager load the only possible results
results.find_each do |r|
#next if r.location = 'EXACT'
names = r.location.split(',')
state = get_state(names)
city = City.where(:id => ids, :state => state[0]).where('lower(name) IN (?)', names).first # Drill down to the appropriate state
if city.nil?
city = City.where(:id => ids).where('lower(name) IN (?)', names).first # Hail Mary
end
# Return if nil?
if city.blank?
puts "Oh no! We couldn't find a city for #{r.location}"
else
# Finally, the city
puts "Selected #{city.name} for #{r.location}"
r.latitude = city.latitude
r.longitude = city.longitude
r.save
end
end