LevelDB如何处理bloom filter中的sequence number?

How does LevelDB handle sequence number in bloom filter?

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

在 RocksDB 中,要创建 bloom,您必须指定要添加到 bloom 的每个键的字节数。虽然Internal key是user key和sequenceNumber的组合,后者在创建filter时会被剥离。序列号将不是用于构建 bloom 的密钥的一部分。 因此,当您调用 Get() 时,给定的密钥将传递给 KeyMayMatch(),如果布隆过滤器结果为真,那么 rocksdb 会扫描文件以获取密钥(如果它存在。记住布隆过滤器可能会产生误报).如果布隆结果为假,则密钥不存在于数据库中。