【问题标题】:Fast search in a h5py or similar hierarchical database在 h5py 或类似的分层数据库中快速搜索
【发布时间】:2013-04-04 21:14:08
【问题描述】:

我需要一个用于在线目录的数据库;如果每个产品可能有一个数据集。和一个简单的数据库;这就是我喜欢 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)

使用不评估任何内容的函数(通过)“database.visititems(fu01)”需要 5 秒。使用基本参数进行过滤需要 x2。

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

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

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

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

然后按“列”过滤所有产品(高级切片)。

我是数据库新手,目前我对在内存中工作的数据库不感兴趣,比如 reddis 或类似的;因为很难同步数据的变化。但如果没有其他解决办法……

【问题讨论】:

    标签: python database h5py


    【解决方案1】:

    这不是hdf 的优化目标。它旨在有效地存储少量非常大的数据集,并偶然发现大量非常小的数据集。

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

    您可能还想构建自己的树实现,visititems 的缓慢之处在于遍历 hdf 文件的组/数据集树。

    【讨论】:

      猜你喜欢
      • 2015-12-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-08
      相关资源
      最近更新 更多