为什么Bloom筛选器无法处理范围查询?

时间:2018-07-03 11:38:37

标签: bloom-filter rocksdb lsm-tree

上下文:从我的理解中,我正在了解RocksDB和LSM树,使用Bloom过滤器可避免在所有存储级别中用于项目检索的多个I / O。我对此表示同意。

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

1 个答案:

答案 0 :(得分:2)

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

此外,在您的情况下,您只想要32到200之间的任何第一把钥匙-您只需要进行一次查找即可,否则,在最坏的情况下您必须进行200-32 = 168个查找。如果没有冲突,Bloom筛选器可以快速回答是否不存在密钥,但是如果存在冲突,它仍然需要进行磁盘查找。

相关问题