オンライン カタログ用のデータベースが必要です。可能であれば、製品ごとに 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 などのメモリ内で動作するデータベースには興味がありません。データの変更を同期するのが難しいためです。しかし、他に解決策がなければ...