JohnShen's Blog.

Clickhouse 概述

字数统计: 1k阅读时长: 3 min
2021/07/15 Share

Clickhouse 概述

使用场景

因为ClickHouse在诞生之初是为了服务Yandex自家的Web流量分析产品Yandex.Metrica,所以在存储数据超过20万亿行的情况下,ClickHouse做到了90%的查询都能够在1秒内返回的惊人之举。它基本能够胜任各种数据分析类的场景,并且随着数据体量的增大,它的优势也会变得越为明显。ClickHouse非常适用于商业智能领域(也就是我们所说的BI领域),除此之外,它也能够被广泛应用于广告流量、Web、App流量、电信、金融、电子商务、信息安全、网络游戏、物联网等众多其他领域。
不过ClickHouse不应该把它用于任何OLTP事务性操作的场景,因为它有以下几点不足:不支持事务;不擅长根据主键按行粒度进行查询(虽然支持),故不应该把ClickHouse当作Key-Value数据库使用;不擅长按行删除数据(虽然支持)。

特性介绍

ClickHouse是一款MPP架构的列式存储数据库。特性如下:

完备的DBMS功能:DDL(数据定义语言)/ DML(数据操作语言)/ 权限控制 / 数据备份与恢复 / 分布式管理

列式存储与数据压缩:一个非常流行的观点认为,如果你想让查询变得更快,最简单且有效的方法是减少数据扫描范围和数据传输时的大小,而列式存储和数据压缩就可以帮助我们实现上述两点。列式存储和数据压缩通常是伴生的,因为一般来说列式存储是数据压缩的前提。数据按列进行组织,属于同一列的数据会被保存在一起,列与列之间也会由不同的文件分别保存(这里主要指MergeTree表引擎)。数据默认使用LZ4算法压缩。

向量化执行引擎:ClickHouse目前利用SSE4.2指令集实现向量化执行。

关系模型与SQL查询:ClickHouse使用关系模型描述数据并提供了传统数据库的概念(数据库、表、视图和函数等)。在SQL解析方面,ClickHouse是大小写敏感的。

多样化的表引擎:最初架构是基于MySQL实现的,所以在ClickHouse的设计中,能够察觉到一些MySQL的影子,表引擎的设计就是其中之一。每一种表引擎都有着各自的特点,用户可以根据实际业务场景的要求,选择合适的表引擎使用。

多线程与分布式:ClickHouse在数据存取方面,既支持分区(纵向扩展,利用多线程原理),也支持分片(横向扩展,利用分布式原理),可以说是将多线程和分布式的技术应用到了极致。

多主架构:HDFS、Spark、HBase和Elasticsearch这类分布式系统,都采用了Master-Slave主从架构,由一个管控节点作为Leader统筹全局。而ClickHouse则采用Multi-Master多主架构,集群中的每个节点角色对等,客户端访问任意一个节点都能得到相同的效果。这种多主的架构有许多优势,例如对等的角色使系统架构变得更加简单,不用再区分主控节点、数据节点和计算节点,集群中的所有节点功能相同。所以它天然规避了单点故障的问题,非常适合用于多数据中心、异地多活的场景。

数据分片与分布式查询:ClickHouse提供了本地表(Local Table)与分布式表(Distributed Table)的概念。一张本地表等同于一份数据的分片。而分布式表本身不存储任何数据,它是本地表的访问代理,其作用类似分库中间件。借助分布式表,能够代理访问多个数据分片,从而实现分布式查询。

CATALOG
  1. 1. Clickhouse 概述
    1. 1.1. 使用场景
    2. 1.2. 特性介绍