我需要一个在线目录的数据库;如果每个产品可能有一个数据集。和一个简单的数据库;这就是我喜欢的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数据库按特性过滤,并且速度非常快(10.000产品不到0.1秒)。
h5py / hdf5是正确的方法,还是需要像sqlite3这样的sql数据库?
或者也许在需要速度时,所有数据都必须在同一个数据集中?以树路径为一个元素。例如:
database['dataset'] = [['root/categorie/subcategorie/productname'], ['2'], ['10$'], ['blue']]
然后按一个“列”(高级切片)过滤所有产品。
我是数据库的新手,此时我对在内存中工作的数据库不感兴趣,比如reddis或类似的数据库;因为很难同步数据中的变化。但如果没有其他解决方案......
答案 0 :(得分:1)
这不是hdf
优化的。它旨在有效地存储少量非常大的数据集,并在大量非常小的数据集上发现。
我认为使用某种实际的数据库会更好,无论是关系型还是非关系型。
您可能还想构建自己的树实现,visititems
慢慢走向hdf文件的组/数据集树。