gpt4 book ai didi

ruby-on-rails - 解释 Rake 查询以创建 csv

转载 作者:可可西里 更新时间:2023-11-01 10:00:37 25 4
gpt4 key购买 nike

我继承了一个连接到 mongodb 的 ruby​​ 应用程序。不幸的是,我不知道 mongo 或 ruby​​,所以我在快速谷歌搜索和学习曲线上。

该应用程序存储地名及其经纬度、别名、人们的内存和评论。它还计算一个地方被讨论了多少次。

以下 rake 文件在运行时从 mongodb 中抓取所有位置并创建一个 csv,为每个位置吐出一行与用户、提到的次数、内存等。

task :data_dump => :environment do 
File.open("results.csv","w") do |file|
Location.all.each_with_index do |l,index|
puts "done #{index}"
file.puts [l.id, l.classification_count, l.position, l.created_at, l.classifications.collect{|c| c.text}, l.classifications.collect{|c| c.alternative_names }.flatten.join(";"), l.classifications.collect{|c| c.comment }.flatten.join(";"), l.memories.collect{|m| m.text}.flatten.join(";") ].join(",")
end
end
end

它运行良好并生成一个 CSV,然后我可以将其引入其他程序。问题是内容包含纯文本字段,这会破坏带有换行符等的 csv 的有效性,我想确保所有纯文本字段都正确包含在 CSV 中。

因此,如果我能更好地理解上述查询,我​​就可以输入正确的字段,以确保 csv 在加载到 GIS 软件时有效。

此外,上述内容在我的笔记本电脑上运行大约需要一个小时 45,因此我想了解这是否是执行查询的最有效方式。迄今为止,我们列出了大约 300000 个地名,这个数字将增加到几百万,所以只会变得更慢。

最佳答案

您可以使用 Ruby's 'csv' module 生成 CSV :

require 'csv'

task :data_dump => :environment do
CSV.open("results.csv","w") do |csv|
Location.all.each_with_index do |l,index|
puts "done #{index}"
csv << [l.id, l.classification_count, ...]
end
end
end

这将确保正确生成 CSV。至于速度,我只将 ActiveRecord 与关系数据库一起使用,但我认为问题是一样的 - The 1 + N Problem .基本上它说每次你使用 l.classifications.collectl.memories.collect 它需要做一个查询来从数据库中获取所有的分类/内存.解决方案是预先加载:

require 'csv'

task :data_dump => :environment do
CSV.open("results.csv","w") do |csv|
Location.all.includes(:classifications, :memories).each_with_index do |l,index|
puts "done #{index}"
csv << [l.id, l.classification_count, l.position, l.created_at, l.classifications.collect{|c| c.text}, l.classifications.collect{|c| c.alternative_names }.flatten.join(";"), l.classifications.collect{|c| c.comment }.flatten.join(";"), l.memories.collect{|m| m.text}.flatten.join(";") ]
end
end
end

(您可能需要为 alternative_names 这样做——我不记得嵌套预先加载的语法)。这将对数据库进行一次查询,这应该会快得多。

关于ruby-on-rails - 解释 Rake 查询以创建 csv,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32121429/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com