• 头号玩家

    云原生小课堂 | 一文入门性能凶悍的开源分析数据库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-一亿性能

    十亿性能对比

    2-十亿性能

    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-增量计算



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


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

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

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

    申请试用
    © 2026 All Rights Reserved. 头号玩家 版权所有 备案号:京ICP备15011102号-2      
    电话咨询 在线客服 微信咨询 公众号