ClickHouse(08)ClickHouse表引擎概况

本文涉及的产品
实时数仓Hologres,5000CU*H 100GB 3个月
智能开放搜索 OpenSearch行业算法版,1GB 20LCU 1个月
检索分析服务 Elasticsearch 版,2核4GB开发者规格 1个月
简介: 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经典中文文档分享

clickhouse系列文章

相关文章
|
12月前
|
存储 SQL 大数据
大数据技术之Clickhouse---入门篇---数据类型、表引擎
大数据技术之Clickhouse---入门篇---数据类型、表引擎
|
4月前
|
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)。
71 12
|
4月前
|
Java 关系型数据库 MySQL
ClickHouse(17)ClickHouse集成JDBC表引擎详细解析
ClickHouse通过JDBC桥接器`clickhouse-jdbc-bridge`连接到外部数据库,支持Nullable类型。使用`CREATE TABLE`语句配置JDBC引擎,如`ENGINE = JDBC(datasource_uri, db, table)`。示例展示了如何与MySQL交互,创建本地表并从远程MySQL表中查询和插入数据。此外,ClickHouse还支持JDBC表函数,允许临时查询远程表。相关系列文章在指定链接中提供。
273 7
|
4月前
|
SQL 缓存 关系型数据库
ClickHouse(19)ClickHouse集成Hive表引擎详细解析
Hive引擎允许对HDFS Hive表执行 `SELECT` 查询。目前它支持如下输入格式: -文本:只支持简单的标量列类型,除了 `Binary` - ORC:支持简单的标量列类型,除了`char`; 只支持 `array` 这样的复杂类型 - Parquet:支持所有简单标量列类型;只支持 `array` 这样的复杂类型
165 1
|
4月前
|
SQL NoSQL 关系型数据库
ClickHouse(24)ClickHouse集成mongodb表引擎详细解析
**MongoDB引擎在ClickHouse中提供只读访问远程数据,用于`SELECT`查询。不支持写入。创建MongoDB表引擎的语法:`CREATE TABLE ... ENGINE = MongoDB(host, db, coll, user, pass)`。例如:**查看[ClickHouse中文文档](https://zhangfeidezhu.com/?p=468)获取更多教程,包括系列文章覆盖的各种表引擎解析。
105 0
|
4月前
|
SQL 关系型数据库 MySQL
ClickHouse(23)ClickHouse集成Mysql表引擎详细解析
ClickHouse的MySQL引擎允许执行`SELECT`查询从远程MySQL服务器。使用`MySQL('host:port', 'database', 'table', 'user', 'password'[,...])`格式连接,支持简单`WHERE`子句在MySQL端处理,复杂条件和`LIMIT`在ClickHouse端执行。不支持`NULL`值,用默认值替换。系列文章涵盖ClickHouse安装、集群搭建、表引擎解析等主题。[链接](https://zhangfeidezhu.com/?p=468)有更多
185 0
|
4月前
|
SQL 分布式计算 安全
ClickHouse(22)ClickHouse集成HDFS表引擎详细解析
ClickHouse的HDFS引擎允许直接在Hadoop生态系统内管理数据。使用`ENGINE=HDFS(URI, format)`,其中URI指定HDFS路径,format定义文件格式(如TSV、CSV或ORC)。表可读写,但不支持`ALTER`、`SELECT...SAMPLE`、索引和复制操作。通配符可用于文件路径,如`*`、`?`和范围`{N..M}`。Kerberos认证可配置。虚拟列包括文件路径 `_path` 和文件名 `_file`。有关更多信息,参见相关文章系列。
91 0
|
4月前
|
消息中间件 SQL 存储
ClickHouse(21)ClickHouse集成Kafka表引擎详细解析
ClickHouse的Kafka表引擎允许直接从Apache Kafka流中消费数据,支持多种数据格式如JSONEachRow。创建Kafka表时需指定参数如brokers、topics、group和format。关键参数包括`kafka_broker_list`、`kafka_topic_list`、`kafka_group_name`和`kafka_format`。Kafka特性包括发布/订阅、容错存储和流处理。通过设置`kafka_num_consumers`可以调整并行消费者数量。Kafka引擎还支持Kerberos认证。虚拟列如`_topic`、`_offset`等提供元数据信息。
190 0
|
4月前
|
SQL 关系型数据库 数据库连接
ClickHouse(20)ClickHouse集成PostgreSQL表引擎详细解析
ClickHouse的PostgreSQL引擎允许直接查询和插入远程PostgreSQL服务器的数据。`CREATE TABLE`语句示例展示了如何定义这样的表,包括服务器信息和权限。查询在只读事务中执行,简单筛选在PostgreSQL端处理,复杂操作在ClickHouse端完成。`INSERT`通过`COPY`命令在PostgreSQL事务中进行。注意,数组类型的处理和Nullable列的行为。示例展示了如何从PostgreSQL到ClickHouse同步数据。一系列的文章详细解释了ClickHouse的各种特性和表引擎。
119 0
|
5月前
|
存储 传感器 网络协议
ClickHouse 数据类型、表引擎与TTL
ClickHouse数据类型包括UInt8、Int64等,对应Java的Short、Long等,支持数字、字符串、日期时间、数组、枚举、UUID和IP地址等多种类型。建表时需确定好数据类型,避免后期转换影响效率。不要使用Nullable类型,因其低效。合理设置分区和索引,避免轻量删除和修改操作。表引擎如TinyLog适合小规模数据,MergeTree适用于有序时间序列,ReplacingMergeTree用于替换更新数据,AggregatingMergeTree和SummingMergeTree做聚合计算,CollapsingMergeTree保留最新状态。
下一篇
无影云桌面