如果没有合适的比较器,你能*读取* leveldb 数据吗?

Can you *read* leveldb data without the proper comparator?

我正在尝试访问由 Chrome 存储索引数据库生成的级别数据库。我得到键和值。但它们要么采用未知编码 - 我已经尝试了很多方法来检测它们 - 或者它们以某种方式被扰乱了。

import plyvel    
db = plyvel.DB(dirname, comparator=cmp, comparator_name="idb_cmp1")
for key, value in db:
    print(key) 
    print(value)

我不介意密钥是否按照描述 随机排列。但是以可读的方式获取键和值会很好。我也不处理 leveldb 中的二进制数据。

我在 python 中使用 plyvel 迭代数据库。这个答案可能是相关的:

您可以通过将完全相同的比较器名称传递给 plyvel 中的自定义比较器来伪造它。该比较器的工作方式可能与最初用于创建数据库的比较器不同。我想这会让你越过第一个障碍。

但由于 leveldb 不提供只读操作模式,因此在您读取数据库时可能会有一个后台线程启动以进行一些压缩。由于比较器出现故障,这可能会导致数据丢失和数据库损坏。