有人可以为这个用例推荐一个好的数据结构/方式吗?我正在使用带有MySQL的Ruby / Rails。
我有一个包含数万种产品的产品Feed(包含价格,网址,产品代码等)。我每天访问一次Feed,并希望将产品信息存储到一个快速访问的哈希值中,该哈希值在程序停止运行后会一直存在于数据库中。
这个(可能是非常大的)哈希应该是它自己的类,还是Product类的序列化属性?
我的伪代码:
all_products_hash = Hash.new
product_feed = get_feed_api()
product_feed.for_each |product| do
updated_product = Product.new(product.url, product.code, product.price)
all_products_hash[product.url] = updated_product
end
all_products_hash.save
a_product = all_products_hash.get['url']
哈希的关键是product.url。我是否正确初始化哈希?非常感谢任何建议!
答案 0 :(得分:2)
不要使用哈希。您可以将SQLite与文件存储一起使用,这也将允许您查询,基本索引等。如果您关注内存与文件存储性能,请阅读Quickly dumping a database in memory to file。
作为ruby sqlite连接器,您可以使用https://github.com/sparklemotion/sqlite3-ruby
希望有所帮助。
答案 1 :(得分:1)
我认为这就是您所寻找的,但如果我错了,您可能需要详细说明问题。
hash = {}
result = ActiveRecord::Base.connection.execute('YOUR QUERY HERE')
while((r = result).present?)
hash[r.url] = r
end
或者(但慢慢地)
hash = {}
Product.all.each do |p|
hash[p.url] = p.attributes
end
假设该表包含id,url,code,price;它应该是这样的:
{
'www.whatever.com' => {id: 1, url: 'www.whatever.com', code:'123', price: '123'}
'www.whatever2.com' => {id: 2, url: 'www.whatever2.com', code:'321', price: '321'}
}
答案 2 :(得分:1)
取决于该哈希的数据结构。我们是在谈论一个非常复杂的结构(嵌入式结构)还是一个简单的键/值。
如果复杂拉出关键信息并将其存储在列(id,sku,name,description ..)中。如果足够大,其余部分可以存储在varchar字段中。然后你可以序列化/反序列化为hash / json字符串。
如果它是一个简单的结构,我会创建一个模型来表示它。