我想在我的 python 应用程序中与 Rocksdb 交互并在其中存储任意字典。我收集到这一点,我可以使用像泡菜这样的东西来进行序列化。但我需要能够根据键的值过滤记录。这里的正确方法是什么?
问问题
72 次
2 回答
1
因此,假设您有一个名为的键列表,dict_keys
并且您有一个名为的 dict big_dict
,并且您只想过滤掉dict_keys
. 您可以编写一个 dict 理解,遍历从 dict 中获取项目的列表(如果它们存在的话):
new_dict = {key: big_dict.get(key) for key in dict_keys}
于 2017-07-24T16:55:41.750 回答
0
RocksDB 是一个 key-value 存储,key 和 value 都是二进制字符串。
- 如果要按给定键进行过滤,只需使用
Get
界面搜索数据库即可。 - 如果要按给定的键模式进行过滤,则必须使用
Iterator
接口来迭代整个数据库,并使用与模式匹配的键过滤记录。 - 如果您想按值或值模式进行过滤,您仍然需要迭代整个数据库。对于每个键值对,反序列化该值,并检查它是否等于给定值或与给定模式匹配。
对于 case1
和 case 2
,您不需要反序列化所有值,而只需反序列化等于给定键或匹配模式的值。但是,对于 case 3
,您必须反序列化所有值。
case2
和 case3
都是低效的,因为它们需要迭代整个密钥空间。
可以配置 RocksDB 的 key 进行排序,RocksDB 对前缀索引有很好的支持。所以你可以高效地进行范围查询和按键前缀查询。检查文档以获取详细信息。
为了有效地进行值过滤/搜索,您必须使用 RocksDB 创建一个值索引。
于 2017-07-30T13:39:09.377 回答