如何通过字典键值促进字典记录过滤?

问题描述:

我想在我的python应用程序中与rocksdb进行交互,并在其中存储任意的字典。我收集这些信息是为了我可以使用类似pickle的东西来进行序列化。但我需要能够根据其键的值过滤记录。这里有什么合适的方法?如何通过字典键值促进字典记录过滤?

+0

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

让我们假设您有一个名为dict_keys的键的列表,并且您有一个名为big_dict的字典,并且您只想过滤掉dict_keys中的值。

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

这是否意味着每个记录都将被反序列化? –

RocksDB是一个key-value存储,并且两个键和值是二进制字符串:如果真的存在这样您可以编写遍历列表从字典抓住项目的字典理解。

  1. 如果您想按给定键进行过滤,只需使用Get接口来搜索数据库。
  2. 如果要按给定的键模式进行筛选,则必须使用Iterator接口迭代整个DB,并使用与该模式匹配的键筛选记录。
  3. 如果要按值或值模式进行过滤,则仍需要迭代整个数据库。对于每个键 - 值对,反序列化该值,并检查它是否等于给定值或匹配给定模式。

对于情况1和案例2,你不需要反序列化的所有值,但只有珍视等于给予重点或匹配的模式。但是,对于案例3,您必须反序列化所有值。

这两种情况下2和案件3是效率低下,因为他们需要迭代整个密钥空间。

您可以配置RocksDB的密钥进行排序,并且RocksDB对前缀索引有很好的支持。所以你可以通过密钥高效地进行范围查询和前缀查询。查看文档以获取详细信息。

为了高效地进行值过滤/搜索,您必须使用RocksDB创建一个值索引。