如何通过dict键值来简化dict记录过滤?

时间:2017-07-24 16:52:52

标签: python rocksdb

我想在我的python应用程序中与rocksdb接口并在其中存储任意的dicts。我收集到这一点,我可以使用像pickle这样的序列化。但我需要能够根据键的值过滤记录。这里有什么正确的方法?

2 个答案:

答案 0 :(得分:1)

所以假设您有一个名为dict_keys的密钥列表,并且您有一个名为big_dict的密码,并且您只想过滤掉dict_keys中的值。你可以编写一个字典理解,如果它们存在,就会遍历从dict中获取项目的列表:

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

答案 1 :(得分:0)

RocksDB是一个键值存储,键和值都是二进制字符串。

  1. 如果您想按指定的键过滤,只需使用Get界面搜索数据库。
  2. 如果要按给定的密钥模式进行过滤,则必须使用Iterator接口迭代整个数据库,并使用与模式匹配的密钥过滤记录。
  3. 如果要按值或值模式进行过滤,则仍需要迭代整个数据库。对于每个键值对,反序列化该值,并检查它是否等于给定值或与给定模式匹配。
  4. 对于案例1和案例2,您不需要反序列化所有值,只需要等于给定键或匹配模式的值。但是,对于案例3,您必须反序列化所有值。

    案例2和案例3都是低效的,因为它们需要迭代整个密钥空间。

    您可以配置RocksDB的订购密钥,RocksDB可以很好地支持前缀索引。因此,您可以通过密钥有效地进行范围查询和前缀查询。查看文档以获取详细信息。

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