码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 《Clickhouse原理解析与应用实践》1~6章重点回顾章节-读书笔记


    《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数据压缩文件,解压后读取数据。

    个人觉得平时可重点回顾的章节

    • 《Clickhouse原理解析与应用实践》1~6章重点回顾章节-读书笔记
      • 2.1.1 完备的DBMS功能
      • 2.1.3 向量化执行引擎
      • 2.1.6 多线程与分布式
      • 2.1.7 多主架构
      • 2.2 ClickHouse的架构设计
      • 4.2.4 临时表
      • 4.2.5 分区表
      • 4.2.6 视图
      • 4.3.5 移动数据表
      • 4.4.5 卸载与装载分区
      • 4.7 数据的删除与修改
      • 6.2.3 分区目录的合并过程
      • 6.3 一级索引
      • 6.3.1 稀疏索引
      • 6.3.3 索引数据的生成规则
      • 6.3.4 索引的查询过程
      • 6.4 二级索引
      • 6.4.1 granularity与index_granularity的关系
      • 6.4.2 跳数索引的类型
      • 6.5.1 各列独立存储
      • 6.5.2 压缩数据块
      • 6.6 数据标记
      • 6.6.1 数据标记的生成规则
      • 6.6.2 数据标记的工作方式
      • 6.7.1 写入过程
      • 6.7.2 查询过程
      • 6.7.3 数据标记与压缩数据块的对应关系

    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 
    • 相关阅读:
      Feature Store Meetup V3回顾|华为商城&第四范式&众安保险特征平台建设实践
      redis:事务与锁
      [go学习笔记.第十二章.文件操作] 2.json基本介绍
      【通信】基于matlab模拟室内VLC模型(含BER和SNR)附matlab代码
      CN_组帧@帧定界
      idea:如何连接数据库
      电脑技巧:笔记本电脑升级固态硬盘的注意事项,看完你就懂了
      2023下半年创业风口项目:实景自动无人直播!揭秘3大好处!
      Highcharts高级响应能力支持
      java —— 集合
    • 原文地址:https://blog.csdn.net/Ashiamd/article/details/126969788
    • 最新文章
    • 攻防演习之三天拿下官网站群
      数据安全治理学习——前期安全规划和安全管理体系建设
      企业安全 | 企业内一次钓鱼演练准备过程
      内网渗透测试 | Kerberos协议及其部分攻击手法
      0day的产生 | 不懂代码的"代码审计"
      安装scrcpy-client模块av模块异常,环境问题解决方案
      leetcode hot100【LeetCode 279. 完全平方数】java实现
      OpenWrt下安装Mosquitto
      AnatoMask论文汇总
      【AI日记】24.11.01 LangChain、openai api和github copilot
    • 热门文章
    • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
      奉劝各位学弟学妹们,该打造你的技术影响力了!
      五年了,我在 CSDN 的两个一百万。
      Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
      面试官都震惊,你这网络基础可以啊!
      你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
      心情不好的时候,用 Python 画棵樱花树送给自己吧
      通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
      13 万字 C 语言从入门到精通保姆级教程2021 年版
      10行代码集2000张美女图,Python爬虫120例,再上征途
    Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
    正则表达式工具 cron表达式工具 密码生成工具

    京公网安备 11010502049817号