我正在创建一个应用程序,它必须存储各种股票的历史财务数据。目前,我有一个股票表,其中列是股票符号,股票名称和数字数据,我正在决定如何存储。
例如,对于列股票价格,我希望存储一个完整的散列,其中键以日期为字符串,而值为股票价格。这些信息应该容易访问(快速随机访问)。我读过一些关于序列化的文章,但是我想知道这是否是最好的选择(或者它是否完全适用)。是否有一种方法可以为输入的每个股票自动生成sqlite表,并创建代表日期和代表股票价格的行的列?
我感谢对这件事的所有洞察力,或许还能澄清一下,这究竟是我应该使用序列化的地方,还是有更好的选择?
编辑1: ActiveModel序列化是否相关?(http://railscasts.com/episodes/409-active-model-serializers)
编辑2:是否应该考虑创建一个股票价格模型&表,其中模型belongs_to一个股票和一个股票has_many股票价格。THe股票价格表将有一个常规id、一个stock_id(属于它的)、一个日期列和一个股票价格值列。与序列化相比,我希望对运行时内存使用情况进行一些分析,以及将来如何分析它。
发布于 2014-08-01 03:20:05
您是对的,可以将其存储为散列。对于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指定一个类,除非您考虑到该类的特定方法。此外,根据您的设计,您可能能够保持股票类别更有凝聚力,保持股票价格作为股票的属性。
发布于 2014-08-01 15:56:04
您提到了“该信息应该易于访问(快速随机访问)”--在这种情况下,序列化列不是一个好的选择。假设您保存了20年的数据,那么在序列化的价格中,它将是20*365个键值对。但你可能只对这其中的一小部分感兴趣--比如说,在过去的6个月里。如果使用序列化选项,则整个数据(用于价格字段)将从db传输到ruby进程,并得到反序列化,然后再次需要过滤ruby进程中的价格散列。在不同的价格表中,db可以为您进行筛选,并且您可以使用良好的索引进行快速响应。
您是否探索过任何时间序列dbs?
https://stackoverflow.com/questions/25072307
复制相似问题