我需要一個在線目錄的數據庫;如果每個產品可能有一個數據集。和一個簡單的數據庫;這就是我喜歡h5py。在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 (''):
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或類似的;因爲很難同步數據中的更改。但如果沒有其他解決方案...