我正在探索 HDF5 .我已经阅读了“Evaluating HDF5”线程中有趣的评论,我知道 HDF5 是存储数据的首选解决方案,但您如何查询它?例如,假设我有一个包含一些标识符的大文件:有没有办法快速知道文件中是否存在给定的标识符?
最佳答案
我认为答案是“不直接”。
以下是我认为您可以实现该功能的一些方法。
使用组:
可以以 Radix Tree 的形式使用组的层次结构。来存储数据。不过,这可能不会很好地扩展。
使用索引数据集:
HDF 有一个引用类型,可用于从单独的索引表链接到主表。写入主数据后,可以使用其他带有引用的键排序的其他数据集。例如:
MainDataset (sorted on identifier)
0: { A, "C", 2 }
1: { B, "B", 1 }
2: { C, "A", 3 }
StringIndex
0: { "A", Reference ("MainDataset", 2) }
1: { "B", Reference ("MainDataset", 1) }
2: { "C", Reference ("MainDataset", 0) }
IntIndex
0: { 1, Reference ("MainDataset", 1) }
1: { 2, Reference ("MainDataset", 0) }
2: { 3, Reference ("MainDataset", 2) }
为了使用上述内容,在索引表中查找字段时必须编写二进制搜索。
内存索引:
根据数据集的大小,使用诸如“boost::serialize”之类的东西读取/写入其自己的数据集的内存索引可能同样容易。
HDF5-FastQuery:
此 paper (还有这个 page )描述了使用位图索引对 HDF 数据集执行复杂查询。我没有试过这个。
关于搜索 HDF5 数据集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1686869/