kdb +历史数据库分区设计 - 数千个符号的日常数据

时间:2015-02-12 18:02:25

标签: database-design kdb

kdb+符号(例如股票,指数,ETF)上存储每日价格/回报数据的10,000数据库的最佳分区(如果有的话)是什么?

我们谈论的是每个符号25年的每日数据(中位数)(25 * 200 = 5,000 records)。因此整体尺寸为10,000符号x 5,000天= 50,000,000条记录。

数据库将在当天结束时为每个符号一个新价格。

最典型的查询是读取一个子集(10s甚至100s)符号的整个每日价格历史记录,以进行进一步的时间序列分析/投资组合模拟。

我正在考虑按符号进行分区,但没有发现任何人在网上这样做,所以不确定这是不是最好的主意。 我找到了大量高于每日频率的解决方案,他们将刻度数据分区(每个日期都有自己的分区,例如2015-02-12),或者按符号分区范围(例如ABC DEF GHI ...),但不是个别符号

在回测/投资组合模拟应用程序 [1] 中,我怀疑通过能够并行计算价格变换(例如移动平均线或RSI),通过单个符号进行分区可能会有一些优势通过为每个工作节点提供它自己的符号来处理。相反,按日/周/年划分则不会提供这种优势。

[1] 其实基本上是首先循环每个符号并将其时间序列预处理到变换的时间序列中以生成信号(例如,计算价格的移动平均值)。然后每天循环一个路径依赖(其中投资组合是一个有状态的对象)时尚每天检查和处理信号

1 个答案:

答案 0 :(得分:1)

正如@GilbertLeBlanc所说,50米肯定不是很多,如果这是预期的大小,那么最好(在这个用例中)显示表(即根本没有分区)以及使用列上的属性您将用于过滤(p# or g#on ticker,因为您将对其进行过滤,在新数据被插入的情况下注意保持这些属性)。但显然,如果你计划扩展它(超过100米行),那么splay table方法将无法很好地扩展。

如果您主要计划搜索特定sym的所有历史数据,那么日期分区将是一个坏主意(因为查询必须遍历每个日期分区=许多磁盘读取)。