如何查询hdf5时间序列

时间:2011-03-21 06:19:50

标签: c++ hdf5

我使用H5TB API将(非等距)时间序列存储为hdf5文件中的表。格式如下:

time   channel1   channel2
0.0    x          x
1.0    x          x
2.0    x          x

还有“详细数据”的插入,如下所示:

time   channel1   channel2
0.0    x          x
1.0    x          x
1.2    x          x
1.4    x          x
1.6    x          x
1.8    x          x
2.0    x          x

现在我想以另一种数据格式存储数据,因此我喜欢像这样“查询”hdf5文件:

select ch1 where time > 1.6 && time < 3.0

我想到了几种方法来执行此查询:

  1. 有一个名为B-Tree Index的内置功能。是否可以使用它来索引数据?
  2. 我需要在时间频道上进行二分搜索,然后阅读频道值
  3. 我自己创建一个索引(并在有细节插入时更新它)。在这里使用的最佳算法是什么?
  4. 索引的主要动机是快速查询响应。

    你在这里建议什么?

3 个答案:

答案 0 :(得分:2)

我终于找到了另一个(明显的)解决方案。最简单的方法是打开hdf5文件,只读取时间通道并在读取数据通道之前创建内存映射。甚至可以通过使用稀疏hyperslab读取时间通道来优化此过程。

当特定时间的索引已知时,可以读取数据。

答案 1 :(得分:1)

假设您没有询问如何从hdf5文件中解析数据,而只是解释了解析后如何使用数据....

鉴于class channel_data { ... };std::map <double, channel_data>应符合您的需求,具体为std::map<>::lower_bound()std::map<>::upper_bound()

答案 2 :(得分:0)

解决此问题的一种流行方法似乎是使用bitmap indexing。还有一些关于这样做的论文,但它们似乎没有发布任何代码。