clickhouse 使用背景

1.3 架构目标

1、海量数据的存储

2、实时导入

3、实时查询

4、可以进行多维度聚合分析

https://imgconvert.csdnimg.cn/aHR0cHM6Ly9naXRlZS5jb20vd3VxaW5nemhpMTI4L2Jsb2dJbWcvcmF3L21hc3Rlci9pbWFnZS0yMDIwMDgyNDE0MTY1NjQ5MC5wbmc?x-oss-process=image/format,png

需要理解的概念

  1. OLTP mysql 【 Online Transaction Processing 】
  2. OLAP clickhouse 【Online Analytical Processing】

相关的概念解释

参考网站

Easy OLAP Definition

OLAP (Online Analytical Processing) is the technology behind many Business Intelligence (BI) applications. OLAP is a powerful technology for data discovery, including capabilities for limitless report viewing, complex analytical calculations, and predictive “what if” scenario (budget, forecast) planning.

OLAP 的优势

知识是所有成功决策的基础。成功的企业不断规划、分析和报告销售和运营活动,以最大限度地提高效率、减少支出并获得更大的市场份额。统计学家会告诉您,您拥有的样本数据越多,得到的统计数据就越有可能为真。自然,公司可以访问的有关特定活动的数据越多,改进该活动的计划就越有可能有效。所有企业都使用许多不同的系统收集数据,但挑战仍然存在:如何将所有数据整合在一起以创建有关企业的准确、可靠、快速的信息。一家能够准确、快速地利用并将其转化为共享知识的公司,

OLAP 技术被定义为实现“快速访问共享多维信息”的能力。 鉴于 OLAP 技术能够创建非常快速的基础数据集聚合和计算,人们可以理解它在帮助业务领导者做出更好、更快的“知情”决策方面的有用性。

2.1 我们先来看看OLAP的场景都有哪些特征

1、读多写少

不同于事务处理(OLTP)的场景,比如电商汇总加购,下单,支付等需要在原地进行大量的update、delete、insert的操作。数据分析(OLAP)场景通常是将数据批量导入后,进行任意维度的灵活探索、BI工具洞察、报表制作等。

数据一性写入后,分析书需要尝试从各个角度对数据做挖掘、分析,直到发现其中的商业价值、业务变化趋势等信息。这是一个需要反复试错、不断调整、持续优化的一个过程,其中数据的读取次数远多于写入次数。这就要求底层数据库为这个特点做专门设计,而不是盲目采用传统数据库的技术架构。

2、大宽表,读取大量的行但是少量的列,结果集比较小

在OLAP场景中, 通常存在一张或者是几张多列的大宽表,列数高达数百甚至数千列。对数据分析处理时,选择其中少数的几个列作为维度列,其他少数几列作为指标列,然后对全表或者某一个较大范围内的数据做聚合计算,例如月度,这个过程会扫描大量的行数据,但是可能只用到了其中的少数几个列。聚合计算的结果集也比动辄数十亿的原始数据,也明显小得多。

3、数据批量写入,且数据不更新或者少更新

OLTP类业务对于延时(Latency)要求更高,要避免给客户等待造成业务损失;而OLAP类业务,由于数据量非常大。通产个更加关注写入和吞吐,要求海量数据能够尽快导入完成。一旦完成,历史数据往往作为存档,不会做更新和删除操作。其实也有这种需求,哈哈,有些人叫刷数小王子 不是白叫的,对数皇帝,嘿嘿。

4、无需事务,数据一致性要求低

OLAP类业务对于事务需求较少,通常是导入历史日志数据,或搭配一款事务型数据库并实时从事务型数据库中进行数据同步。多数OLAP系统都支持最终一致性。

5、灵活多变,不适合预先建模

分析场景下,随着业务变化要及时调整分析维度、挖掘方法,以尽快发现数据价值、更新业务指标。而数据仓库中通常存储着海量的历史数据,调整代价十分高昂。预先建模技术虽然可以在特定场景中加速计算,但是无法满足业务灵活多变的发展需求,维护成本过高。

3.3 ClickHouse概述

ClickHouse 是俄罗斯搜索巨头 Yandex 公司早 2016年 开源的一个极具 " 战斗力 " 的实时数据分析数据库,是一个用于联机分析 (OLAP:Online Analytical Processing) 的列式数据库管理系统(DBMS:Database Management System),简称 CK,工作速度比传统方法快100-1000倍,ClickHouse的性能超过了目前市场上可比的面向列的DBMS。 每秒钟每台服务器每秒处理数亿至十亿多行和数十千兆字节的数据。它允许在运行时创建表和数据库,加载数据和运行查询,而无需重新配置和重新启动服务器,支持线性扩展,简单方便,高可靠性,容错。

ClickHouse 作为一个高性能 OLAP 数据库,虽然OLAP能力逆天但也不应该把它用于任何OLTP事务性操作的场景,相比OLTP:不支持事务、不擅长根据主键按行粒度的查询、不擅长按行删除数据,目前市场上的其他同类高性能 OLAP 数据库同样也不擅长这些方面。因为对于一款OLAP数据库而言,OLTP能力并不是重点。

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

典型特点总结: ROLAP、在线实时查询、完整的DBMS、列式存储、不需要任何数据预处理、支持批量更新、具有非常完善的SQL支持和函数、支持高可用、不依赖Hadoop复杂生态、开箱即用ClickHouse适合流式或批次入库的时序数据。ClickHouse不应该被用作通用数据库,而是作为超高性能的海量数据快速查询的分布式实时处理平台,在数据汇总查询方面(如GROUP BY),ClickHouse的查询速度非常快。

3.4 Clickhouse的适用场景

适合 :用于结构良好清晰且不可变的事件或日志流分析。

1、Web和App数据分析

2、广告网络和RTB

3、电信

4、电子商务和金融

5、信息安全

6、监测和遥测

7、时序数据

8、商业智能

9、在线游戏

10、物联网

不适合 :事务性工作(OLTP),高请求率的键值访问,低延迟的修改或删除已存在数据,Blob或文档存储,超标准化数据。

1、事物性工作(OLTP) 2、高并发的键值访问 3、Blob或者文档存储 4、超标准化的数据

OLTP Vs. OLAP

Oracle、MySQL等数据库都属于OLTP类型,即在线事务处理。 OLTP 数据库在处理请求和数据时需要高延迟,保证数据的完整性和一致性。这种数据库是面向终端用户的,需要7×24不间断的服务能力。

OLAP 的意思是在线分析数据处理。这种数据库需要存储海量但很少更新和修改的数据,主要用于多维历史数据分析和统计。对于这个需求,OLAP 数据库需要保证足够高的查询效率,至少 90% 的请求应该在短时间内返回。

另一方面,OLAP数据库并不直接面向最终客户,而是更注重数据吞吐量。它需要海量数据尽快持久化,为业务决策、战略定位与分析、个性化推荐等任务提供分析统计能力。因此,此类数据库中的查询一般是低频的。

ClickHouse主要特点

 

列式存储

列存储是基于OLAP数据库的特点,ClickHouse采用列式数据存储引擎。传统的行数据库在存储信息时将信息–记录在数据库中。以用户注册信息为例,行数据库会依次记录每个用户的姓名、职业、年龄等数据。当业务需要查找注册用户的职业或年龄分布时,数据库需要打开所有存储用户注册信息的文件,遍历所有数据行,依次挑出所有的职业和年龄信息进行汇总。这样,查询遍历的数据往往远大于所需的数据大小,会造成IO容量的严重浪费。

相比之下,列存储会将数据分成多个属性列,比如用户注册信息分为职业、年龄等多个属性,并根据这些属性列分别存储在多个文件中。这样,当查询需要获取某些属性的数据时,只需要找到对应的文件即可完成,大大节省了IO需求。

以包含1亿条数据的测试为例,简单的count查询在MySQL上耗时两分钟多,而在列式Clickhouse数据库上返回结果只用了不到一秒。通过学习ClickHouse,可以了解具体设计思路,如何实现如此高效率的提升。

DBMS功能

ClickHouse拥有完备的管理功能,称得上是一个DBMS(Database Management System, 数据库管理系统)。

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

数据压缩

如果提升查询效率,最简单且有效的方法是减少扫描范围和数据传输的大小,而列式存储和数据压缩就可以实现以上两点。列式存储和数据压缩通常是伴生的,一般来说列式存储是数据压缩的前提。

数据中重复数据项越多,则压缩率越高;压缩率越高,则数据体量越小;而数据体量越小,则数据在网络中的传输越快,对网络带宽和磁盘IO的压力也就越小。

 

向量化执行

SIMD(Single Instruction Multiple Data),即单条指令操作多条数据。现代计算机中,通过数据并行以提高性能的一种实现方式(其他的还有指令级并行和线程级并行),它的原理是CPU寄存器层面实现数据的并行操作。

ClickHouse 目前利用 SSE4.2 指令集实现向量化执行(SIMD)。

 

关系模型与SQL查询

Clickhouse使用关系模型描述数据并提供了传统数据库的概念(数据库、表、视图和函数)。Clickhouse完全使用SQL作为查询语言,容易理解和学习。

 

多样化的表引擎

Clickhouse经存储进行了抽象,把存储引擎作为一层独立的接口。目前Clickhouse共拥有Mergetree、Memory、File和其他6大类20多种表引擎。

 

多线程与分布式

Clickhouse在数据库存取方面,既支持分区(纵向扩展,利用多线程原理),也支持分片(横向扩展,利用分布式原理)。

 

多主架构

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

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

可以避免单点故障的问题,适用于多数据中心、异地多活的场景。

 

数据分片与分布式查询

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