2013-03-23 90 views
4

我最近一直给予了140家企业建模数据库适合 店股价的分配。数据将从所有这些公司每隔15分钟收集一次,每天8.5小时收集。我 现在面临的问题是如何建立数据库,以实现快速搜索/取 给出这个数据。数据库建模股票价格

一个解决办法是一切都在一个表中存储与以下几列:

| Company name | Price | Date | Etc... | 

或者我可以创建一个表中的每个公司只存储价格和 日期收集数据时(和其他参数未知atm)。

你对这些类型的解决方案的想法?我希望这个问题得到足够详细的解释 ,否则请让我知道。

任何其他解决办法,将不胜感激!

回答

2

考虑到您可能生成的大量记录,我认为您关注的是性能 - 140家公司* 4个数据点/小时* 8.5小时* 250个交易日/年意味着您在寻找大约120万数据点每年。

现代关系数据库系统,可以轻松处理的记录,这个数字 - 但有一些重要的考虑因素 - 在一个表 - 我不明白的问题与程式储存100年的数据点。

所以,是的,你的初始设计可能是最好的:

公司名称|价格|日期|等等...|

在公司名称和日期上创建索引;这将允许您来回答这样的问题:

  • 什么最高股价为X公司
  • 什么是股价为X公司于日期Y
  • 的日期Y,什么是份额最高价格

为了防止性能问题,我想建立一个测试数据库,并用样本数据来填充它(如dbMonster工具使这个容易),然后建立你(想你)将运行对查询真实系统;使用数据库系统的调整工具来优化这些查询和/或索引。

+0

谢谢,这给了我很大的见解。 – RobertH 2013-03-24 13:56:08

3

第一,更重要的问题是什么,将根据此表来执行的查询的类型和使用模式。这是一个联机事务处理(OLTP)应用程序,绝大多数查询是针对单个记录还是最多一小组记录?或者在线分析处理应用程序中,大多数查询都需要读取和处理大量数据以生成聚合和分析。这两种不同类型的系统应该以不同的方式建模。

如果它是第一种类型的应用程序(OLTP),则您的第一个选项是更好的选项,但查询的使用模式和类型对于确定放置在表上的索引类型仍然很重要。

如果它是一个OLAP应用程序(和存储数十亿股价的系统听起来更像是一个OLAP应用程序),那么您设置的数据结构可能会更好地组织起来存储预先汇总的数据值,或者甚至全部方式的使用多维数据库就像一个OLAP cube的基础上,star schema

3

将它们放入一张表中。现代数据库引擎可以轻松处理您指定的这些卷。

rowid | StockCode | priceTimeInUTC | PriceCode | AskPrice | BidPrice |卷

  • rowid:Identity UniqueIdentifier。
  • StockCode而不是公司。公司有多种类型的袜子。
  • PriceTimeInUTC是将任何日期时间标准化为特定的时区。
  • 还datetime2(更准确)。
  • PriceCode用于识别它的价格是什么:选项/期货/普通股,PreferredStock等
  • AskPrice是买入价格
  • BidPrice是销售价格。
  • 量(买/卖)可能对你有用。

另外,有一个StockCode表和一个PriceCode表。

+0

感谢您的好评! – RobertH 2013-03-24 13:54:54

0

这是一个蛮力的方法。第二个你添加可搜索因素,它可以改变一切。一个更灵活和优雅的选项是一个星型模式,它可以扩展到任何数量的数据。我自己也是一个私人派对。

3

除了已经说过的话,我想说的是:不要使用“公司名称”或“Ticker Symbol”作为主键。正如你可能会发现,股票价格有一个经常被忽视的两个重要特征:

  • 一些企业可以在多个交易所被引用,因此对各交易所不同的报价价格。
  • 有些公司在同一个证券交易所上被多次报价,但以不同的货币报价。

因此,正确的通用解决方案应该使用(ISIN,货币,证券交易所)三元组作为报价的标识符。