云原生小课堂 | 一文入门性能凶悍的开源分析数据库ClickHouse
2022-04-28

ClickHouse简介


ClickHouse是一个开源的,面向列的MPP架构数据分析数据库(大规模并行处理),由俄罗斯Yandex为OLAP和大数据用例创建。

ClickHouse全称是Click Stream,Data Warehouse,简称ClickHouse就是基于页面的点击事件流,面向数据仓库进行OLAP分析。

ClickHouse对实时查询处理的支持使其适用于需要亚秒级分析结果的应用程序。

ClickHouse的查询语言是SQL的一种方言,它支持强大的声明性查询功能,同时为最终用户提供熟悉度和较小的学习曲线。


ck的优势和不足


优势:

1、查询速度非常快,每台服务器每秒处理上亿或上百亿行的数据。

2、可以充分利用硬件多线程实现单个查询的分支处理性能超过每秒2tb

3、数据存储经过压缩,能够减少io

4、存储引擎强大

5、性能好:

一亿性能对比:

1-一亿性能.png

十亿性能对比

2-十亿性能.png

6、容错与高可靠:

支持分布式集群

支持多主机异步复制,可跨多数据中心部署

所有节点都相等避免出现单点故障

单个节点或整个数据中心停机时间不影响系统读写可用性

包括许多企业健全功能和针对认为错误的故障安全机制


不足:

1、不支持事务(这其实也是大部分OLAP数据库的缺点)

2、不擅长根据主键按行粒度查询(但是支持这种操作),它是按列存储,按列查询,故并不很适合按行查询的场景。

3、不擅长按行删除数据(但是支持这种操作),按行删除数据性能较低


ClickHouse的特性

· 定位是分析性数据库,即OLAP,不是严格的关系型

OLAP(关系型的联机分析处理'基于大批量数据聚合统计分析,侧重于查询',和它一起比较的还有OLTP联机事务处理'基于事务的数据处理分析,侧重于事务',我们常见的ERP,CRM系统就属于OLTP)

· 完整的DBMS(关系数据库)

具有database、table、row、DDL、DML、用户、权限控制、数据备份、数据恢复、分布式管理的功能、支持大规模并行运算、每个节点存储对应分区数据

· 列式存储数据库

相同的列的数据存在一起,查询的时候只查需要的列,其他的列不关注,不做io,避免全表扫描,有更好的压缩比。

· 在线实时查询

· 不需要任何数据预处理

· 支持批量更新

· 拥有完善的SQl支持和函数

· 支持高可用

· 不依赖Hadoop复杂生态(像ES一样,开箱即用)


ClickHouse应用场景


ck比较适用于广告流量,web流量,app浏览,金融,电子商务,信息安全,电信网络游戏和物联网等领域

非常适合大数据分析的场景,可以用于电信数据的存储和统计,用户行为的数据记录和分析,信息安全日志分析,商业智能与广告网络价值的数据挖掘,以及网络游戏和物联网的数据分析和处理。

ClickHouse 作为一款高性能OLAP数据库,但并不适合事务性场景


clickhouse 的数据访问流程


· server

ck服务器实现了多个不同的接口:

1.用与外部客户端的http接口

2.用于数据传输拷贝的接口

3.用于本机的ClickHouse客户端接口,也作为在分布式查询执行中跨服务器通信的TCP接口

· Parser分析器

负责创建AST对象(抽象语法树)

将一条SQL解析成AST语法树的形式,不同的SQL有不同的Parser分析器来解析

· Intercepter解释器

负责解释AST对象,创建查询的执行通道

· IStorage 存储接口

负责根据AST语句的要求返回指定列的原始数据

定义了DDL、read、write方法,负责数据定义查询和写入

· Block

ClickHouse内部的数据操作均是通过操作Block对象完成的。

Block对象包含了数据对象(Column)、数据类型(DataType)、列名组成的三元组,Block对象进一步抽象和封装了该三元组,使得通过Block对象可以完成一系列的数据操作

· Column和Field

Column提供了数据的读取能力

Column和Field是ck最基础的映射单元

ck按列存储数据,每列数据由一个Column对象表示,Field表示Column的一个单值 ( 也就是单列中的一行数据 )

· DataType

数据类型由DataType负责,提供了序列化和反序列化,从Column和Field获取数据

· Function

ck提供两类函数(普通函数和聚合函数)

普通函数由IFunction接口定义

聚合函数有状态,由IAggregateFunction定义,以COUNT聚合函数为例,其AggregateFunctionCount的状态使用整型UInt64记录。状态支持序列化和反序列化,在分布式节点间可以进行传输,实现增量计算。

3-增量计算.png



点击此处,阅读完整版开源分析数据库ClickHouse入门攻略


上一篇:云原生小课堂 | Envoy请求流程源码解析(一):流量劫持

下一篇:云原生小课堂 | Envoy请求流程源码解析(二):请求解析

为您数字化转型提供更为完善的解决方案和更加优质的全栈服务。

申请试用
© 2024 All Rights Reserved. 灵雀云 版权所有 备 案号:京ICP备15011102号-2      隐私条款
电话咨询 在线客服 微信咨询 公众号