我编写了一个ruby脚本,它接受一个CSV文件并将输入转换为哈希:
Culper = File.open('.\CulperCSV.csv')
culper_hash = {}
# set up culper code hash from provided CSV
CSV.foreach(Culper) do |row|
number, word = row
culper_hash[word] = number
end
我试图使用脚本制作Rails应用程序。
我的问题:如何持久存储哈希值(或CSV数据以便我可以构建哈希值)以便最小化加载时间?
我的想法:
1)将CSV数据加载到数据库中(播种它),每次我在我的网站上获得访问者时,都要从数据库中执行上述分配。 (不知道怎么做但我可以研究它。)
或
2)将完整的哈希加载到数据库中(我想我必须序列化它?)这样我就可以从数据库中只进行一次获取并准备好哈希值。
我对构建应用程序非常陌生,特别是在Rails中,所以如果我想要做的事情没有意义,请提出问题。
答案 0 :(得分:0)
您的.csv
文件似乎已经在您的Rails应用目录中,因此加载时间不应该是坏的(除非它真的很大)。但是,如果该文件不会改变,并且您一次只需要一小部分文件,那么我会将其存储在您的数据库中。
创建与.csv
文件中的数据相对应的模型/迁移,然后(迁移迁移后)运行脚本以将数据从.csv
文件解析到数据库。
答案 1 :(得分:0)
我建议你应该采用第二种方法。以下是执行此操作的步骤: 设置新应用:
rails g model model_name column_name:text
rake db:migrate
创建模型:
serialize :column_name
打开model_name.rb文件并添加以下行
Culper = File.open('.\CulperCSV.csv')
# get the object from database
obj = ModelName.first
# set up culper code hash from provided CSV
CSV.each(Culper) do |row|
number, word = row
obj.column_name[word] = number
end
obj.save
现在所有的一切。只需运行您的脚本来解析.csv文件并在db中存储哈希。您的列现在可以存储哈希。
#include
答案 2 :(得分:0)
我按照@Kh Ammad的建议设法解决了我的问题:设置一个新的应用程序,为它创建一个模型,并标记我的列可序列化。
但是,我在运行脚本以使用哈希填充模型时遇到了一些问题,所以在经过一些研究后,我创建了下面的rake任务:
#lib/tasks/import.rake
require 'csv'
task :import, [:filename] => :environment do
culper_hash = {}
Culper = File.open('.\CulperCSV.csv')
CSV.foreach(Culper) do |row|
number, word = row
culper_hash[word] = number
end
# culper_hash == column_name
obj = CulperDict.create(culper_hash: culper_hash)
obj.save
end
并用:
运行$ bundle exec rake import
我的模型在一个条目中包含整个哈希表!
我用这篇文章来弄清楚如何运行rake任务: http://erikonrails.snowedin.net/?p=212
具体来说,Lauralee(2012年12月20日上午8:47发布)页面的最后评论遇到了类似的问题。