我想在我的python应用程序中与rocksdb接口并在其中存储任意的dicts。我收集到这一点,我可以使用像pickle这样的序列化。但我需要能够根据键的值过滤记录。这里有什么正确的方法?
答案 0 :(得分:1)
所以假设您有一个名为dict_keys
的密钥列表,并且您有一个名为big_dict
的密码,并且您只想过滤掉dict_keys
中的值。你可以编写一个字典理解,如果它们存在,就会遍历从dict中获取项目的列表:
new_dict = {key: big_dict.get(key) for key in dict_keys}
答案 1 :(得分:0)
RocksDB是一个键值存储,键和值都是二进制字符串。
Get
界面搜索数据库。Iterator
接口迭代整个数据库,并使用与模式匹配的密钥过滤记录。对于案例1
和案例2
,您不需要反序列化所有值,只需要等于给定键或匹配模式的值。但是,对于案例3
,您必须反序列化所有值。
案例2
和案例3
都是低效的,因为它们需要迭代整个密钥空间。
您可以配置RocksDB的订购密钥,RocksDB可以很好地支持前缀索引。因此,您可以通过密钥有效地进行范围查询和前缀查询。查看文档以获取详细信息。
为了有效地进行值过滤/搜索,您必须使用RocksDB创建一个值索引。