2017-07-24 109 views
1

我想在我的python應用程序中與rocksdb進行交互,並在其中存儲任意的字典。我收集這些信息是爲了我可以使用類似pickle的東西來進行序列化。但我需要能夠根據其鍵的值過濾記錄。這裏有什麼合適的方法?如何通過字典鍵值促進字典記錄過濾?

+0

任意。口述可能有不同的鍵。 –

回答

1

讓我們假設您有一個名爲dict_keys的鍵的列表,並且您有一個名爲big_dict的字典,並且您只想過濾掉dict_keys中的值。

new_dict = {key: big_dict.get(key) for key in dict_keys} 
+0

這是否意味着每個記錄都將被反序列化? –

0

RocksDB是一個key-value存儲,並且兩個鍵和值是二進制字符串:如果真的存在這樣您可以編寫遍歷列表從字典抓住項目的字典理解。

  1. 如果您想按給定鍵進行過濾,只需使用Get接口來搜索數據庫。
  2. 如果要按給定的鍵模式進行篩選,則必須使用Iterator接口迭代整個DB,並使用與該模式匹配的鍵篩選記錄。
  3. 如果要按值或值模式進行過濾,則仍需要迭代整個數據庫。對於每個鍵 - 值對,反序列化該值,並檢查它是否等於給定值或匹配給定模式。

對於情況1和案例2,你不需要反序列化的所有值,但只有珍視等於給予重點或匹配的模式。但是,對於案例3,您必須反序列化所有值。

這兩種情況下2和案件3是效率低下,因爲他們需要迭代整個密鑰空間。

您可以配置RocksDB的密鑰進行排序,並且RocksDB對前綴索引有很好的支持。所以你可以通過密鑰高效地進行範圍查詢和前綴查詢。查看文檔以獲取詳細信息。

爲了高效地進行值過濾/搜索,您必須使用RocksDB創建一個值索引。