私は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バイトを占める必要があります。私はデータと一緒に何かの属性を保存しません。しかし、テストでは、各サブグループが約4kB、つまり私が期待する約2倍を占めることがわかりました。私はいくつかのオーバーヘッドがあることを理解していますが、どこから来ていますか、どのように減らすことができますか?それはグループの構造を表すことにありますか?
詳細情報: 各サブグループの2つのデータセットのサイズを1000 x 4および1000に増やした場合、各サブグループは予想通りの20,000バイトではなく、約22,250バイトを占めます。これは、サブグループごとに2.2 kBのオーバーヘッドを意味し、より小さいデータセットサイズで得られた結果と一致しています。このオーバーヘッドを減らす方法はありますか?
HDF5ファイル形式は[非常に複雑です](http://www.hdfgroup.org/HDF5/doc/H5.format.html)です。内部ブロッキングを使用してデータおよびメタデータ・オブジェクトを格納します。メタデータのデフォルトのブロックサイズは2 KiBで、各(サブ)グループには独自のヘッダースペースがあり、これは約2000バイトの差異を説明しています。ストレージ戦略の詳細については、(4.5)[here](http://www.hdfgroup.org/HDF5/doc1.6/UG/10_Datasets.html)を参照してください。 –
私が上記で与えた数字は、 'COMPACT'がセットされています。これからの教訓は、少量のデータを格納する複雑なグループ構造を回避することです。すべてのデータセットをより大きな配列に結合して圧縮を適用した後は、1:1のパッキング比より優れています(圧縮ではHDF5のオーバーヘッドよりも多くの領域が節約されます)。 – Thucydides411
@ Thucydides411あなたのコメントは最善の答えです!あなたはそれを答えに書いてそれを受け入れるべきです。 – Simon