【问题标题】:How does LevelDB handle sequence number in bloom filter?LevelDB如何处理布隆过滤器中的序列号?
【发布时间】:2020-03-09 12:37:39
【问题描述】:

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

【问题讨论】:

    标签: database key-value-store leveldb rocksdb bloom-filter


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 2017-01-21
      • 2011-09-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多