操作Cassandra(4)-Bloom过滤器

Bloom过滤器

在读取路径中,Cassandra将磁盘(SSTables)中的数据与RAM(memtables)中的数据合并。为了避免为每个SSTable数据文件检查所请求的分区,Cassandra采用了一种称为bloom过滤器的数据结构。

Bloom过滤器是一种概率数据结构,允许Cassandra确定两种可能状态之一: - 数据肯定不存在于给定文件中,或 - 数据可能存在于给定文件中。

虽然bloom过滤器不能保证数据存在于给定的SSTable中,但是通过消耗更多的RAM来使Bloom过滤器更准确。运算符有机会通过将bloom_filter_fp_chance调整为0到1之间的浮点来调整每个表的此行为。

对于使用水平压缩策略(LeveledCompactionStrategy)的表,bloom_filter_fp_chance的默认值为0.1,对于所有其他情况,默认值为0.01。

Bloom过滤器存储在RAM中,但存储为非堆,因此,操作员在选择最大堆大小时不应考虑bloom过滤器。随着精度提高(当bloom_filter_fp_chance接近0时),内存使用非线性增加,bloom_filter_fp_chance = 0.01的bloom过滤器将需要大约是与bloom_filter_fp_chance = 0.1相同的表的三倍的内存。

bloom_filter_fp_chance的典型值通常在0.01(1%)到0.1(10%)的假阳性几率之间,Cassandra为了发现一条数据可能扫描一行的SSTable。参数应根据用例调整:

  • 具有较大RAM和较慢磁盘的用户可以通过将bloom_filter_fp_chance设置为数字较小的数字(例如0.01)来避免过多的IO操作
  • 具有较少RAM,较密集节点或非常快速磁盘的用户可以容忍更高的bloom_filter_fp_chance以便以牺牲多余IO操作为代价来节省RAM
  • 在很少读取或仅通过扫描整个数据集(如分析工作负载)执行读取的工作负载中,将bloom_filter_fp_chance设置为高得多的数是可接受的。

修改

Bloom过滤器假阳性机会在DESCRIBE TABLE输出中作为字段bloom_filter_fp_chance可见。运算符可以使用ALTER TABLE语句更改该值:

ALTER TABLE keyspace.table WITH bloom_filter_fp_chance=0.01

但是,操作员应该注意,此更改不是立即的:Bloom过滤器是在写入文件时计算的,并作为SSTable的Filter组件保留在磁盘上。在发出ALTER TABLE语句时,磁盘上的新文件将使用新的bloom_filter_fp_chance写入,但现有的sstables将不会被修改,直到它们被压缩。 如果操作员需要更改的bloom_filter_fp_chance立即生效,他们可以使用nodetool scrubnodetool upgradesstables -a触发SSTable重写,两者都将重建磁盘上的sstables,在进度中重新生成bloom过滤器。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值