在Julia中写入并附加到HDF5文件中的复合表

时间:2017-11-09 09:22:37

标签: julia hdf5

如何使用可变长度字符串列和各种标准类型的其他列(Int64,Float64,Bool)将数据写入HDF5中的化合物表并将其追加?

基础知识以某种形式出现在朱莉娅身上。 HDF5.jl使用HDF5 Group的C接口,JLD2.jl编写完全在Julia中实现的自定义HDF5文件,但我还没有找到创建,写入和附加到这样的复合表的方法。

我的目标是拥有一个文件,用于存储明确注释的多个乐器的数据。随着更多数据的进入,它将定期附加到这些HDF5文件。需要一个二进制文件来保持文件的可管理大小,并且需要一个通用标准来实现我们组中使用的编程语言之间的可移植性。数据库对我们的用例不实用。

1 个答案:

答案 0 :(得分:0)

我认为您将能够做您想做的事情,但我认为最好的方法可能是阅读HDF5用户指南,了解HDF5的工作原理。这里发布的问题非常广泛,类似于询问"如何在关系数据库中存储数据?"

有些事情可以指出你正确的方向:

  • HDF5不是关系型数据库,即使PyTables将表格界面映射到HDF5上,从语义上讲,引用HDF5表和列也是不正确的。相反,有HDF5数据集可以存储特定类型的元素。这些元素可以是复合类型,大致相当于C结构,并且有一个或多个字段,这些字段也是特定类型。

  • 如果要存储异构数据,可能需要多个数据集。如果您有多台仪器,特别是如果它们具有不同的数据速率,我可能会将它们的数据存储在不同的数据集中。你也许可以使用一个巨大的数据集,它有一个巨大的复合类型,可存储你所有乐器的所有数据,但这几乎肯定会很尴尬,性能更差,而且也不会压缩。

  • 我会避免使用HDF5可变长度类型。它们使用起来很笨拙,数据无法压缩,性能很差,因为它们打破了局部性(数据集只存储对单独文件位置的引用,其中保存了真实数据)。相反,可以考虑通过连接数据并将单独的索引数据集存储到concat数据集的起点/终点,或者存储大到足以容纳典型数据的固定数量的数据点来展平数据。例如,如果您需要存储永远不会超过100个字符的字符串,只需创建一个n x 100数据集,压缩可能会处理额外的空值。大多数认为他们需要HDF5可变长度类型的人实际上并不需要可变长度类型。事实上,我想说大多数初次接触HDF5并询问vlen类型的人实际上只需要可扩展的数据集。

HDF5用户指南位于: https://support.hdfgroup.org/HDF5/doc/index.html