leveldb/cassandra的bloomfilter对范围查询有帮助吗?

gk7wooem  于 2021-06-14  发布在  Cassandra
关注(0)|答案(3)|浏览(443)

我知道leveldb/cassandra在sstable中存储他们的记录,并在执行精确的键查询时使用bloom filter来选择sstable,他们的bloom filter在键范围查询中有帮助吗?

kdfy810k

kdfy810k1#

理查德回答布卢姆过滤边;填写第一部分:是的,leveledcompactionstrategy通常会导致更快的扫描(通过pk或index),这是因为数据行的写端合并更加激进。

gj3fmq9x

gj3fmq9x2#

在进入范围查询之前,重要的是要知道什么是bloomfilter?
bloom过滤器是一种概率集,允许您以内存换取准确性,或者是一种节省空间的概率数据结构,用于测试元素是否是集合的成员。
cassandra在执行键查找时使用bloom过滤器来保存io,正如您所知,每个sstable都有一个与之关联的bloom过滤器,cassandra在执行任何磁盘查找之前都会检查它。现在考虑一下没有bloom过滤器的情况,每次读取一个键都必须读取每个sstable,这是非常昂贵的。通过使用bloom过滤器,cassandra几乎总是只需查找包含该键数据的sstables。
因此,每当执行一个范围查询时,bloomfilters就扮演一个重要的角色。在范围查询的get\u slice排序中,它将有助于确定确切的行,而在get\u range\u slices中,它将有助于找到负责的概率键集。

vx6bjr1n

vx6bjr1n3#

cassandra中有两种类型的范围查询:get\u slice,用于查找行中的列范围;get\u range\u slices,用于查找行范围中的列范围。
bloom过滤器在get\u slice中用于定位行。但是bloom过滤器不用于get\u range\u slices查询。然而,由于cassandra密钥是以散列顺序存储的,因此get\u range\u切片不是很有用,因此必须扫描所有sstables才能执行get\u range\u切片查询通常并不重要。

相关问题