ClickHouse(08)ClickHouse表引擎概况

本文涉及的产品
实时计算 Flink 版,5000CU*H 3个月
检索分析服务 Elasticsearch 版,2核4GB开发者规格 1个月
大数据开发治理平台 DataWorks,不限时长
简介: ClickHouse支持四种主要表引擎系列:MergeTree家族,适用于大数据插入并按主键排序;日志引擎系列,适合小数据量写入,如StripeLog、Log和TinyLog;集成表引擎,如ODBC、JDBC,用于与外部系统集成;特殊引擎,包括分布式、内存、随机数生成等,满足特定需求。MergeTree系列提供数据副本和分区,日志系列不支持索引和突变操作。详细解析见相关文章链接。

目前ClickHouse的表引擎主要有下面四个系列,合并树家族、日志引擎系列、集成的表引擎和其他特殊的引擎。

合并树家族

Clickhouse中最强大的表引擎当属MergeTree(合并树)引擎及该系列(MergeTree)中的其他引擎。

MergeTree系列的引擎被设计用于插入极大量的数据到一张表当中。数据可以以数据片段的形式一个接着一个的快速写入,数据片段在后台按照一定的规则进行合并。相比在插入时不断修改(重写)已存储的数据,这种策略会高效很多。

主要特点

  • 存储的数据按主键排序。这使得您能够创建一个小型的稀疏索引来加快数据检索。
  • 如果指定了分区键的话,可以使用分区。在相同数据集和相同结果集的情况下ClickHouse中某些带分区的操作会比普通操作更快。查询中指定了分区键时ClickHouse会自动截取分区数据。这也有效增加了查询性能。
  • 支持数据副本。ReplicatedMergeTree系列的表提供了数据副本功能。
  • 支持数据采样。需要的话,您可以给表设置一个采样方法。

日志引擎系列

这些引擎是为了需要写入许多小数据量(少于一百万行)的表的场景而开发的。

这系列的引擎有:

  • StripeLog
  • 日志
  • TinyLog

共同属性

  • 数据存储在磁盘上。
  • 写入时将数据追加在文件末尾。
  • 不支持突变操作。
  • 不支持索引。这意味着SELECT在范围查询时效率不高。
  • 非原子地写入数据。如果某些事情破坏了写操作,例如服务器的异常关闭,你将会得到一张包含了损坏数据的表。

当然他们之间也会有差异。

主要差异点

  1. Log和StripeLog引擎支持:
  • 并发访问数据的锁。INSERT请求执行过程中表会被锁定,并且其他的读写数据的请求都会等待直到锁定被解除。如果没有写数据的请求,任意数量的读请求都可以并发执行。
  • 并行读取数据。在读取数据时,ClickHouse使用多线程。每个线程处理不同的数据块。
  1. Log引擎为表中的每一列使用不同的文件。StripeLog将所有的数据存储在一个文件中。因此StripeLog引擎在操作系统中使用更少的描述符,但是Log引擎提供更高的读性能。

  2. TinyLog引擎是该系列中最简单的引擎并且提供了最少的功能和最低的性能。TinyLog引擎不支持并行读取和并发数据访问,并将每一列存储在不同的文件中。它比其余两种支持并行读取的引擎的读取速度更慢,并且使用了和Log引擎同样多的描述符。你可以在简单的低负载的情景下使用它。

集成的表引擎

ClickHouse 提供了多种方式来与外部系统集成,包括表引擎。像所有其他的表引擎一样,使用CREATE TABLE或ALTER TABLE查询语句来完成配置。然后从用户的角度来看,配置的集成看起来像查询一个正常的表,但对它的查询是代理给外部系统的。这种透明的查询是这种方法相对于其他集成方法的主要优势之一,比如外部字典或表函数,它们需要在每次使用时使用自定义查询方法。

以下是支持的集成方式:

  • ODBC
  • JDBC
  • MySQL
  • MongoDB
  • HDFS
  • S3
  • Kafka
  • EmbeddedRocksDB
  • RabbitMQ
  • PostgreSQL
  • SQLite
  • Hive

其他特殊的引擎

其他的表引擎用于特定的场景。具体使用什么引擎要根据具体的需求来分析。这里我们简单说一下有哪些表引擎,具体使用情况,我们后面再更新。

  • 分布式引擎:分布式引擎本身不存储数据,但可以在多个服务器上进行分布式查询。读是自动并行的。读取时,远程服务器表的索引(如果有的话)会被使用。
  • 关联表引擎:使用JOIN操作的一种可选的数据结构。Join表的数据总是保存在内存中。当往表中插入行记录时,CH会将数据块保存在硬盘目录中,这样服务器重启时数据可以恢复。如果服务器非正常重启,保存在硬盘上的数据块会丢失或被损坏。这种情况下,需要手动删除被损坏的数据文件。简单来说,这个是一种对join操作的优化的引擎。
  • 内存表:Memory 引擎以未压缩的形式将数据存储在RAM中。数据完全以读取时获得的形式存储。换句话说,从这张表中读取是很轻松的。并发数据访问是同步的。锁范围小:读写操作不会相互阻塞。不支持索引。查询是并行化的。在简单查询上达到最大速率(超过10GB/秒),因为没有磁盘读取,不需要解压缩或反序列化数据。(值得注意的是,在许多情况下,与 MergeTree 引擎的性能几乎一样高)。重新启动服务器时,表中的数据消失,表将变为空。通常,使用此表引擎是不合理的。但是,它可用于测试,以及在相对较少的行(最多约100,000,000)上需要最高性能的查询。
  • 随机数生成表引擎:随机数生成表引擎为指定的表模式生成随机数。
  • 缓冲区:缓冲数据写入RAM中,周期性地将数据刷新到另一个表。在读取操作时,同时从缓冲区和另一个表读取数据。
  • 字典:Dictionary引擎将字典数据展示为一个ClickHouse的表。
  • 用于查询处理的外部数据:ClickHouse允许向服务器发送处理查询所需的数据以及SELECT查询。这些数据放在一个临时表中,可以在查询中使用(例如,在IN操作符中)。
  • 文件(输入格式):数据源是以Clickhouse支持的一种输入格式(TabSeparated,Native等)存储数据的文件。
  • MaterializedView:物化视图,视图的数据会物化到数据盘。
  • 合并:Merge引擎(不要跟MergeTree引擎混淆)本身不存储数据,但可用于同时从任意多个其他的表中读取数据。读是自动并行的,不支持写入。读取时,那些被真正读取到数据的表的索引(如果有的话)会被使用。
  • Null:当写入Null类型的表时,将忽略数据。从Null类型的表中读取时,返回空。
  • 集合:始终存在于RAM中的数据集。它适用于IN运算符的右侧。
  • URL:用于管理远程HTTP/HTTPS服务器上的数据。该引擎类似文件引擎。
  • 视图:它不存储数据,仅存储指定的SELECT查询。从表中读取时,它会运行此查询(并从查询中删除所有不必要的列)。

clickhouse系列文章

相关文章
|
8月前
|
存储 SQL 大数据
大数据技术之Clickhouse---入门篇---数据类型、表引擎
大数据技术之Clickhouse---入门篇---数据类型、表引擎
|
1天前
|
SQL 关系型数据库 MySQL
ClickHouse(18)ClickHouse集成ODBC表引擎详细解析
ClickHouse使用ODBC集成表引擎通过`clickhouse-odbc-bridge`安全连接外部数据库,支持Nullable类型。创建ODBC表引擎的SQL示例:`CREATE TABLE ... ENGINE = ODBC(connection_settings, db, table)`. 用户需配置`odbc.ini`,如在Ubuntu+MySQL上,为`clickhouse`用户授予权限。查询示例展示如何从MySQL检索数据到ClickHouse。查阅更多详情:[ClickHouse经典中文文档分享](https://zhangfeidezhu.com/?p=468)。
24 12
|
1天前
|
SQL Java 关系型数据库
ClickHouse(17)ClickHouse集成JDBC表引擎详细解析
ClickHouse通过JDBC桥接器`clickhouse-jdbc-bridge`连接到外部数据库,支持Nullable类型。使用`CREATE TABLE`语句配置JDBC引擎,如`ENGINE = JDBC(datasource_uri, db, table)`。示例展示了如何与MySQL交互,创建本地表并从远程MySQL表中查询和插入数据。此外,ClickHouse还支持JDBC表函数,允许临时查询远程表。相关系列文章在指定链接中提供。
19 7
|
29天前
|
存储 传感器 网络协议
ClickHouse 数据类型、表引擎与TTL
ClickHouse数据类型包括UInt8、Int64等,对应Java的Short、Long等,支持数字、字符串、日期时间、数组、枚举、UUID和IP地址等多种类型。建表时需确定好数据类型,避免后期转换影响效率。不要使用Nullable类型,因其低效。合理设置分区和索引,避免轻量删除和修改操作。表引擎如TinyLog适合小规模数据,MergeTree适用于有序时间序列,ReplacingMergeTree用于替换更新数据,AggregatingMergeTree和SummingMergeTree做聚合计算,CollapsingMergeTree保留最新状态。
|
13天前
|
存储 SQL NoSQL
ClickHouse(16)ClickHouse日志表引擎Log详细解析
ClickHouse的Log引擎系列适用于小数据量(<1M行)的表,包括StripeLog、Log和TinyLog。这些引擎将数据存储在磁盘,追加写入,不支持更新和索引,写入非原子可能导致数据损坏。Log和StripeLog支持并发访问和并行读取,Log按列存储,StripeLog将所有数据存于一个文件。TinyLog是最简单的,不支持并行读取和并发访问,每列存储在单独文件中。适用于一次性写入、多次读取的场景。
22 0
|
运维
Clickhouse-表引擎的一些应用心得-重命名能力
Clickhouse-表引擎的一些应用心得-重命名能力
944 0
|
存储 SQL 消息中间件
ClickHouse表引擎到底怎么选
表引擎在ClickHouse中的作用十分关键,直接决定了数据如何存储和读取、是否支持并发读写、是否支持index、支持的query种类、是否支持主备复制等。
34181 2
|
15天前
|
存储 关系型数据库 数据库
【DDIA笔记】【ch2】 数据模型和查询语言 -- 多对一和多对多
【6月更文挑战第7天】该文探讨数据模型,比较了“多对一”和“多对多”关系。通过使用ID而不是纯文本(如region_id代替"Greater Seattle Area"),可以实现统一、避免歧义、简化修改、支持本地化及优化搜索。在数据库设计中,需权衡冗余和范式。文档型数据库适合一对多但处理多对多复杂,若无Join,需应用程序处理。关系型数据库则通过外键和JOIN处理这些关系。文章还提及文档模型与70年代层次模型的相似性,层次模型以树形结构限制了多对多关系处理。为克服层次模型局限,发展出了关系模型和网状模型。
22 6
|
17天前
|
XML NoSQL 数据库
【DDIA笔记】【ch2】 数据模型和查询语言 -- 概念 + 数据模型
【6月更文挑战第5天】本文探讨了数据模型的分析,关注点包括数据元素、关系及不同类型的模型(关系、文档、图)与Schema模式。查询语言的考量涉及与数据模型的关联及声明式与命令式编程。数据模型从应用开发者到硬件工程师的各抽象层次中起着简化复杂性的关键作用,理想模型应具备简洁直观和可组合性。
15 2