尚学堂给同学们带来全新的Java300集课程啦!java零基础小白自学Java必备优质教程_手把手图解学习Java,让学习成为一种享受_哔哩哔哩_bilibili
ClickHouse 是一个用于联机分析 (OLAP) 的列式数据库管理系统 (DBMS)。来自于 2011 年在纳斯达克上市的俄罗斯本土搜索引擎企业 Yandex 公司, 诞生之初就是为了服务 Yandex 公司自家的 Web 流量分析产品 Yandex.Metrica,后来经过演变,逐渐形成为现在的 ClickHouse,全称是:Click Stream, Data WareHouse
ClickHouse 官网:https://clickhouse.tech/,它具有 ROLAP、在线实时查询、完整的 DBMS 功能支持、列式存储、不需要任何数据预处理、支持批量更 新、拥有非常完善的 SQL 支持和函数、支持高可用、不依赖 Hadoop 复杂生态、开箱即用等许多特点。
在 1 亿数据集体量的情况下,ClickHouse 的平均响应速度是 Vertica 的 2.63 倍、InfiniDB 的 17 倍、MonetDB 的 27 倍、Hive 的 126 倍、MySQL 的 429 倍以及Greenplum 的 10 倍。详细的测试结果可以查阅:https://clickhouse.tech/benchmark/dbms/。
ClickHouse 非常适用于商业智能领域(也就是我们所说的 BI 领域),除此之外,它也能够被广泛应用于广告流量、Web、App 流量、电信、金融、电子 商务、信息安全、网络游戏、物联网等众多其他领域。
ClickHouse 是近年来备受关注的开源列式数据库,主要用于数据分析(OLAP)领域。目前国内社区火热,各个大厂纷纷跟进大规模使用:
ClickHouse 缺点:
那么一个专门用来做 OLAP 分析的存储引擎该如何设计呢?
如何在海量数据中,针对大量数据进行查询分析呢?核心需求是 实现海量数据集中的高性能低延迟查询分析功能,一些常见的方案和手段如下:
- 数据排序
- 数据分区分片 + 分布式查询
- 列式存储 + 字段类型统一
- 列裁剪
- 预聚合(搜索引擎: 输入关键词,搜索引擎根据关键词到 数据库 找到这个 关键词对应的所有的 URL:这些 URL 就是提前计算出来的 )
- 利用CPU特性:向量化引擎,操作系统必须支持;
- 主键索引 + 二级索引 + 位图索引 + 布隆索引 等等各种索引技术
- 支持近似计算, pv 一个电商平台的 sku 总数;
- 定制引擎:多样化的存储引擎满足不同场景的特定需要;
- 多样化算法选择:Volnitsky高效字符串搜索算法 和 HyperLogLog基于概率高效去重算法;
总结一下:单条记录的增删改查操作,通过数据横向切割,做到数据操作的快速定位,在海量数据分析中,一般就是针对大量行数据少列做分析,既然并不是全部列,那么把数据做纵向切分把表中的数据按照列来单独存储,那么在做分析的时候,同样可以快速把待查询分析的数据总量降低到原来表的 1/n,同样提高效率。而且对于常用的聚合逻辑的结果,也可以提前算出来缓存起来用来提供效率,这就是预聚合技术。
提到预聚合,大家会想到 Kylin, Kylin 是一个把预聚合技术发挥到极致的一个 OLAP 技术,但是 Kylin 也有它的缺点:
ClickHouse 是一个 OLAP 类型的分析型数据库,也有库和表的概念,而且库和表还都提供了不同类型的引擎。所以关于 ClickHouse 的底层引擎,其实可以分为 数据库引擎 和 表引擎 两种。在此,我们重点讲解表引擎。
关于库引擎,简单总结一下。ClickHouse 也支持在创建库的时候,指定库引擎,目前支持 5 种,分别是:Ordinary,Dictionary, Memory, Lazy, MySQL,其实 Ordinary 是默认库引擎,在此类型库引擎下,可以使用任意类型的表引擎。
Ordinary引擎: 默认引擎,如果不指定数据库引擎创建的就是 Ordinary 数据库;
Dictionary引擎: 此数据库会自动为所有数据字典创建表 ;
Memory引擎: 所有数据只会保存在内存中,服务重启数据消失,该数据库引擎只能够创建 Memory 引擎表 ;
MySQL引擎: 改引擎会自动拉取远端 MySQL 中的数据,并在该库下创建 MySQL 表引擎的数据表;
Lazy延时引擎: 在距最近一次访问间隔 expiration_time_in_seconds 时间段内,将表保存在内存中,仅适用于 Log 引擎表;
表引擎在 ClickHouse 中的作用十分关键,直接决定了数据如何存储和读取、是否支持并发读写、是否支持 index、支持的 query 种类、是否支持主备复制等。
- 数据的存储方式和位置,写到哪里以及从哪里读取数据
- 支持哪些查询以及如何支持。
- 并发数据访问。
- 索引的使用(如果存在)。
- 是否可以执行多线程请求。
- 数据复制参数。
具体可看官网:https://clickhouse.tech/docs/zh/engines/table-engines/
ClickHouse 的表引擎提供了四个系列(Log、MergeTree、Integration、Special)大约 28 种表引擎,各有各的用途。比如 Log 系列用来做小表数据分 析,MergeTree 系列用来做大数据量分析,而 Integration 系列则多用于外表数据集成。Log、Special、Integration 系列的表引擎相对来说,应用场景有限,功能简单,应用特殊用途,MergeTree 系列表引擎又和两种特殊表引擎(Replicated,Distributed)正交形成多种具备不同功能的 MergeTree 表引擎。