0

オンライン カタログ用のデータベースが必要です。可能であれば、製品ごとに 1 つのデータセット。そして単純なデータベース。それが私が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 データベースが必要ですか?

それとも、速度が必要な場合は、すべてが同じデータセットにある必要がありますか? ツリー パスを 1 つの要素として使用します。例えば:

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

次に、すべての製品を 1 つの「列」(高度なスライス) でフィルタリングします。

私はデータベースに不慣れで、現時点では、reddis などのメモリ内で動作するデータベースには興味がありません。データの変更を同期するのが難しいためです。しかし、他に解決策がなければ...

4

1 に答える 1