【问题标题】:Why Bloom filters cannot handle range queries?为什么布隆过滤器不能处理范围查询?
【发布时间】:2018-07-03 11:38:37
【问题描述】:

上下文:我正在阅读有关 RocksDB 和 LSM 树的信息,据我了解,Bloom 过滤器用于避免在所有存储级别中检索多个 I/O。我同意。

显然,挑战之一是布隆过滤器不能用于范围查询。是什么原因?如果我想检查 32 到 200 之间是否有一个键,我可以对中间的每个值进行单键查找(或在第一个“真”响应处停止)。真的没有效率吗?

【问题讨论】:

    标签: bloom-filter rocksdb lsm-tree


    【解决方案1】:

    您可以这样做,但效率低下,因为与寻找第一个值 (32) 并迭代到 200 相比,单点查找很慢(即使使用布隆过滤器)。Leveldb/rocksdb 已针对此类迭代进行了优化。

    此外,在您的情况下,您只需要 32 到 200 之间的任何第一个键 - 您只需进行一次搜索即可,否则在最坏的情况下您必须进行 200-32 = 168 次查找。如果没有冲突,布隆过滤器可以快速回答 key 是否不存在,但如果存在冲突,它仍然需要进行磁盘查找。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-06-17
    • 1970-01-01
    • 2013-11-18
    • 1970-01-01
    • 2011-09-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多