目录
[1 完备的DBMS功能](#1 完备的DBMS功能)
[2 列式存储与数据压缩](#2 列式存储与数据压缩)
[3 向量化执行引擎](#3 向量化执行引擎)
[4 关系模型与SQL查询](#4 关系模型与SQL查询)
[5 多样化的表引擎](#5 多样化的表引擎)
[6 多线程与分布式](#6 多线程与分布式)
[7 多主架构](#7 多主架构)
[8 在线查询](#8 在线查询)
[9 数据分片与分布式查询](#9 数据分片与分布式查询)
CLickhouse核心特性
1 完备的DBMS功能
具备dbms(数据库管理系统)的一些基本功能:DDL,DML,权限控制,数据备份与恢复,分布式管理等
2 列式存储与数据压缩
按列存储可以有效减少查询时扫描的数据量
数据默认使用LZ4算法压缩,Yandex.Metrica生产环境数据总体压缩比可以达到8:1
3 向量化执行引擎
向量化执行,可以简单地看作一项消除程序中循环的优化。
为了实现向量化执行,需要利用CPU的SIMD指令。SIMD的全称是 Single Instruction Multiple Data,即用单条指令操作多条数据。现代计算 机系统概念中,它是通过数据并行以提高性能的一种实现方式(其他 的还有指令级并行和线程级并行),它的原理是在CPU寄存器层面实现 数据的并行操作
4 关系模型与SQL查询
Clickhouse使用SQL作为查询语句,SQL 拥有极高的"群众基础",更容易被使用者学习接受。
关系模型相比文档和键值对等其他模型,拥有更好的描述能力, 也能够更加清晰地表述实体间的关系。
5 多样化的表引擎
ClickHouse 共拥有合并树、内存、文件、接口和其他6大类20多种表引擎。其中每 一种表引擎都有着各自的特点,用户可以根据实际业务场景的要求, 选择合适的表引擎使用。
6 多线程与分布式
如果说向量化执行是通过数据级并行的方式提升了性能,那么多 线程处理就是通过线程级并行的方式实现了性能的提升。相比基于底 层硬件实现的向量化执行SIMD,线程级并行通常由更高层次的软件层 面控制。现代计算机系统早已普及了多处理器架构,所以现今市面上 的服务器都具备良好的多核心多线程处理能力。由于SIMD不适合用于 带有较多分支判断的场景,ClickHouse也大量使用了多线程技术以实 现提速,以此和向量化执行形成互补。
ClickHouse在数据存取方面,既支持分区(纵向扩 展,利用多线程原理),也支持分片(横向扩展,利用分布式原 理),可以说是将多线程和分布式的技术应用到了极致。
7 多主架构
ClickHouse则采用Multi-Master多主架构,集群中的每个节点角色对 等,客户端访问任意一个节点都能得到相同的效果。这种多主的架构 有许多优势,例如对等的角色使系统架构变得更加简单,不用再区分 主控节点、数据节点和计算节点,集群中的所有节点功能相同。所以 它天然规避了单点故障的问题,非常适合用于多数据中心、异地多活 的场景。
8 在线查询
正如ClickHouse的"广告词"所言,其他的开源系统太慢,商用的 系统太贵,只有Clickouse在成本与性能之间做到了良好平衡,即又快 又开源。ClickHouse当之无愧地阐释了"在线"二字的含义,即便是在 复杂查询的场景下,它也能够做到极快响应,且无须对数据进行任何 预处理加工。
9 数据分片与分布式查询
数据分片是将数据进行横向切分,这是一种在面对海量数据的场 景下,解决存储和查询瓶颈的有效手段,是一种分治思想的体现。 ClickHouse支持分片,而分片则依赖集群。每个集群由1到多个分片组 成,而每个分片则对应了ClickHouse的1个服务节点。分片的数量上限 取决于节点数量(1个分片只能对应1个服务节点)。
ClickHouse并不像其他分布式系统那样,拥有高度自动化的分片 功能。ClickHouse提供了本地表(Local Table)与分布式表 (Distributed Table)的概念。一张本地表等同于一份数据的分片。而 分布式表本身不存储任何数据,它是本地表的访问代理,其作用类似 分库中间件。借助分布式表,能够代理访问多个数据分片,从而实现 分布式查询。
Clickhouse适用场景
ClickHouse非常适用于商业智能领域(也就是我们所说的BI领域),除此之外,它也能够被广泛应用于广告流量、Web、App流量、 电信、金融、电子商务、信息安全、网络游戏、物联网等众多其他领 域。
Clickhouse不适用场景
·不支持事务。
·不擅长根据主键按行粒度进行查询(虽然支持),故不应该把ClickHouse当作Key-Value数据库使用。
·不擅长按行删除数据(虽然支持)。
Clickhouse名称含义
Click Stream,Data WareHouse
整个系统的逻辑就十分清晰了,那就是基于页 面的点击事件流,面向数据仓库进行OLAP分析