列存储ClickHouse学习 | 青训营笔记

70 阅读2分钟
这是我参与「第五届青训营」伴学笔记创作活动的第 15 天

基本概念

数据库概念

数据库是结构化信息或数据的有序集合,一般以电子形式存储在计算机系统中。

比如存储一个用户的信息,可以先整理数据,存储消息到二维表格的一行,每一行都表示一个用户,而每一列代表用户的不同类型的信息。

数据库类型

数据库有关系型数据库和非关系型数据库分类。关系型数据库把数据存储到表,然后建立表之间的关系。非关系型数据库没有固定的表结构,数据不存在表之间的关系。

数据库也有单机和分布式的分类。单机数据库是运行在一台计算机的存储系统,分布式数据库是同时运行和存储在多台计算机上的系统。

OLAP数据库

OLAP数据库支持大量数据的读写,PB级的存储。支持多维分析,复杂的聚合函数。窗口函数,离线和实时分析。

SQL

SQL是一种编程语言,可以使用SQL在关系型数据库中执行操作。

SQL查询包含SELECT关键字,星号指定查询所有字段。

存储引擎

存储引擎要完成管理内存数据结构。包括索引,内存数据,缓存。

存储引擎要完成管理磁盘数据的任务。管理数据的文件格式,和磁盘数据的增删改查。

列式存储

行式存储和列式存储

行式存储以行为单位存储数据。

列式存储以列为单位存储,每一列的数据类型相同。

优点

可以进行数据压缩,在IO密集型计算中有优势。

延迟物化,对内存缓存和CPU友好。

支持向量化计算,使用SSE和AVX系列指令集进行加速。

ClickHouse设计

结构

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

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

查询优化

建一个物化视图,使用Projection。

应用场景

大宽表查询

大宽表可以建非常多的列,可以增加、删除、清空每一列的数据,引擎可以快速选择需要的列,可以将过滤条件下推到存储层加速查询。

离线数据分析

数据导入。数据通过spark生成clickhouse格式文件,导入到hdfs,数据直接导入到各个物理节点。

数据按列导入,保证查询可以及时访问已有数据,按需加载需要的列。