ClickHouse| 青训营笔记

97 阅读2分钟

这是我参与「第五届青训营」伴学笔记创作活动的第11天。今天学了些列存储相关知识和列存储数据库ClickHouse相关信息。
数据库是结构化信息或数据的有序集合,一般以电子形式存储在计算机系统中。通常由数据库管理系统(DBMS)来控制。在现实中,数据,DBMS及关联应用一起被称为数据库系统,通常简称为数据库。数据库可分为OLTP 数据库和OLAP数据库。OLTP (Online transactional processing)数据库是一种高速分析数据库,专为多个用户执行大量事务而设计。OLAP (Online analytical processing)数据库旨在同时分析多个数据维度,帮助团队更好地理解其数据中的复杂关系。
列式存储适合于OLAP数据库。它的优点体现在数据压缩,延迟物化和向量化上。数据压缩可以使读的数据量更少,在IO密集型计算中获得更大的性能优势。相同类型压缩效率更高。排序之后压缩效率更高。可以针对不同类型使用不同的压缩算法。延时物化对缓存友好,对CPU/内存带宽友好,可以利用到执行计划和算子的优化和保留直接在压缩列做计算的机会。向量化可以进行SIMD (single instruction multiple data) ,有能力用一条指令执行多条数据。
ClickHouse索引设计有Hash Index,B-Tree,B+Tree和LSM tree。Hash Index将输入的key通过一个HashFunction映射到一组bucket上,每个bucket都包含一个指向一条记录的地址,哈希索引在查找的时候只适用于等值比较。B-Tree中数据写入是有序的,支持增删查改;每个节点有多个孩子节点;每个节点都按照升序排可key值;每个key有两个指向左右孩子节点的引用,左孩子节点保存的key都小于当前key,右孩子节点的保存的key都大于当前key。B+Tree中所有的数据都存储在叶子节点,非叶子节点只保存key值;叶子节点维护到相邻叶子节点的引用;可以通过key值做二分查找, 也可以通过叶子节点做顺序访问。Log-structured merge-tree (LSM tree)是一种为大吞吐写入场景而设计的数据结构,着重优化顺序写入,主要数据结构有SSTables和Memtable。