HDF5 数据集数量限制

Posted

技术标签:

【中文标题】HDF5 数据集数量限制【英文标题】:Limit on number of HDF5 Datasets 【发布时间】:2016-05-21 03:39:42 【问题描述】:

使用 h5py 创建包含许多数据集的 hdf5 文件,我在 ca 之后遇到了巨大的速度下降。 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

【问题讨论】:

由于您确实绘制了处理时间的曲线,也许您可​​以将其添加到问题中。另外,在一个文件中包含数百万个数据集的用例是什么?您确定不想要包含数百万行的单个数据集吗? 【参考方案1】:

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

这样做,我能够创建 4 倍以上的数据集。

希望对你有帮助。

【讨论】:

以上是关于HDF5 数据集数量限制的主要内容,如果未能解决你的问题,请参考以下文章

编写并将float数组附加到C ++中hdf5文件中的唯一数据集

连接大量 HDF5 文件

删除或更新 HDF5 中的数据集?

如何从 hdf5 保存/提取数据集并转换为 TiFF?

HDF5:如何将数据附加到数据集(可扩展数组)

来自多个 HDF5 文件/数据集的链数据集