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

相关文章
|
监控 JavaScript 前端开发
Postman 如何查看受监控的Collections 运行结果?
Postman 如何查看受监控的Collections 运行结果?
228 0
|
缓存 运维 监控
Cassandra 性能压测及调优实战
掌握Cassandra分布式数据库性能压测及性能调优 作者:孤池
4273 1
Cassandra 性能压测及调优实战
|
负载均衡 网络协议 应用服务中间件
高可用 - 04 Keepalived编译安装
高可用 - 04 Keepalived编译安装
524 0
高可用 - 04 Keepalived编译安装
|
JSON 测试技术 API
API接口测试指南:确保接口稳定性与可靠性的实践
API接口测试是确保软件产品质量的重要组成部分。通过遵循本指南中的测试步骤和最佳实践,开发者可以有效地验证API的功能、性能和安全性,从而提升软件的整体质量和用户满意度。
|
NoSQL 负载均衡
【Cassandra】Cassandra集群管理节点
The Apache Cassandra database is the right choice when you need scalability and high availability without compromising performance. Linear scalability and proven fault-tolerance on commodity hardware or cloud infrastructure make it the perfect platform for mission-critical data.
1084 0
|
Web App开发 前端开发 JavaScript
Web前端性能测试方法
Web前端性能测试方法
404 0
|
SQL 存储 JSON
Cassandra CQL语法 以及功能介绍
内容摘要: 一、Cassandra简单介绍 ·Cassandra的历史和基本架构 二、Cassandra CQL介绍 ·如何使用CQL语言操作Cassandra
4626 0
Cassandra CQL语法 以及功能介绍
|
存储 缓存 NoSQL
顶会论文解读|DEPART:分布式KV存储系统的副本解耦方案(1)
顶会论文解读|DEPART:分布式KV存储系统的副本解耦方案
324 0
|
算法 应用服务中间件 Shell
搭建高可用负载均衡器: haproxy+keepalived
企业业务量比较小的时候,单台服务器就可以满足业务需要了。但是随着业务发展,单服务器的问题就凸显出来了,如何透明的扩展服务器和带宽,增加服务器吞吐量呢?负载均衡器可以解决以上问题。
9970 0
|
负载均衡 监控 NoSQL
keepalived+haproxy+redis-cluster 高可用负载均衡redis集群搭建
keepalived+haproxy+redis-cluster 高可用负载均衡redis集群搭建
1038 0
keepalived+haproxy+redis-cluster 高可用负载均衡redis集群搭建