【问题标题】:What is the purpose of BloomFilter in Cassandra?Cassandra中BloomFilter的目的是什么?
【发布时间】:2022-01-03 01:15:33
【问题描述】:

在 datastax 文档中它指出 (link):

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

在词汇表中提到(link):

与每个 SSTable 关联的堆外结构,检查是否存在 在做任何磁盘之前,所请求行的数据存在于 SSTable 中 输入输出。

布隆过滤器检查 SSTable 或 memtable 中是否存在读取请求的数据,还是先检查 memtable,然后再检查 SSTable?

【问题讨论】:

    标签: cassandra


    【解决方案1】:

    当您从 Cassandra 读取数据时,始终会检查 memtable。但是 SSTables 也会被检查,因为 memtable 可能有旧数据(例如,因为网络延迟等)。使用 memtable 很容易检查。但是使用 SSTables 就更复杂了——磁盘上可能有几十个 SSTables,如果我们每一个都命中,那么读取操作会很慢。布隆过滤器在这里有所帮助 - 它允许避免读取特定分区键不存在的 SSTable。

    你可以在你的桌子上检查布隆过滤器的效果(这里是example):

    • 使用nodetool tablestats 命令计算当前SSTables 的数量
    • 使用nodetool tablehistograms 查找在典型操作中读取的 SSTable 数量(最小/最大/50%/95%/...)

    【讨论】:

      【解决方案2】:

      只是为了回应 Alex 的回答,当磁盘上有许多 SSTable 文件用于单个节点上的单个表时,布隆过滤器会派上用场。从磁盘读取速度很慢(相对于从内存读取),因此查询布隆过滤器有助于缩小实际需要读取的 SSTable 文件的范围。

      另外,布隆过滤器是一个概率结构,能够在读取路径中提供两个答案之一:

      • 此 SSTable 文件可能包含请求的数据。
      • 这个 SSTable 文件肯定不包含请求的数据。

      【讨论】:

        猜你喜欢
        • 2011-08-16
        • 2016-04-08
        • 2017-10-02
        • 2011-11-26
        • 1970-01-01
        • 1970-01-01
        • 2015-04-11
        • 2021-11-29
        • 2015-06-30
        相关资源
        最近更新 更多