2

我拥有的是大约 130GB 的数千种金融工具订单簿的时变状态数据。

我拥有的 csv 文件在订单簿状态的每次更改中都包含一行(由于执行的交易、插入的订单等)。状态被描述为:一般订单信息的几个字段(例如工具的isin代码),有关状态变化的一些信息字段(例如orderType,时间),最后是当前状态的买入和卖出水平。卖出和买入订单最多有 20 个级别(买入级别 1 代表最佳买入价,卖出级别 1 代表最佳卖出价等),每个级别包含 3 个字段(价格、总成交量和订单金额)。最后,对于买方和卖方,还有 3 个超过 20 级别的聚合数据字段。这相当于每个州最多 21*2*3 = 126 个级别数据字段。

问题在于,由于几乎不存在接近 20 个级别的任何地方,因此为每个级别保留字段似乎没有意义。例如,我会有一行有 3 个买入级别,其余字段为空。另一方面,同一订单簿在片刻后可能有 7 个买入级别。

我肯定会将一般订单信息规范化到它自己的表中,但我不知道如何有效地处理级别。

任何帮助将非常感激。

4

1 回答 1

0

我不得不在某个时间点准确地处理这种数据结构。一个重要的问题是如何使用数据。如果您只是在任何给定时间寻找最佳出价和要价,那么水平并没有太大区别。如果您正在分析市场深度,那么水平可能很重要。

对于您正在使用的数据量,索引和分区等其他考虑因素可能更为重要。如果特定查询所需的数据适合内存,那么整个表有多大并不重要。

我的建议是将不同级别保持在同一记录中。然后,您可以使用页面压缩(取决于您的存储引擎)来消除为空值保留的大部分空间。SQL Server 会自动执行此操作,因此将级别放在单个记录中是很容易的。

如果页面压缩不起作用,一个折衷的解决方案是存储固定数量的级别。通常会填充五个级别,因此您不会遇到在空白字段上浪费空间的问题。而且,这个级别的数量可能足以满足几乎所有的使用。

于 2012-12-19T15:37:28.323 回答