c++ - 如何对hdf5时间序列进行查询

标签 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 树索引的内置功能。是否可以使用它来索引数据?
  2. 我需要对时间 channel 进行二分搜索,然后读取 channel 值
  3. 我自己创建一个索引(并在有详细信息插入时更新它)。这里使用的最佳算法是什么?

索引的主要动机是获得快速的查询响应。

您在这里有什么建议?

最佳答案

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

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

关于c++ - 如何对hdf5时间序列进行查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5374447/

相关文章:

c++ - 如何 static_assert 给定的函数调用表达式是否可以编译?

c++ - printf( ) 的内存消耗

c++ - 凌乱的选择循环

python - Pandas 无法读取用 h5py 创建的 hdf5 文件

C++ HDF5 找不到-lhdf5d

c++ - 为什么 TRACE() 抛出 float 下溢异常?

结构解释的C++排序 vector

python - 使用 Pandas 在 HDF 中存储包含字符串的数据帧时的神秘之处

python - 如何使用 h5py 从 HDF5 数据集中读取字符串

写入 hdf 时的 Pandas/Pytable 内存开销