大量数据的数据库设计

时间:2013-10-29 10:34:34

标签: database database-design stocks

我想存储1000个符号的股票交易数据。实际上,数据是从文本文件转换而来的,因此不需要插入和更新;只需要只读权限。

数据基本上按如下方式分组:每个符号都有许多记录:{timestamp, price, quantity},每条记录代表一笔交易。

一个符号的近似数据上限为5个记录/秒,每个工作日为8小时,即每天5x60x60x8 = 144K。即1K符号每天会产生144M记录。

对数据的大多数操作都是这样的:

  • 给我所有日期D1,时间T1到日期D2,时间T2
  • 的符号记录
  • 查找期间的最低/最高/平均价格或数量[D1,T1 ... D2,T2]

现在的问题是:在这种情况下,数据库的最佳设计是什么?

  • 我可以将符号的所有交易存储在一个表中吗?在这种情况下,表格会很快变得过大。
  • 我应该每天/每周/每月创建一个单独的表吗?即2013-10-25_ABC(ABC - 符号名称)。在这种情况下,我们每天/每周/每月可以获得1K新表。
  • 或者,在这种情况下,纯文本文件是否足够?例如,将所有符号数据作为2013-10-15文件夹下的文件,在每个文件夹中生成1K文件

数据库可以是MS SQL或MySQL。总时间 - 最长5年。 谢谢!

3 个答案:

答案 0 :(得分:3)

第三个选项是最好的1.您需要高读取性能且写入几乎可以忽略不计。

您的要求最适合NoSql数据库。单表没有关系; MySQL会有点矫枉过正。更多信息 - > NoSql Databases

答案 1 :(得分:2)

由于您将从一个日期时间到另一个日期时间运行查询,因此我根本不会拆分表。相反,请详细了解sharding。以下是我将使用的架构:

symbols
    id          varchar(6) // MSFT, GOOG, etc.
    name        varchar(50) // Microsoft, Google, etc.
    ...

trades
    id              unsigned bigint(P)
    symbol_id       varchar(6)(F symbols.id)
    qwhen           datetime
    price           double
    quantity        double
    ...

答案 2 :(得分:2)

这是一大堆数据。看看NoSQl。

使用SQL,这里有一些基本的想法:

将所有价格数据放在表格中,使用尽可能小的数据类型。使用SymbolId(int)引用符号,所需的最小日期时间类型,所需的最小货币类型。

做反规范化。制作第二张桌子,每天使用min / max / avg和SymbolId。

研究水平分区和使用索引。