键值字符串的 h5py 数据集中的数据检索缓慢

Slow data retrieval in h5py dataset of key-value strings

给定以下 h5py 文件 root -> group1 -> million key,val pairs:
检索任意数量的数据集(甚至 1 个)都需要非常长的时间(~10 秒),我想知道我是否可以以不同的方式插入它们以控制该行为(我假设缓存对于我的用例来说太大了,但默认大小为 1MB)
行为如下:

script A

hdf5 = h5py.File(path_to_h5py, libver='latest',mode='a')
hdf5_dataet = hdf5.create_group(name_of_dataset)
for key, val in tqdm(dataset.items()):
    hdf5_dataet.create_dataset(json.dumps(key),data=json.dumps(val))

script B

f = h5py.File(path_to_h5py,'r')
data = f[name_of_dataset]
key_example = next(data.__iter__()) ---------> This takes 10 seconds

HDF5 不像 Python 字典那样使用 key/value 对。数据结构更像是 NumPy 数组。我不知道你最终想做什么。脚本 B 有一个简单得多的迭代器。试试这个:

h5f = h5py.File(path_to_h5py,'r')
data = h5f[name_of_dataset]
for key_example in data:
    print (key_example)

2020 年 4 月 25 日添加了简单测试以检查 I/O 性能:

import h5py
import time

upper = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
lower = 'abcdefghijklmnopqrstuvwxyz'
nums = '0123456789'

with h5py.File('SO_61417130.h5','w') as h5w:

    nrows = 16
    nrpts = 100

    #vstr_dt = h5py.string_dtype(encoding='utf-8') # for h5py 2.10.0
    vstr_dt = h5py.special_dtype(vlen=str)   # for h5py 2.9.0
    vstr_ds = h5w.create_dataset('testvstrs', (nrpts*nrows,1), dtype=vstr_dt )
    print (vstr_ds.dtype, ":", vstr_ds.shape)    

    rcnt = 0
    for cnt1 in range(nrpts) :
        for cnt2 in range(nrows) :
            vstr_ds[rcnt]= ((cnt2+1)*(upper+lower+nums))
            rcnt +=1

    print (vstr_ds.dtype, ":", vstr_ds.shape)    
    print ('done writing')

    start = time.clock()
    for cnt in range(-nrows,0,1) :
        find_str = vstr_ds[cnt] 
        print (len(find_str[0]))

    print ('Elapsed time =', (time.clock() - start) )