一、初识ClickHouse
1、什么是ClickHouse
ClickHouse 全称 Click Stream, Data WareHouse,是一个用于联机分析 (OLAP) 的列式数据库管理系统 (DBMS)。由俄罗斯本土搜索引擎企业 Yandex 公司为了自己公司自家的 Web 流量分析产品 Yandex.Metrica 开发,后来经过演变,逐渐形成为现在的 ClickHouse。
2、ClickHouse优缺点
ClickHouse 具有 ROLAP、在线实时查询、完整的 DBMS 功能支持、列式存储、不需要任何数据预处理、支持批量更新、拥有非常完善的 SQL 支持和函数、支持高可用、不依赖 Hadoop 复杂生态、开箱即用等许多特点。
ClickHouse 虽然有这么多特点和优点,但显然也存在一些劣势:
- 没有完整的事务支持
- 不擅长join操作,且语法特殊
- 由于采用并行处理机制,即使一个查询也会使用一半CPU资源,所以不支持高并发
- 稀疏索引导致ClickHouse不擅长细粒度或者 key-value 类型数据的查询需求
- 缺少高频率,低延迟的修改或删除已存在数据的能力。
二、数据引擎
ClickHouse 是一个OLAP 分析型数据库,也有库和表的概念,而且库和表都提供了不同类型的引擎,所以关于ClickHouse的底层引擎可以分为【数据库引擎】和【表引擎】两种。
1、数据库引擎
ClickHouse 支持在创建库的时候指定库引擎,目前支持5种,分别是:Ordinary,Dictionary,Memory,Lazy,MySQL。其中 Ordinary是默认库引擎,在此类型库引擎下,可以使用任意类型的表引擎。
ClickHouse数据库引擎:
Ordinary:默认引擎,此数据库可以使用任意表引擎。
Dictionary:字典引擎,此数据库会为所有数据字典创建数据表。
Memory:内存引擎,此数据库中的表只存放内存中,重启丢失。
Lazy:日志引擎,此数据库只能使用Log系列的表引擎。
MySQL:MySQL引擎,此数据库可以自动拉取远端MySQL数据
2、表引擎
相比于库引擎,表引擎在 ClickHouse 中的地位更加核心,它直接决定了 CH 中数据如何存储和读取,是否支持并发读写和 Idex 等等。
ClickHouse 的表引擎提供了四个系列(Log、MergeTree、Integration、Special)大约 28 种表引擎,各有各的用途。比如 Log 系列用来做小表数据分 析,MergeTree 系列用来做大数据量分析,而 Integration 系列则多用于外表数据集成。Log、Special、Integration 系列的表引擎相对来说,应用场景有限,功能简单,应用特殊用途,MergeTree 系列表引擎又和两种特殊表引擎(Replicated,Distributed)正交形成多种具备不同功能的 MergeTree 表引擎。
3、MergeTree引擎
MergeTree 系列是 ClickHouse 官方主推的存储引擎,几乎支持全部的核心功能,该系列中,常用的表引擎有:MergeTree、ReplacingMergeTree、 CollapsingMergeTree、 Ver