Clickhouse 系列 - 番外 - LSM 算法

LSM 算法最早出现在 1991 年的 ACM 期刊上,之后其思想在各大大数据存储系统中被广泛使用,例如 LevelDB,HBase,Cassandra……LSM 算法由于适应的场景不同,存在很多的变体,clickhouse 也使用 lsm 算来实现其预排序的功能,本文将着重介绍 clickhouse 中的使用,同时也会适当涉及一些其他系统的使用用以让读者体会架构设计的随心所欲。

我们都知道,用户在调用 insert 向 clickhouse 插入数据时,数据不一定是按已经按照排序键排序好的数据,大概率是乱序数据。那么这种乱序的请求如何做到写入磁盘时变得有序呢?这个就是 LSM 算法实现的。

LSM 算法的几个核心步骤:

  • 在于数据写入存储系统前首先记录日志,防止系统崩溃
  • 记录完日志后在内存中以供使用,当内存达到极限后写入磁盘,记录合并次数 Level 为 0(L=0)。已经写入磁盘的文件不可变。
  • 每过一段时间将磁盘上 L 和 L+1 的文件合并

我们用一个示例来展示下整个过程

T=0 时刻,数据库为空。

T=1 时刻,clickhouse 收到一条 500 条 insert 的插入请求,这 500 条数据时乱序的。此时,clickhouse 开始插入操作。首先将 500 条插入请求一次性写入日志。接着在内存中进行排序,排序完成后将有序的结果写入磁盘,此时 L=0;

T=2 时刻,clickhouse 收到一条 800 条 insert 的插入请求,这 800 条数据时乱序的。此时,clickhouse 开始插入操作。首先将 800 条插入请求一次性写入日志。接着在内存中进行排序,排序完成后将有序的结果写入磁盘,此时 L=0;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值