代码之家  ›  专栏  ›  技术社区  ›  Richard Corden

评估HDF5:HDF5为建模数据提供了哪些限制/功能?

  •  39
  • Richard Corden  · 技术社区  · 16 年前

    我们正在评估用于存储C/C++代码分析过程中收集的数据的技术。在C++的情况下,数据量可以比较大,每个tu~20MB。

    在阅读以下内容之后,所以 answer 这让我觉得 HDF5 可能是一种适合我们使用的技术。我想知道这里的人是否可以帮助我回答我最初的几个问题:

    1. 性能。数据的一般用法是只写一次并读“几次”,类似于编译器生成的“.o”文件的生存期。hdf5与使用类似sqlite db的数据库相比如何?这是一个合理的比较吗?

    2. 随着时间的推移,我们将添加我们正在存储的信息,但不一定要重新分发一组全新的“读卡器”,以支持新的格式。在阅读用户指南后,我了解到HDF5类似于XML或DB,因为该信息与标记/列相关联,因此为读取旧结构而构建的工具只会忽略与之无关的字段?我对这个的理解是正确的吗?

    3. 我们希望写出的大量信息将是树型结构:作用域层次结构、类型层次结构等。理想情况下,我们将作用域建模为具有父级、子级等。是否可以让一个HDF5对象“指向”另一个对象?如果没有,是否有一种标准技术可以使用HDF5来解决这个问题?或者,正如数据库中所要求的那样,我们是否需要一个唯一的键,在搜索数据时,该键会通过适当的查找将一个对象“链接”到另一个对象?

    多谢!

    2 回复  |  直到 10 年前
        1
  •  22
  •   Jason S    16 年前

    hdf5与使用类似sqlite db的数据库相比如何? 这是一个合理的比较吗?

    有点类似,但不是真的。它们都是结构化文件。sqlite具有使用SQL支持数据库查询的功能。HDF5具有支持大型科学数据集的功能。

    他们都是为了表现出色。

    随着时间的推移,我们将添加我们正在存储的信息,但不一定要重新分发一组全新的“读卡器”,以支持新的格式。

    如果以结构化形式存储数据,那么这些结构的数据类型也存储在HDF5文件中。我对这是如何工作有点生疏(例如,如果它包含了与生俱来的向后兼容性),但是我知道如果你正确地设计了你的“阅读器”,它应该能够处理将来改变的类型。

    是否可以让一个HDF5对象“指向”另一个?

    绝对!你会想用的 attributes . 每个对象都有一个或多个描述到达该对象的路径的字符串。HDF5 groups 类似于文件夹/目录,只是文件夹/目录是分层的=一个唯一的路径描述每个人的位置(至少在文件系统中没有硬链接),而组形成一个可以包含循环的有向图。我不确定是否可以将指向对象的“指针”直接存储为属性,但始终可以将绝对/相对路径存储为字符串属性。(或者其他任何地方作为一个字符串;如果您需要的话,您可以有大量的查找表。)

        2
  •  9
  •   Community Mohan Dere    8 年前

    我们在我的项目中生成HDF5数据,但我通常不直接处理它。我可以尝试一下前两个问题:

    1. 我们使用一次写,多次读的模式和格式似乎处理得很好。我知道一个项目,曾经把这两个都写给 甲骨文公司 数据库和HDF5。最终,他们删除了Oracle的输出,因为性能受到影响,没有人使用它。显然,sqlite不是Oracle,但是hdf5格式更适合于该任务。基于这一数据点,RDBMS可以更好地针对多个插入和更新进行调优。

    2. 当我们添加新的数据类型时,客户使用的读卡器是健壮的。一些变化是可以预料的,但是我们不必担心在添加更多的数据字段时破坏它。我们的DBA最近编写了一个python程序来读取HDF5数据并填充kmz文件,以便在GoogleEarth中实现可视化。因为这是他学习Python的一个项目,所以我想说构建读者并不难。

    关于第三个问题,我将向 Jason S's superior knowledge .

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