HDF5(Hierarchical Data Format)は、大量のデータを効率的に格納するためのファイル形式です。この形式では、データセットを削除してもファイルサイズが即時に縮小するわけではなく、解放された領域が再利用可能な状態になります。この空き領域をファイルシステムに返却し、ファイルサイズを実際に縮小させるには、ファイルを閉じて再び開くという操作が必要です。以下に、Pythonのh5pyライブラリを使用した具体的な手順とコード例を示します。
まず、h5pyライブラリがインストールされていることを確認してください。インストールされていない場合は、pipを使用してインストールできます。
pip install h5py
次に、HDF5ファイルを開き、データセットを作成します。この例では、sample_data.h5という名前のファイルを開き、temperature_readingsという名前のデータセットを作成します。
import h5py
# HDF5ファイルを開く('a'モードは読み書きを許可し、ファイルが存在しない場合は作成します)
hdf_file = h5py.File('sample_data.h5', 'a')
# 新しいデータセットを作成
# ここでは、50x50の浮動小数点数配列を作成します
temp_ds = hdf_file.create_dataset("temperature_readings", (50, 50), dtype='f')
データセットを作成した後、それを削除してみましょう。この操作は、ファイル内のデータを削除しますが、ファイルの物理的なサイズはすぐには変更されません。
# データセットを削除
del hdf_file['temperature_readings']
削除操作後、ファイルサイズが変化したかどうかを確認します。この時点では、ファイルサイズは通常、変わりません。
# 削除前のファイルサイズを確認
initial_size = hdf_file.id.get_file_size()
print(f"削除前のファイルサイズ: {initial_size} バイト")
# データセットを削除
del hdf_file['temperature_readings']
# 削除後のファイルサイズを確認(サイズは通常変わりません)
current_size = hdf_file.id.get_file_size()
print(f"削除後のファイルサイズ: {current_size} バイト")
ファイルシステムに空き領域を返却し、ファイルサイズを実際に縮小させるには、ファイルを閉じて再度開く必要があります。このプロセスは、HDF5ライブラリにファイルの内部構造を再構築させ、未使用の領域を解放させるトリガーとなります。
# ファイルを閉じる
hdf_file.close()
# ファイルを再度開く
hdf_file = h5py.File('sample_data.h5', 'a')
# 再度開いた後のファイルサイズを確認(サイズが縮小しているはずです)
final_size = hdf_file.id.get_file_size()
print(f"ファイルを再オープン後のサイズ: {final_size} バイト")
このアプローチにより、HDF5ファイル内で不要になったデータセットが占有していた領域を効率的に解放し、ディスクスペースを最適化できます。特に、大規模なデータセットを頻繁に作成・削除するアプリケーションでは、このテクニックが重要になります。