【发布时间】:2012-04-15 20:02:24
【问题描述】:
我想就用于索引时间序列的最佳数据结构(又名按列数据,又名扁平线性)向 SO 同行征求意见。
基于采样/离散化特性存在两种基本类型的时间序列:
正则离散化(每个样本都以相同的频率采集)
不规则离散化(样本取自任意时间点)
需要的查询:
时间范围[t0,t1]内的所有值
时间范围 [t0,t1] 中大于/小于 v0 的所有值
时间范围[t0,t1]中的所有值在值范围[v0,v1]中
数据集由汇总的时间序列(可以克服不规则离散化)和多元时间序列组成。所讨论的数据集大小约为 15-20TB,因此以分布式方式执行处理 - 因为上述某些查询将导致数据集大于任何一个系统上可用的物理内存量。
在这种情况下,分布式处理还意味着将所需的数据特定计算与时间序列查询一起分派,以便计算可以尽可能靠近数据进行 - 从而减少节点到节点的通信(有点类似映射/减少范式)- 计算和数据的短距离是非常关键的。
索引应该能够应对的另一个问题是,绝大多数数据是静态/历史数据 (99.999...%),但是每天都会添加新数据,想想“在现场传感器”或“市场数据”。想法/要求是能够以尽可能低的延迟更新任何正在运行的计算(平均值、garch 等),其中一些正在运行的计算需要历史数据,其中一些将超过可以合理缓存的数据。
我已经考虑过 HDF5,它对于较小的数据集运行良好/高效,但随着数据集变大开始拖累,前端也没有原生并行处理能力。
寻找建议、链接、进一步阅读等(C 或 C++ 解决方案、库)
【问题讨论】:
-
类型 1-3 的查询通常称为“正交范围报告”。
-
@Martin:谢谢你,但是只有一把锤子的问题是一切看起来都像钉子——在一个高度面向 db/dba 的 Q/A 网站上提出这样的问题,将导致略带偏见的回答。
-
@Xander:不用担心 - 我没有在这里发表任何评论,只是链接到 DBA 问题,这是有原因的。我只是想知道如何/是否可以在传统的 RDBMS 设置中解决您的问题。并不是说这将是最好的解决方案。
标签: c++ algorithm indexing data-structures large-data