使用h5py创建一个包含许多数据集的hdf5文件,我遇到了大量的速度下降。 2,88 mio数据集。这是什么原因?
我假设达到了数据集树结构的限制,因此必须重新排序树,这非常耗时。
这是一个简短的例子:
import h5py
import time
hdf5_file = h5py.File("C://TEMP//test.hdf5")
barrier = 1
start = time.clock()
for i in range(int(1e8)):
hdf5_file.create_dataset(str(i), [])
td = time.clock() - start
if td > barrier:
print("{}: {}".format(int(td), i))
barrier = int(td) + 1
if td > 600: # cancel after 600s
break
修改
通过对数据集进行分组,可以避免此限制:
import h5py
import time
max_n_keys = int(1e7)
max_n_group = int(1e5)
hdf5_file = h5py.File("C://TEMP//test.hdf5", "w")
group_key= str(max_n_group)
hdf5_file.create_group(group_key)
barrier=1
start = time.clock()
for i in range(max_n_keys):
if i>max_n_group:
max_n_group += int(1e5)
group_key= str(max_n_group)
hdf5_file.create_group(group_key)
hdf5_file[group_key].create_dataset(str(i), data=[])
td = time.clock() - start
if td > barrier:
print("{}: {}".format(int(td), i))
barrier = int(td) + 1
答案 0 :(得分:0)
在MetaData caching找到hdf5组的以下文档, 在演出急剧下降的情况下,我能够达到极限。 基本上,我调用(在C / C ++中,不知道如何从python访问类似的HDF5函数)H5Fset_mdc_config(),并将config参数中的max_size值更改为128 * 1024 * 124
这样做,我可以创建4倍多的数据集。
希望有帮助。