我正在將大量的小數據集寫入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