ClickHouse

如何借助ClickHouse加速你的数据分析

ClickHouse是一个汇聚了高效的数据存储、快速数据的查询、灵活的集成能力等特性于一身的开源的OLAP数据管理工具。

ClickHouse是技术领先于时代的联机分析型(OLAP)数据引擎,它已经在全球范围内收获了无数用户的赞许。ClickHouse的用户包括Uber,eBay还有Spotify这样的全球知名企业,帮助他们提升了查询性能,并显著降低了硬件成本。


什么是OLAP?

在我们详细介绍ClickHouse以前,让我们先说说OLAP(Online Analytical Processing ,联机分析)。

OLAP是解决多维分析(multi-dimensional analytical,MDA)的一个主要途径。传统数据库,例如MySQL,Oracle等都是OLTP(online transaction processing ,联机事务型)的。OLAP的概念也正起源于OLTP,在现在组织与企业的大数据平台中,OLAP是一个极其必要的组件。

在中心化的存储系统(例如数据仓库,数据集市,以及其他数据库)中通常有海量的历史数据,OLAP正擅长于在这样的海量数据中进行快速的多维度的分析。OLAP引擎通常专注于生成BI报告,趋势分析,高级数据挖掘等场景;而OLTP引擎则擅长于电子商务支付,银行交易,酒店预定等场景。

OLAP引擎有一些非常独有的特性,例如,引擎会支持跨多个维度的复杂查询,包括多维度的聚合能力(例如,计数,累加,取平均等)。另外,一个典型的OLAP引擎更擅长读取操作(select),而非写入操作。


ClickHouse是一个开源的、高性能的OLAP数据库管理系统,为实时的SQL数据分析而生。(引用clickhouse.com)

由于拥有不少出众的特性,全球各地都有用户采用了ClickHouse作为分析数据库。

快如闪电的性能

ClickHouse在设计表引擎时将提升查询性能作为最高优先级。因此,它比Hadoop生态以及其他数据库管理软件快上100倍。

ClickHouse在一台服务器上拥有每秒读数十亿行得性能,因此在400台服务器的集群上,它每秒能处理2TB的数据。在如此的性能下,ClickHouse仍旧能通过列式数据的压缩降低了存储需求。

ClickHouse Query
来源: ClickHouse.com

基于SQL,特性丰富

ClickHouse支持相对标准的SQL语法,用户的熟悉成本很低。

同时,它支持标准的接口,诸如JDBC,ODBC,以及其他SDK,让它非常易于集成进你的系统。ClickHouse原生支持多种数据类型,多种表引擎,以及多种函数,让开发者可以开箱即用。

可扩展性与可靠性

ClickHouse采用了大规模并行处理(Massively Parallel Processing,MPP)以及无共享(shared-nothing,SN)的架构,使它拥有线性扩展的能力,从1个节点的单机模式可以扩展到数千台服务器的集群模式。

此外,ClickHouse的架构也支持多主节点的副本模式,能够在多个区域部署,避免单点故障。

解耦Hadoop环境

ClickHouse采用C++编写,对Hadoop没有任何依赖。只要一个二进制文件,ClickHouse的服务就能部署并启动。

丰富的开源社区生态

最后,ClickHouse是一个Apach 2.0许可下的开源项目,活跃的社区确保了项目的不断迭代。你能够在社区群体的智慧中受益良多。

为什么ClickHouse如此之快?

ClickHouse致力于打造一个快速高效的平台,这面说的快速、高效指以下两个方面:

  • 快而准地数据读取
  • 高效数据处理

快而准地数据读取

  • 本地存储

使用本地存储降低了网络故障等常见问题的影响,并且提速了分析的效率。

  • 分区

ClickHouse的数据表会进行分区,在使用WHERE进行字段筛选时,引擎只选取需要的分区,降低了扫描表的行数。

  • 列式存储

分析类业务有一个重要的特点:源数据通常包含了成百上千列,但分析所需的报表可能只需要其中的一小部分。使用列式存储,能让系统避免读取多余的列,有效利用昂贵的磁盘读带宽。

  • 列压缩

ClickHouse支持特殊的数据压缩编解码器。由于每一列中的数据都比每一行更为相似,ClickHouse的压缩比比传统的行式数据库更高。

  • 稀疏索引

ClickHouse支持存储稀疏索引,索引的粒度是预定义的,可以在必要的列上开启该特性以加速查询。

  • PREWHERE优化

采用PREWERE子句后,只有PREWERE条件中的列会被全部读取,其余的列只会读取PREWHERE表达式=TRUE的字段。这样可以少读取大量的数据块,在获得相同结果的前提下节省磁盘开销。

此外,ClickHouse支持自动开启这项优化,由后台判断哪些条件执行PREWHERE。

  • 多线程读多副本

ClickHouse采用了并行变成的模式,在单节点下,它使用多线程来获取数据;在多节点下,ClickHouse将读任务分发到了不同服务器下,让查询更快也更准。

高效数据处理

  • 向量化执行

ClickHouse不止按列存储数据,而且按列处理数据,这样,它就能提升CPU缓存的使用效率,并且允许单指令流多数据流(Single Instruction Multiple Data,SIMD)的CPU处理方式。

  • 大规模并行处理

在单节点下,即使单个查询也能被所有可用的CPU核心与驱动执行。在集群模式下,执行单个查询甚至能动用节点内所有的CPU核心和磁盘。

  • 灵活的实现方案

ClickHouse不会只使用一套通用算法或数据结构去处理数据。开发者可以根据任务的需求选择正确的数据结构与算法,甚至可以为独特的用例提供定制化的算法。

何时使用ClickHouse?

作为一个列式存储的典型OLAP引擎,ClickHouse非常适合以下场景:

  • 大批量的数据插入
  • 基本无需修改现有数据
  • 拥有许多列的大宽表
  • 在指定的列进行聚合计算操作
  • 快速执行的SELECT查询

在以下场景下,可能ClickHouse可能并不适用:

  • OLTP场景,即必须支持更新(UPDATE)和事务的场景
  • K-V存储,以及大量使用单行的查询的场景
  • 查询中大量使用JOIN
  • Blob或文档存储

ClickHouse在字节跳动

字节跳动自2017年开始使用ClickHouse。目前,字节跳动的ClickHouse集群部署了超过1.5万台服务器,总数据量达600PB,平均每天会支撑6千万次查询。

ClickHouse在字节跳动内部被广泛使用,有以下原因:

首先,字节跳动需要多用途、可复用的底层组件,去支撑多样的用户分析场景。

其次,字节跳动需要高性能、低延迟的分析型数据库,我们的业务非常需要亚秒级的请求响应时间。

最后,字节跳动的生产环境需要高可用的能力,确保我们的在线服务不会被紧急故障影响。

ClickHouse的特性近乎完美地匹配了上述需求。目前ClickHouse在字节跳动内部被用于大量的数据应用,包括客户数据平台(CDP),用户增长分析,A/B测试,以及机器学习算法优化等。

总结

在大数据分析场景下,ClickHouse的表现是极为卓越的。自从2016年发布,它就是一个汇聚了高效的数据存储、快速数据的查询、灵活的集成能力等特性于一身的开源的OLAP数据管理工具。

相关文章

ByteHouse

ByteHouse云数仓版全新上线 支持云中立形态

ClickHouse

从 ClickHouse 到 ByteHouse:实时数据分析场景下的优化实践

ByteHouse

火山引擎正式发布企业版 ClickHouse——ByteHouse