我正在将大量的小数据集写入HDF5文件,生成的文件大小大约是我投入的数据的天真表格的10倍。我的数据分层组织如下所示:HDF5存储开销
group 0
-> subgroup 0
-> dataset (dimensions: 100 x 4, datatype: float)
-> dataset (dimensions: 100, datatype: float)
-> subgroup 1
-> dataset (dimensions: 100 x 4, datatype: float)
-> dataset (dimensions: 100, datatype: float)
...
group 1
...
每个小组应占用500 * 4字节= 2000字节,忽略开销。我不会在数据旁边存储任何属性。然而,在测试中,我发现每个小组占用大约4 kB,大约是我预期的两倍。我知道有一些开销,但它从哪里来,我该如何减少它?它是代表团体结构吗?
更多信息: 如果我将每个子组中两个数据集的维数增加到1000 x 4和1000,那么每个子组占据大约22,250个字节,而不是我期望的平均20,000个字节。这意味着每个子群的开销为2.2 kB,并且与我用较小的数据集大小得到的结果一致。有什么办法可以减少这种开销吗?
HDF5文件格式[非常复杂](http://www.hdfgroup.org/HDF5/doc/H5.format.html)。它使用内部阻塞来存储数据和元数据对象。元数据的默认块大小为2 KiB,每个(子)组都有自己的头部空间,这解释了观察到的差异大约为2000字节。您可以尝试使用“COMPACT”存储 - 有关存储策略的更多信息,请参阅(4.5)[此处](http://www.hdfgroup.org/HDF5/doc1.6/UG/10_Datasets.html)。 –
上面给出的数字是用'COMPACT'设置的。这样做的教训是避免收集少量数据的复杂的群体结构。将所有数据集合到一个更大的数组中并应用压缩后,我的压缩比达到1:1(压缩节省的空间比HDF5开销增加更多)。 – Thucydides411
@ Thucydides411你的评论是最佳答案!你应该把它写在答案中并接受它。 – Simon