评估HDF5:HDF5为build模数据提供了哪些限制/function?

我们正在评估将用于存储我们在分析C / C ++代码期间收集的数据的技术。 在C ++的情况下,数据量可能相对较大,每TU约20Mb。

在阅读以下的回答后 ,我认为HDF5可能是一个适合我们使用的技术。 我想知道这里的人是否可以帮我回答一些我最初的问题:

  1. 性能。 数据的一般用法是一次写入并读取“几次”,类似于编译器生成的“.o”文件的生命周期。 HDF5如何比较使用SQLite数据库? 这甚至是合理的比较吗?

  2. 随着时间的推移,我们将增加我们正在存储的信息,但不一定要重新分配一套全新的“读者”来支持新的格式。 在阅读完用户指南之后,我了解到HDF5与XML或数据库相似,因为信息与标签/列相关联,因此用于读取较旧结构的工具将忽略与其无关的字段? 我的理解是正确的吗?

  3. 我们希望写出的大量信息将是树型结构:范围层次结构,types层次结构等等。理想情况下,我们将范围build模为具有父项,子项等。是否有可能具有一个HDF5对象“点”到另一个? 如果没有,是否有一个标准的技术来解决这个问题使用HDF5? 或者,根据数据库中的要求,我们是否需要一个唯一的键,在search数据时通过适当的查找将一个对象“链接”到另一个对象上?

非常感谢!

HDF5如何比较使用SQLite数据库? 这甚至是合理的比较吗?

类似但不是真的。 他们都是结构化的文件。 SQLite具有支持使用SQL的数据库查询的function。 HDF5具有支持大型科学数据集的function。

他们都是高性能的。

随着时间的推移,我们将增加我们正在存储的信息,但不一定要重新分配一套全新的“读者”来支持新的格式。

如果以结构化forms存储数据,则这些结构的数据types也将存储在HDF5文件中。 我有点生疏,如何工作(例如,如果它包括先天的向后兼容性),但我知道,如果你正确地devise你的“读者”,它应该能够处理将来改变的types。

是否有可能有一个HDF5对象“指向”另一个?

绝对! 你会想要使用属性 。 每个对象都有一个或多个string来描述到达该对象的path。 HDF5 组类似于文件夹/目录,除了文件夹/目录是分层的=一个唯一的path描述每个人的位置(至less在文件系统没有硬链接),而组形成一个有向图,可以包含循环。 我不确定是否可以直接将对象的“指针”存储为属性,但可以始终将绝对/相对path存储为string属性。 (或其他任何地方作为一个string;如果你愿意的话,你可以查找表格)。

我们在我的项目上生成HDF5数据,但是我通常不直接处理。 我可以对前两个问题进行刺探:

  1. 我们使用一次写入,多次读取模型和格式似乎处理这个好。 我知道一个曾经写入Oracle数据库和HDF5的项目。 最终,他们删除了Oracle的输出,因为性能受到影响,没有人使用它。 很显然,SQLite不是Oracle,但HDF5格式更适合这个任务。 基于这一个数据点,对于多个插入和更新,可以更好地调整RDBMS。

  2. 当我们添加新的数据types时,我们客户使用的阅读器是健壮的。 其中一些变化是预料之中的,但我们不必担心在添加更多数据字段时发生的事情。 我们的DBA最近编写了一个Python程序来读取HDF5数据并填充KMZ文件以便在Google Earth中显示。 由于这是一个他曾经学习Python的项目,所以我认为build立读者并不难。

关于第三个问题,我会向Jason S的高级知识鞠躬。

我想说HDF5是一个完全合理的select,特别是如果你已经对它有兴趣或计划为科学界产生一些东西。