布隆过滤器在cassandra中的作用是什么?

2024-04-25

从 Cassandra 文档的两个不同链接中,我发现:

link 1 http://docs.datastax.com/en/cassandra/3.0/cassandra/dml/dmlHowDataWritten.html

存储在内存中的结构,用于在访问磁盘上的 SSTable 之前检查 memtable 中是否存在行数据

and

link2 http://docs.datastax.com/en/cassandra/3.0/cassandra/dml/dmlAboutReads.html

Cassandra 检查 Bloom 过滤器以发现哪些 SSTable 可能具有请求的分区数据。

我的问题是上述两种说法都正确吗?如果是,布隆过滤器是否分别为 Memtable 和 SSTable 维护?提前致谢。


A 布隆过滤器 https://en.wikipedia.org/wiki/Bloom_filter是一种通用数据结构,用于检查元素是否存在于集合中。其算法设计得非常快,但代价是冒着返回误报的风险。

Cassandra 使用布隆过滤器来测试任何 SSTable 是否可能包含所请求的分区键,without实际上必须读取它们的内容(从而避免昂贵的 IO 操作)。

如果布隆过滤器返回false对于给定的分区键,那么绝对可以肯定该分区键不存在于对应的SSTable中;如果它返回true,但是,那么 SSTable 是likely包含分区键。发生这种情况时,Cassandra 将采用更复杂的技术来确定是否需要读取该 SSTable。请注意,大多数读取都会参考布隆过滤器,并且仅在某些写入期间(当内存表刷新到磁盘时)进行更新。你可以阅读更多关于Cassandra的读取路径here http://docs.datastax.com/en/cassandra/3.0/cassandra/dml/dmlAboutReads.html.

回到你的问题:

1)第一个语句(“存储在内存中的结构,在访问磁盘上的 SSTable 之前检查内存表中是否存在行数据”)恕我直言不准确:当内存表刷新到磁盘时,布隆过滤器确实会更新,但它们不会引用内存表。

2)布隆过滤器按SSTable维护,即磁盘上的每个SSTable在内存中都有一个相应的布隆过滤器。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

布隆过滤器在cassandra中的作用是什么? 的相关文章

随机推荐