限制HDF5数据集的数量

时间:2016-02-10 16:47:11

标签: python hdf5

使用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

Time measurement for key creation

修改

通过对数据集进行分组,可以避免此限制:

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

Time measurement for key creation with grouping

1 个答案:

答案 0 :(得分:0)

MetaData caching找到hdf5组的以下文档, 在演出急剧下降的情况下,我能够达到极限。 基本上,我调用(在C / C ++中,不知道如何从python访问类似的HDF5函数)H5Fset_mdc_config(),并将config参数中的max_size值更改为128 * 1024 * 124

这样做,我可以创建4倍多的数据集。

希望有帮助。