私は複合要素の1次元(N×1)データセットを持つHDF5ファイルを持っています。実際には時系列です。データは最初にオフラインでHFD5ファイルに収集され、分析されます。分析の間、ほとんどのデータは興味深いものであることが判明し、その一部だけが興味深いものです。データセットは非常に大きくなる可能性があるので、面白いものを残しながら、興味のない要素を取り除きたいと思います。たとえば、500要素のデータセットの要素0〜100および200〜300および350〜400を保持し、残りをダンプします。しかしどうですか?HDF5ファイルからデータを削除する
HDF5でこれをどのように達成した経験がありますか? 、
- (明白な解決策)新しい新鮮なファイルを作成し、そこに要素ごとに、必要なデータを書き込む:どうやらそれは、少なくとも、いくつかの方法で行うことができます。その後、古いファイルを削除します。
- 古いファイルに新しい新しいデータセットを作成し、そこに必要なデータを書き込み、H5Gunlink()を使用して古いデータセットのリンクを解除し、h5repackでファイルを実行して未請求の空き領域を取り除きます。
- または、既存のデータセット内の興味深い要素を開始点に向かって移動します(たとえば、要素200〜300を101〜201の位置に移動し、350〜400の要素を202〜252の位置に移動します)。次に、H5Dset_extent()を呼び出して、データセットのサイズを縮小します。次に、空き領域を解放するためにh5repackを実行してください。
興味のない要素が削除されてもファイルがかなり大きくなる可能性がありますので、書き直しはしません(時間がかかります)が、実際に空き領域を解放する必要があるようです。 HDF5の専門家からのヒント?
あなたの考えをありがとう。それは実際に多くの方法で行うことができます。うまくいけば、本当に削除機能がいつかHDF5に追加されます。ちょうどこのようなものを削除するだけでほぼばかげています...しかし、そうでなければ、良いファイル形式です:-) –
削除とパッキングは簡単ではありません。 HDF5はファイルシステムに似ています。ブロックを解放しても、それらを削除済みとしてマークしても、「ライブ」中にファイルをパッキングするのは難しく、パフォーマンスのボトルネックになります。あなたはMacOSX上の暗号化されたファイルシステムと同じ問題に直面しています。私の推測では、いつでもHDF5レベルであなたの問題に対する解決策は期待できません。 –
確かに、HDF5開発者にとっては、それは簡単ではなく、おそらく第一の関心事ではないでしょう。しかし、それは確かに可能です - ほとんどのデータベースはそれを行うことができます、と私は思います。 –