ClickHouse存储引擎概述

本篇内容参考:clickhouse官方文档

一、ClickHouse引擎的作用

​ ClickHouse引擎可分为库引擎和表引擎。ClickHouse引擎的作用基本如下:

  • 数据的存储方式和位置:例如log系列引擎将数据写入在磁盘上,而Special系列的引擎将数据写入在内存上,但Distributed引擎并不存储书籍,仅作为中间件转发
  • 支持的哪些查询方式:例如log系列引擎不支持update和delete操作
  • 是否支持并发访问数据,是否可以执行多线程的请求:例如TinyLog引擎不支持并发读取,而Log引擎支持并发读取
  • 是否可以使用索引:例如log系列引擎并不支持使用索引
  • 数据如何进行复制:不同的存储引擎进行数据复制的参数完全不同

二、ClickHouse库引擎分类

ClickHouse目前支持5种库引擎:

  • Ordinary:默认引擎。在该引擎下可以使用任何类型的表引擎
  • Dictionary:字典引擎。这种引擎的数据库会自动为所有的数据字典创建它们的数据表
  • Memory:内存引擎。用于存放临时数据,这种引擎的数据库下的表只会停留在内存中,不涉及任何磁盘操作,服务重启后数据会被清除
  • Lazy:日志引擎。该类数据库只能只用Log系列的表引擎
  • MySQL引擎。该类数据库会自动拉取远端MySQL中的数据,并创建MySQL表引擎的数据表。

三、ClickHouse表引擎分类

​ ClickHouse提供了大概27种适用于不同情况的表引擎,其中整体大概分为4类,分类大致如下图所示:

​ ClickHouse主要将表引擎分为了四类:

  • MergeTree系列是主要适用的存储引擎,几乎可以支持clickhouse的所有功能使用
  • Log系列主要适用于快速小表写入,全部读出的场景,但之间仍存在查询性能的区别
  • Integration系列主要用于将外部数据导入到clickhosue中,或直接在clickhouse中处理其他的数据。例如之前使用过MySQL表引擎在clickhouse中连接到MySQL数据库,直接针对其数据进行查询
  • Special系列大多数是为了一些特殊的场景来进行的处理:例如Distributed本身不存储数据,一般作为中间件执行数据聚合等操作返回给用户;Memory将数据写入到内存中,服务重启数据丢失,一般用来做临时表;Null直接将写入数据丢弃,读取时为空,但适合用来作为视图使用等。

​ 具体每类表引擎中各个引擎的区别及使用方法会在后续文档中分别进行描述,重点会在于MergeTree和log系列。其余引擎会简单描述其适用场景。