《Clickhouse原理解析与应用实践》1~6章重点回顾章节-读书笔记

这篇博客是《Clickhouse原理解析与应用实践》1~6章的重点回顾,涵盖了ClickHouse的多主架构、向量化执行引擎、多线程与分布式、数据分区、索引设计、数据写入与查询流程等内容。文章指出ClickHouse的多主架构避免了单点故障,支持物理视图,数据分区和索引设计提升了查询效率,而向量化执行和多线程技术则优化了数据处理速度。
摘要由CSDN通过智能技术生成

《Clickhouse原理解析与应用实践》1~6章重点回顾章节-读书笔记

个人github笔记链接

这里只列举前6章节的内容,因为后面章节的内容,需要对前面的知识内容有一定的熟悉后,才好理解,这里列出来无意义。

前6章节就能够大致了解ClickHouse整体的存储、读取、写入相关的设计实现。


基于下面的笔记,个人觉得比较重要的几个知识点概述:

  1. ClickHouse采用多主架构,集群内节点角色对等,天然规避单点问题
  2. ClickHouse支持物理视图,源表的更新会同步到物理视图(除了删除操作,物理视图会保留源表被删除的数据)
  3. ClickHouse的RENAME只支持单个节点内的数据表移动(集群间节点不支持)
  4. ClickHouse仅MergeTree系列表索引支持数据分区
  5. ClickHouse以分区目录为单位进行数据删除与修改(Mutation),该异步操作不支持事务,无法回滚。被删除的数据在下次合并动作被触发时才会真正物理删除。
  6. ClickHouse每次INSERT都会生成新的分区目录(写入同一个分区也会生成不同的分区目录),后台任务会定时对多个相同分区的分区目录进行合并(或手动执行optimize指令)
  7. ClickHouse的一级索引是稀疏索引实现,常驻内存
  8. ClickHouse的二级索引是跳数索引,由数据的聚合信息构建而成
  9. ClickHouse的写入过程大致流程,先生成分区目录,后按照index_granularity索引粒度,生成primary.idx一级索引(如果声明了二级索引,还会创建二级索引文件),每一列字段的.mrk数据标记和.bin压缩数据文件。
  10. ClickHouse的查询过程大致流程,先通过minmax.idx分区索引寻找需查询的分区,再通过primary.idx一级索引、skip_idx.idx 二级索引筛选数据查询的范围,然后通过.mrk数据标记查找索引对应的.bin数据压缩文件,解压后读取数据。

2.1.1 完备的DBMS功能

  • 大致了解ClickHouse的能力,判断业务中是否适用ClickHouse

ClickHouse拥有完备的管理功能,所以它称得上是一个DBMS(Database Management System,数据库管理系统),而不仅是一个数据库。作为一个DBMS,它具备了一些基本功能,如下所示。

  • DDL(数据定义语言):可以动态地创建、修改或删除数据库、表和视图,而无须重启服务。
  • DML(数据操作语言):可以动态查询、插入、修改或删除数据。
  • 权限控制:可以按照用户粒度设置数据库或者表的操作权限,保障数据的安全性。
  • 数据备份与恢复:提供了数据备份导出与导入恢复机制,满足生产环境的要求。
  • 分布式管理:提供集群模式,能够自动管理多个数据库节点。

2.1.3 向量化执行引擎

  • ClickHouse通过硬件支持的向量化指令,实现数据并行操作。

数据库计算引擎的优化技术:向量化执行与代码生成 - 知乎 (zhihu.com)

一个实用的经验告诉我们,存储媒介距离CPU越近,则访问数据的速度越快。
在这里插入图片描述
ClickHouse利用SSE4.2指令集实现向量化执行。

2.1.6 多线程与分布式

相比基于底层硬件实现的向量化执行SIMD,线程级并行通常由更高层次的软件层面控制。现代计算机系统早已普及了多处理器架构,所以现今市面上的服务器都具备良好的多核心多线程处理能力。由于SIMD不适合用于带有较多分支判断的场景,ClickHouse也大量使用了多线程技术以实现提速,以此和向量化执行形成互补

在各服务器之间,通过网络传输数据的成本是高昂的,所以相比移动数据,更为聪明的做法是预先将数据分布到各台服务器,将数据的计算查询直接下推到数据所在的服务器。

ClickHouse在数据存取方面,既支持分区(纵向扩展,利用多线程原理),也支持分片(横向扩展,利用分布式原理),可以说是将多线程和分布式的技术应用到了极致

2.1.7 多主架构

​ HDFS、Spark、HBase和Elasticsearch这类分布式系统,都采用了Master-Slave主从架构,由一个管控节点作为Leader统筹全局。

​ 而ClickHouse则采用Multi-Master多主架构,集群中的每个节点角色对等,客户端访问任意一个节点都能得到相同的效果。

这种多主的架构有许多优势,例如对等的角色使系统架构变得更加简单,不用再区分主控节点、数据节点和计算节点,集群中的所有节点功能相同。所以它天然规避了单点故障的问题,非常适合用于多数据中心、异地多活的场景。

2.2 ClickHouse的架构设计

篇幅较长,建议阅读书籍原文。该章节大致介绍了ClickHouse代码的数据结构设计。

ClickHouse按列存储数据,内存中的一列数据由一个Column对象表示。

下图中从下到上,

  • Columns:ClickHouse数据存储结构
  • DataTypes:负责数据的序列化/反序列化,读取数据前需将其转换成Column或Field对象
  • Functions:普通函数和聚合函数,函数执行同样采用向量化方式直接作用一列数据
  • Storages:数据表底层实现中没有Table对象,取而代之的是IStorage接口,代指数据表
  • Interperters:解释器,解释AST,构造查询执行通道
  • Parsers:分析器,创建AST(抽象语法树)对象
  • Server:ClickHouse服务实例
    在这里插入图片描述

4.2.4 临时表

CREATE TEMPORARY TABLE [IF NOT EXISTS] table_name (
  name1 [type] [DEFAULT|MATERIALIZED|ALIAS expr],
  name2 [type] [DEFAULT|MATERIALIZED|ALIAS expr],
)
  • 临时表生命周期为整个会话,只支持Memory表引擎(内存中存储数据),会话结束时销毁数据表。
  • 临时表不数据任何数据库,其优先级大于普通表,当两张数据表名称相同时,会优先读取临时表的数据

4.2.5 分区表

目前仅**合并树(MergeTree)**家族系列的表引擎支持数据分区。

CREATE TABLE partition_v1 (
  ID String,
  URL String
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值