Cassandra Leveled Compaction Strategy

简介: 这篇文章19年写的,重新发到开发者社区翻新下。

前言

Cassandra是基于LSM架构的分布式数据库。LSM中有一个很重要的过程,就是压缩(Compaction)。默认的压缩策略是SizeTieredCompactionStrategy,今天主要说一下另一种压缩策略LeveledCompactionStrategy。

LeveledCompactionStrategy

LeveledCompactionStrategy被用在读密集的场景,读操作的延迟相对容易估算(最坏情况可控),缺点是会有更多的磁盘IO消耗。

SSTable合并过程

image

这个压缩算法主要是将数据分级(L0,L1,L2……)。最开始数据在内存(memtable)里,然后被flush到磁盘上,也就是到了L0这级。L0的sstable会和L1的合并成更大的sstable。

大于等于L1的层级,sstable大小会被控制在sstable_size_in_mb(160MB)。每个层级之间数据量是10倍的关系,即L2的数据量是L1的10倍。我们假设L1可以容纳10*160MB,那么L2可以容纳100*160MB。如果在L1做压缩,结果大于10哥文件,则会被合并到L2。如此反复,多出来的文件会跟下一层级中有重叠的文件合并。

非常多次写入后

image

性能分析

经过上面这个合并流程,LCS 会保证每个层级内的每个文件数据不重叠(除了L0),这也就是它高效原因所在。你所要读的数据大概率会只在某个层级中,而层级内文件数据不重复,所以你大概率只需要读一个文件即可。这个概率是多少呢,大约是90%。这个是怎么算的呢?因为每一层是前一层的10倍,所以最后一层容纳了大部分数据。比如:L1=10,L2=100,L3=1000,L3占比90.09%。同理,可以推出无用数据(删除或被覆盖的),最多占比10%左右(假设L1和L2全是无用数据)。

如果是更新删除比较高频的场景,那么读最坏情况,可能需要访问每个层级,每个层级读一个文件(L0除外),所以说最坏情况可控。如果L0中的文件出现积压,是有可能出现更坏的情况都,需要再访问L0中大部分文件。

更多细节可以参考:https://cassandra.apache.org/doc/latest/cassandra/operating/compaction/lcs.html

相关文章
|
6月前
|
分布式计算 测试技术 Apache
探索Apache Hudi核心概念 (3) - Compaction
探索Apache Hudi核心概念 (3) - Compaction
123 5
|
6月前
|
SQL 消息中间件 存储
Flink报错问题之Flink报错:Table sink 'a' doesn't support consuming update and delete changes which is produced by node如何解决
Flink报错通常是指在使用Apache Flink进行实时数据处理时遇到的错误和异常情况;本合集致力于收集Flink运行中的报错信息和解决策略,以便开发者及时排查和修复问题,优化Flink作业的稳定性。
|
6月前
|
Java 关系型数据库 数据库连接
实时计算 Flink版操作报错之遇到错误org.apache.flink.table.api.ValidationException: Could not find any factory for identifier 'jdbc',该如何解决
在使用实时计算Flink版过程中,可能会遇到各种错误,了解这些错误的原因及解决方法对于高效排错至关重要。针对具体问题,查看Flink的日志是关键,它们通常会提供更详细的错误信息和堆栈跟踪,有助于定位问题。此外,Flink社区文档和官方论坛也是寻求帮助的好去处。以下是一些常见的操作报错及其可能的原因与解决策略。
|
6月前
|
分布式计算 Apache 调度
Apache Hudi 异步Compaction部署方式汇总
Apache Hudi 异步Compaction部署方式汇总
128 0
|
6月前
|
SQL 消息中间件 Kubernetes
Flink报错问题之Flink报错:Incompatible types for sink column 'xxx' at position x.如何解决
Flink报错通常是指在使用Apache Flink进行实时数据处理时遇到的错误和异常情况;本合集致力于收集Flink运行中的报错信息和解决策略,以便开发者及时排查和修复问题,优化Flink作业的稳定性。
|
SQL JSON 分布式计算
Apache Hudi初探(九)(与spark的结合)--非bulk_insert模式
Apache Hudi初探(九)(与spark的结合)--非bulk_insert模式
272 0
|
JSON 分布式计算 Apache
Apache Hudi初探(八)(与spark的结合)--非bulk_insert模式
Apache Hudi初探(八)(与spark的结合)--非bulk_insert模式
276 0
|
SQL 消息中间件 资源调度
Could not find a suitable table factory for ‘org.apache.flink.table.factories.TableSourceFactory
这是在提交yarn时报的错误,原因其实就是少了一些包,提交的集群后一些依赖包使用flink的lib目录下的,所以我需要将一些依赖包放到lib目录下。
461 0
Could not find a suitable table factory for ‘org.apache.flink.table.factories.TableSourceFactory
|
存储 SQL 分布式计算
Apache Flink Table Store 0.2.0 发布
增加了 Hive、Spark 和 Trino 等计算引擎的对接支持,并且稳定了存储的格式。
Apache Flink Table Store 0.2.0 发布
|
SQL 消息中间件 JSON
SPARK中的FileSourceStrategy,DataSourceStrategy以及DataSourceV2Strategy规则
SPARK中的FileSourceStrategy,DataSourceStrategy以及DataSourceV2Strategy规则
486 0