在h5py或类似的分层数据库中快速搜索



我需要一个数据库的在线目录;如果可能的话,每个产品一个数据集。和一个简单的数据库;这就是我爱你的原因。

方法visititems的分组,它不是快的大文件。


import h5py
#in memory database. Not relevant for this question, same speed. Yes.
database = h5py.File('db01h5', driver='core', backing_store=False)
#example of 10000 datasets with a deep of 4 group, file/x10/x10/x10/x10dset
for v1 in ('abcdefghij'):
    for v2 in ('abcdefghij'):
        for v3 in ('abcdefghij'):
            for v4 in ('0123456789'):
                database['/' + v1 + '/' + v2 + '/' + v3 + '/' + 'dset' + v4] = (1, 2, 3)

def fu01(a1, a2):
    pass
#visititems applies function fu01(name, object) to each group and dataset 
database.visititems(fu01)

带有不计算任何值的函数(pass)"database.visititems(fu01)"耗时5秒。使用基本参数进行过滤,需要x2。

我的问题是如何搜索到一个大型或非常大的h5py数据库,按特征过滤,并且非常快(不到0.1秒,10000个产品)。

是h5py/hdf5正确的方式,还是需要像sqlite3这样的sql数据库?

或者当需要速度时,所有数据必须在同一个数据集中?将树路径作为一个元素。例如:

database['dataset'] = [['root/categorie/subcategorie/productname'], ['2'], ['10$'], ['blue']]

然后按一个"列"过滤所有产品(高级切片)。

我是数据库的新手,此时我对内存工作的数据库不感兴趣,比如redis或类似的;因为很难同步数据中的更改。

这不是hdf优化要做的。它的设计是为了有效地存储少量非常大的数据集,并且偶然发现大量非常小的数据集。

我认为你最好使用某种实际的数据库,无论是关系数据库还是非关系数据库。

你可能也想构建你自己的树实现,什么是慢的visititems是走组/数据集树的hdf文件

最新更新