ClickHouse 内核分析--MergeTree 的存储结构和查询加速

本文介绍了ClickHouse的MergeTree存储结构和查询加速原理。MergeTree基于LSM-Tree思想,通过数据排序实现高效压缩和检索。MergeTree存储包括数据文件、Mark标识文件和主键索引等部分,支持多种索引优化,如主键和分区键索引、Skipping索引。查询过程分为索引检索和数据扫描,其中数据Sampling和数据扫描的Final、Sorted、Normal模式各有特点,Normal模式中的并行扫描、数据Cache和SIMD反序列化等优化提升了查询性能。
摘要由CSDN通过智能技术生成

ClickHouse 内核分析–MergeTree 的存储结构和查询 加速

ClickHouse 是最近比较火的一款开源列式存储分析型数据库,它最核心的特点就是极致存储压缩率和查询
性能,本人最近正在学习 ClickHouse 这款产品中。从我个人的视角来看存储是决定一款数据库核心竞争力、 适用场景的关键所在,所以接下来我会陆续推出一系列文章来分析 ClickHouse 中最重要的 MergeTree 存储 内核。本文主旨在于介绍 MergeTree 的存储格式,并且彻底剖析 MergeTree 存储的极致检索性能。

MergeTree 思想

提到 MergeTree 这个词,可能大家都会联想到 LSM-Tree 这个数据结构,我们常用它来解决随机写磁盘的
性能问题,MergeTree 的核心思想和 LSM-Tree 相同。MergeTree 存储结构需要对用户写入的数据做排序然 后进行有序存储,数据有序存储带来两大核心优势:

• 列存文件在按块做压缩时,排序键中的列值是连续或者重复的,使得列存块的数据压缩可以获得极致的压 缩比。 • 存储有序性本身就是一种可以加速查询的索引结构,根据排序键中列的等值条件或者 range 条件我们可
以快速找到目标行所在的近似位置区间(下文会展开详细介绍),而且这种索引结构是不会产生额外存储开销 的。

大家可以从 ClickHouse 的官方文档上找到一系列的 MergeTree 表引擎,包括基础的 MergeTree,拥有数据
去重能力的 ReplacingMergeTree、CollapsingMergeTree、VersionedCollapsingMergeTree,拥有数据聚合 能力的 SummingMergeTree、AggregatingMergeTree 等。但这些拥有“特殊能力”的 MergeTree 表引擎在存 储上和基础的 MergeTree 其实没有任何差异,它们都是在数据 Merge 的过程中加入了“额外的合并逻辑”, 这部分会在后续介绍 MergeTree 异步 Merge 机制的文章中详细展开介绍。

MergeTree 存储结构

为了方便大家理解表的存储结构,下面列举了某个 POC 用户的测试表 DDL,我们将从这个表入手来分析
MergeTree 存储的内核设计。从 DDL 的 PARTITION BY 申明中我们可以看出用户按每个区服每小时粒度创
建了数据分区,而每个数据分区内部的数据又是按照(action_id, scene_id, time_ts, level, uid)作为排序键进行 有序存储。

 CREATE TABLE user_action_log ( 
 `time` DateTime DEFAULT CAST('1970-01-01 08:00:00', 'DateTime') COMMENT '日志时间', 
 `action_id` UInt16 DEFAULT CAST(0, 'UInt16') COMMENT '日志行为类型 id', 
 `action_name` String DEFAULT '' COMMENT '日志行为类型名', `region_name`
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值