LevelDB如何处理Bloom过滤器中的序列号?

问题描述 投票:0回答:1

我已经阅读了LevelDB的源代码。我发现它在调用filter_block的AddKey()时使用内部密钥。如果以后再调用Get(),它将使用最后一个序列号构造一个查找键,并将该键传递给函数KeyMayMatch()。但是最后一个序列号与AddKey()中使用的序列号不同,那么为什么布隆过滤器可以返回正确的结果?

database key-value-store leveldb rocksdb bloom-filter
1个回答
1
投票

在RocksDB中,要创建Bloom,您必须指定要添加到Bloom的每个键的字节数。尽管内部键是用户键和sequenceNumber的组合,但是在创建过滤器时,后者会被剥离。序列号将不是用于构建Bloom的密钥的一部分。因此,当您调用Get()时,给定的密钥将传递给KeyMayMatch(),如果Bloom筛选器结果为true,则rocksdb扫描文件以获取密钥(如果存在)。请记住Bloom筛选器会给出误报。如果绽放结果为假,则该密钥不存在于数据库中。

© www.soinside.com 2019 - 2024. All rights reserved.