我使用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
我想到了几种方法来执行此查询:
索引的主要动机是快速查询响应。
你在这里建议什么?
答案 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。还有一些关于这样做的论文,但它们似乎没有发布任何代码。