ClickHouse列式存储 | 青训营笔记

89 阅读2分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 12 天

一、数据库基本概念:

 数据库是结构化信息或数据的有序集合,一般以电子形式存储在计算机系统中。通常由数据库管理系统(DBMS)来控制。在现实中,数据、DBMS及关联应用一起被称为数据库系统,通常简称为数据库。
 
 关系数据库:关系数据库是把数据以表的形式进行存储,然后再在各个表之间建立关系,通过这些表之间的关系来操作不同表之间的数据。
 
 非关系数据库:NoSQL或非关系数据库,支持存储和操作非结构化及半结构化数据。
 
 单机数据库:在一台计算机上完成数据的存储和查询的数据库系统。
 
 分布式数据库:分布式数据库由位于不同站点的两个或多个文件组成。
 
 存储引擎:管理内存数据结构、管理磁盘数据、读写算子
 

二、列式存储:

优点:
    查询时只有涉及到的列会被读取。
    投影很高效。
    任何列都能作为索引。
    便于做延迟物化和向量化计算。
    压缩效率高,每一列可以使用不同的压缩算法。
    
缺点:
    选择完成时,被选择的列要重新组装。
    INSERT/UPDATE比较麻烦。
    点查询不合适。
    
适用场景:
    统计分析类查询、即时查询。
    

三、ClickHouse存储设计:

分布式表:不存储数据,用于将查询路由到集群的各个节点。

本地表:实际存储数据的表。

索引设计:
    Hash索引:
    将输入的key通过一个HashFunction映射到一组bucket上。
    每个bucket都包含一个指向一条记录的地址。
    哈希索引在查找的时候只适用于等值比较。
    B-Tree:
    数据写入是有序的,支持增删改查。
    每个节点有多个孩子节点。
    每个节点都按照升序排列key值。
    每个key有两个指向左右孩子节点的引用。
    B++Tree:
    所有的数据都存储在叶子节点,非叶子节点只保存key值。
    叶子节点维护到相邻叶子节点的引用。
    可以通过key值做二分查找,也可以通过叶子节点做顺序访问。