ClickHouse系列教程 1. 介绍


1. ClickHouse 介绍

图1-2 ClickHouse名称缩写的含义

ClickHouse是一个面向列的数据库管理系统(DBMS),用于在线分析处理查询(OLAP)。

ClickHouse 发展历程

1.1. ClickHouse概述

  • ClickHouse 是俄罗斯搜索巨头 Yandex 公司早 2016年 开源的一个极具 “ 战斗力 “ 的实时数据分析数据库,是一个用于联机分析 (OLAP:Online Analytical Processing) 的列式数据库管理系统。

  • ClickHouse 简称 CK,工作速度比传统方法快100-1000倍,ClickHouse 的性能超过了目前市场上可比的面向列的DBMS。 每秒钟每台服务器每秒处理数亿至十亿多行和数十千兆字节的数据。

  • ClickHouse 是一个完全的列式数据库管理系统,允许在运行时创建表和数据库,加载数据和运行查询,而无需重新配置和重新启动服务器,支持线性扩展,简单方便,高可靠性,高容错。

  • ClickHouse 从OLAP场景需求出发,定制开发了一套全新的高效列式存储引擎,并且实现了数据有序存储、主键索引、稀疏索引、数据Sharding、数据Partitioning、TTL、主备复制等丰富功能。这些功能共同为ClickHouse极速的分析性能奠定了基础。

  • ClickHouse 不应该被用作通用数据库,而是作为超高性能的海量数据快速查询的分布式实时处理平台,在数据汇总查询方面(如GROUP BY),ClickHouse的查询速度非常快。

  • ClickHouse 适合流式或批次入库的时序数据。

  • ClickHouse 在大数据领域没有走 Hadoop 生态,而是采用 Local attached storage 作为存储,这样整个 IO 可能就没有 Hadoop 那一套的局限。

  • ClickHouse 的系统在生产环境中可以应用到比较大的规模,因为它的线性扩展能力和可靠性保障能够原生支持 shard + replication 这种解决方案。它还提供了一些 SQL 直接接口,有比较丰富的原生 client。

1.2 ClickHouse使用场景

Clickhouse 适用于结构良好清晰且不可变的事件或日志流实时查询分析。 如物联网,在线游戏,电子商务,金融数据等场景。

1.3 ClickHouse 的不足

ClickHouse作为一款高性能OLAP数据库,虽然足够优秀,但也不是万能的。我们不应该把它用于任何OLTP事务性操作的场景,因为它有以下几点不足。

  • 不支持事务。
  • 不擅长根据主键按行粒度进行查询(虽然支持),故不应该把ClickHouse当作KeyValue数据库使用。
  • 不擅长按行删除数据(虽然支持)。

这些弱点并不能视为ClickHouse的缺点,事实上其他同类高性能的OLAP数据库同样也不擅长上述的这些方面。因为对于一款OLAP数据库而言,上述这些能力并不是重点,只能说这是为了极致查询性能所做的权衡。

2. ClickHouse 核心特性

2.1 完备的DBMS功能

ClickHouse拥有完备的管理功能,所以它称得上是一个DBMS(DatabaseManagementSystem,数据库管理系统),而不仅是一个数据库。作为一个DBMS,它具备了如下功能:

  • DDL(数据定义语言):可以动态地创建、修改或删除数据库、表和视图而无须重启服务
  • DML(数据操作语言):可以动态查询、插入、修改或删除数据。
  • 权限控制:可以按照用户设置的权限粒度, 对数据库或者表的操作设置权限,保障数据的安全性。
  • 数据备份与恢复:提供了数据备份导出与导入恢复机制,满足生产环境的要求。
  • 分布式管理:提供集群模式,能够自动管理多个数据库节点。

2.2 列式存储与数据压缩

ClickHouse 是使用列式存储的数据库,数据按列进行组织,属于同一列的数据会被保存在一起,列与列之间也会分别由不同的文件保存。

列式存储除了降低IO和存储的压力之外,还为向量化执行做好了铺垫。

默认使用LZ4算法压缩,在Yandex.Metrica的生产环境中,数据总体的压缩比可以达到8:1。

2.3 向量化执行引擎

  • 向量化执行,可以简单地看作一项消除程序中循环的优化。
  • 现代计算机系统概念中,向量化执行是通过数据并行以提高性能的一种实现方式(其他的还有指令级并行和线程级并行),它的原理是在CPU寄存器层面实现数据的并行操作。如下图所示存储媒介距离CPU越近,则访问数据的速度越快。
距离CPU越近,数据的访问速度越快
  • 为了实现向量化执行,需要利用CPU的SIMD指令。
  • SIMD的全称是Single Instruction Multiple Data,即用单条指令操作多条数据。
  • ClickHouse目前利用SSE4.2指令集实现向量化执行。

OLAP 向量化执行引擎简介

2.4 关系模型与SQL查询

  1. SQL 查询
  • ClickHouse完全使用SQL作为查询语言(支持GROUPBY、ORDERBY、JOIN、IN等大部分标准SQL),使得现有的第三方分析可视化系统可以轻松与它集成对接。

  • 在SQL解析方面,ClickHouse是大小写敏感的

  1. 关系模型
  • ClickHouse使用关系模型描述数据并提供了传统数据库的概念(数据库、表、视图和函数等)。
  • 关系模型相比文档和键值对等其他模型,拥有更好的描述能力,也能够更加清晰地表述实体间的关系。
  • ClickHouse使用了关系模型,所以将构建在传统关系型数据库或数据仓库之上的系统迁移到ClickHouse的成本会变得更低。

2.5 多样化的表引擎

  • ClickHouse也将存储部分进行了抽象,把存储引擎作为一层独立的接口。

  • ClickHouse共拥有合并树、内存、文件、接口和其他6大类20多种表引擎。

  • 每一种表引擎都有着各自的特点,用户可以根据实际业务场景的要求,选择合适的表引擎使用。

  • 将表引擎独立设计的好处是显而易见的,通过特定的表引擎支撑特定的场景,十分灵活。

  • 对于简单的场景,可直接使用简单的引擎降低成本,而复杂的场景也有合适的选择。

2.6 多线程与分布式

  1. 多线程

如果说向量化执行是通过数据级并行的方式提升了性能,那么多线程处理就是通过线程级并行的方式实现了性能的提升。

由于SIMD不适合用于带有较多分支判断的场景,ClickHouse也大量使用了多线程技术以实现提速,以此和向量化执行形成互补。

  1. 分布式

在分布式领域,计算移动比数据移动更加划算,已经成为基本共识。

在各服务器之间,通过网络传输数据的成本是高昂的,所以相比移动数据,更为聪明的做法是预先将数据分布到各台服务器,将数据的计算查询直接下推到数据所在的服务器。

ClickHouse在数据存取方面,既支持分区也支持分片,可以说是将多线程和分布式的技术应用到了极致。

2.7 多主架构

ClickHouse 采用了 Multi Master 多主架构,集群中的每个节点角色对等,客户端访问任意一个节点都能得到相同的效果。

多主架构中每个节点对等的角色使系统架构变得更加简单,不用再区分主控节点、数据节点和计算节点,集群中的所有节点功能相同。

多主架构天然规避了单点故障的问题,非常适合用于多数据中心、异地多活的场景。

2.8 在线查询

只有Clickouse在成本与性能之间做到了良好平衡,即又快又开源。

ClickHouse在复杂查询的场景下,它也能够做到极快响应,且无须对数据进行任何预处理加工。

2.9 数据分片与分布式查询

数据分片是将数据进行横向切分,这是一种在面对海量数据的场景下,解决存储和查询瓶颈的有效手段,是一种分治思想的体现。

ClickHouse支持分片,而分片则依赖集群。每个集群由1到多个分片组成,而每个分片则对应了ClickHouse的1个服务节点,分片的数量上限取决于节点数量 。

ClickHouse提供了本地表(LocalTable)与分布式表(DistributedTable)的概念。

  • 本地表等同于一份数据的分片。
  • 分布式表本身不存储任何数据,它是本地表的访问代理,其作用类似分库中间件。借助分布式表,能够代理访问多个数据分片,从而实现分布式查询。

3. ClickHouse与其他 OLAP对比

组件 说明
Druid 分布式的、支持实时多维OLAP分析的数据处理系统。
Kylin 开源的分布式分析引擎,提供Hadoop/Spark之上的SQL查询接口及多维分析(OLAP)能力以支持超大规模数据。
Presto 分布式的查询引擎,本身并不存储数据,但是可以接入多种数据源,并且支持跨数据源的级联查询。Presto擅长对海量数据进行复杂的分析。
ClickHouse 面向 OLAP 的分布式列式数据库,能够使用 SQL 查询生成实时数据报告。
Doris PB 级联机分析处理引擎,为客户提供稳定、高效、低成本的在线报表和多维分析服务。

具体对比:

OLAP产品 数据摄入 存储方式 查询性能 用户友好程度 场景
Druid 支持离线 Hdfs 数据摄入和实时 Kafka 数据摄入 LSM 变种,采用 一层全维度的 roll up 进行预计算,不存储明细 查询时在 broker 层面进行更加深层的 聚合计算,毫 秒级到秒级 组件繁多,有多种组件和进 程,依赖 ZK 和 MySQL, 运维相对复 杂,维度度量修改支持在线修改,对用户友好,需要时间字段 。 iot、实时监控指 标产出、实时渠道聚合分析等
Kylin 支持 Hive 和 Kafka 摄入,由于使用基于 mr 和 spark的计 算引擎进行 cube构建,难以达到分钟级延迟,延迟至少在 十分钟至半小时级别 全维度预计算构建 cube,支持 一些策略的剪枝,减少无用计算量,开源版本依赖 HBase 作 为 Storage 基于全量预计算产 出、亚 秒级 依赖 Hadoop 生态,适合维度、度量相对 稳定的 cube 分析,一旦需 要修改维度、 度量需要重新配置,重新构建,不一定需要时间字段 维度、度量明确的场景、分析聚合维度多样化,维度 尽量不要 超过 20 维,否则将产生维度爆炸
ClickHouse 支持离线在线数据录入,但是由于存储设计实时数据摄入千万不 能单条频繁摄入,一定要做 batch 汇总 与 kylin、druid 不同,不做预计算,完全是通过索引、列式存储、压缩、向量化、code gen 等充分压榨 cpu 等计算资源达到 快速计算的目的 毫秒级至秒级不等 单一组件、 sql 支持良 好、分析函数丰富,易上 手,需要时间短 渠道漏斗 分析、 app 点 击路径事 件分析

文章作者: hnbian
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 hnbian !
评论
  目录