在Sqlite表中存储哈希。我使用序列化吗?

时间:2014-08-01 03:11:17

标签: sql ruby-on-rails ruby sqlite

我正在创建一个应用程序,必须存储各种股票的历史财务数据。 我目前有一个库存表,其中列是库存符号,库存名称以及我正在尝试决定如何存储的数值数据。

例如,对于列stockprice,我想存储整个哈希,其中键是日期作为字符串,值是股票价格。这些信息应易于访问(快速随机访问)。我已经阅读了一些关于序列化的内容,但我想知道这是否是最好的选择(或者它是否适用)。有没有办法为每个输入的股票自动生成一个sqlite表,并创建代表股票价格的日期和行的列?

我很欣赏对这个问题的所有见解,也许还有一些关于这是否正是我应该使用序列化或是否有更好的替代方案的澄清

编辑1:ActiveModel序列化是否相关? (http://railscasts.com/episodes/409-active-model-serializers

编辑2:建议考虑改为创建Stockprice模型&模型属于一个股票和一个股票has_many stockprices的表格。股票价格表将具有常规ID,stock_id(它所属的)和日期列以及股票价值列。我很欣赏一些关于运行时内存时间使用的分析,与序列化相比以及如何在将来分析它

2 个答案:

答案 0 :(得分:2)

你是对的,可以将它存储为哈希。我没有serialize的任何指标,但如果您开始注意到对您的应用程序产生重大影响,我建议您以此方式启动并优化数据存储。

你的迁移看起来像这样(一定要使用文本数据类型):

def self.up
    add_column :stocks, :price, :text
end

在您的模型中,您需要添加

serialize :price

您可以将价格创建为哈希并直接存储。

stock = Stock.new
stock.price = { :date => "#{Time.now}", :amount => 25.2 }
stock.save

编辑:除非您设计了特定于stock_price的功能,否则我将从序列化开始。由于Rails中的约定是每个表都有一个模型,因此最终会得到一个stock_price类。除非您对该类有特定的方法,否则没有必要为stock_price专门设置一个类。此外,根据您的设计,您可以通过将股票价格作为股票的属性来保持股票类别更具凝聚力。

答案 1 :(得分:0)

您提到过'此信息应易于访问(快速随机访问)' - 在这种情况下,序列化列不是一个好的选择。假设您保留了20年的数据,那么它将是序列化价格中的20 * 365个键值对。但是你可能只对一个用例的一部分感兴趣 - 比如最近6个月的情节。如果你使用serialize选项,整个数据(价格字段)将从db传输到ruby进程并被反序列化。然后你需要在ruby进程中过滤价格哈希。如果是单独的价格表,db可以为您进行过滤,您可以快速响应并获得良好的指数。

你有没有探索任何时间序列dbs?