一、MergeTree 系列
- MergeTree:
-
- 这是 ClickHouse 中最强大的表引擎之一。
- 特点:
- 支持数据分区,可以按照指定的列(如日期等)进行分区,便于对数据进行高效的管理和查询。例如,可以按天对数据进行分区,当查询某一天的数据时,能快速定位到相应的分区,减少不必要的数据读取。
- 支持数据副本,提高数据的可靠性。
- 数据按照主键进行排序存储,这有助于在进行范围查询等操作时提高性能。例如,当查询某一范围内的主键值对应的记录时,由于数据是有序存储的,可以更高效地进行查找。
- ReplacingMergeTree:
-
- 在 MergeTree 的基础上增加了数据去重的功能。
- 特点:
- 以相同的顺序写入数据时,它可以在后台合并数据时去除重复的数据。但它不能保证在任何情况下都完全去除重复数据,例如在并发写入的情况下可能会有一些限制。
- 对于某些需要处理重复数据但又不希望在应用层进行复杂去重操作的场景比较适用。
- SummingMergeTree:
-
- 可以对某些列的值进行预聚合。
- 特点:
- 当合并数据片段时,会按照指定的列(可以是一个或多个列)对数据进行求和操作。例如,对于记录销售数量的列,在数据合并时可以自动对相同主键下的销售数量进行求和,这样在查询时可以直接得到聚合后的数据,提高查询效率。
- 适用于需要对某些数值列进行快速聚合查询的场景。
- AggregatingMergeTree:
-
- 更高级的聚合表引擎。
- 特点:
- 它可以基于预先定义的聚合函数对数据进行聚合。与 SummingMergeTree 不同,它可以支持更复杂的聚合函数,如平均值、最大值、最小值等。
- 在数据合并时按照指定的聚合规则对数据进行处理,使得查询时能够快速获取聚合结果,适用于复杂的数据分析场景。
二、其他常用引擎
- Memory:
-
- 特点:
- 数据存储在内存中,读写速度非常快。
- 但是,当服务器重启或发生故障时,内存中的数据会丢失。适用于临时数据的存储或需要快速处理但不要求数据持久性的场景,例如某些实时计算的中间结果。
- 特点:
- TinyLog:
-
- 特点:
- 是一种简单的表引擎,它将数据以简单的文本格式写入磁盘。
- 不支持索引(除了主键索引),适用于小数据量、对写入性能要求不高且不需要复杂查询功能的场景。
- 特点:
- Log:
-
- 特点:
- 与 TinyLog 类似,但它是为了处理大量的简单写入操作而设计的。
- 数据也是以简单的文本格式存储,同样不支持复杂的索引等功能。适用于只需要简单记录数据,对查询性能和数据完整性要求不高的场景,比如一些日志记录的简单场景。
- 特点:
- ColumnStore:
-
- 特点:
- 它是一种面向列存储的引擎。
- 数据按照列进行存储,而不是传统的行存储方式。这种存储方式对于某些分析型查询非常有利,因为在分析时通常只需要访问表中的部分列,而不是所有列。按列存储可以大大减少不必要的数据读取,提高查询性能。适用于大规模数据分析场景,特别是需要对大量数据的特定列进行频繁查询和分析的情况。
- 特点:
三、外部数据源相关引擎
- MySQL:
-
- 特点:
- 可以直接从 MySQL 数据库中读取数据到 ClickHouse 中进行查询和分析。
- 它允许 ClickHouse 与 MySQL 进行集成,能够方便地将 MySQL 中的数据作为 ClickHouse 的数据源进行操作。例如,可以在 ClickHouse 中对 MySQL 中的数据进行复杂的聚合分析,而无需将数据完全迁移到 ClickHouse 中,提高了数据的利用效率和灵活性。
- 特点:
- Hive:
-
- 特点:
- 类似 MySQL 引擎对于 MySQL 的作用,Hive 引擎允许 ClickHouse 与 Hive 进行交互。
- 可以从 Hive 数据仓库中读取数据,利用 ClickHouse 强大的分析能力对 Hive 中的数据进行处理。对于已经有 Hive 数据存储体系但又需要更高效分析能力的场景非常有用。
- 特点:
- ODBC:
-
- 特点:
- 通过 ODBC(Open Database Connectivity)协议连接到各种支持 ODBC 的数据源。
- 这使得 ClickHouse 能够与多种不同的数据库或数据源进行交互,扩大了数据的来源范围。比如可以连接到一些传统的关系型数据库或其他支持 ODBC 的专有数据源,实现数据的整合和分析。
- 特点:
四、特殊用途引擎
- Distributed:
-
- 特点:
- 分布式引擎,它本身不存储数据,而是用于分布式查询。
- 可以将查询分发到多个服务器上的本地表进行执行,然后汇总结果。例如,在一个分布式 ClickHouse 集群中,当执行一个查询时,Distributed 引擎会将查询发送到各个节点上的相关本地表,每个节点处理一部分数据,最后将结果汇总返回给客户端。这使得可以在整个集群范围内进行高效的查询操作,充分利用集群的计算和存储资源。
- 特点:
- Dictionary:
-
- 特点:
- 字典引擎用于存储字典数据,通常是一些键值对形式的数据。
- 它可以快速地进行键值查找,适用于需要频繁查找某些固定值或代码映射等场景。比如存储产品代码和产品名称的映射关系,在查询产品代码对应的产品名称时可以快速获取结果。
- 特点:
- File:
-
- 特点:
- 可以直接从文件中读取数据。
- 支持多种文件格式,如 CSV、TSV 等。适用于将外部文件中的数据导入到 ClickHouse 中进行分析的场景,例如从一些定期生成的日志文件或数据文件中读取数据进行处理。
- 特点: