简介
ClickHouse是一个开源列式数据库管理系统(DBMS),用于在线分析处理(OLAP):
简而言之,CK本质上就是DBMS,起源于mysql。重要特点就是:数据按列存储,适合于OLAP在线分析处理,查询列的速度非常之快,节省大量的IO资源。(其实和hudi有点像,hudi就是行写入、列查询)
同一列保存在同一个数据文件当中,便于数据的压缩存储!
本质上,CK的数据类型和C++相似,因为CK就使用C++写的。
ClickHouse 与表函数
表函数 (Table Function)
表函数是一种数据库函数,它返回一个可以像操作常规数据库表那样操作的行集。其主要目的是能够将函数的输出作为一个表来使用。这意味着我们可以使用SQL查询来读取和处理这些函数的输出。
ClickHouse 与表函数
ClickHouse的特点之一是其广泛的表函数支持。这些表函数允许管理员用户从各种数据源(例如文件、URL、外部数据库、大数据框架等)读取数据,并将这些数据作为表来处理。例如,管理员用户可以使用表函数从一个文件或HTTP URL中读取数据,然后直接在ClickHouse中对该数据进行查询,而无需先导入数据。
DBMS 和大数据框架的整合
ClickHouse为了提高灵活性和扩展性,提供了与其他DBMS和大数据框架的整合功能。例如,ClickHouse可以与Kafka、HDFS、MySQL等进行交互。表函数在这方面发挥了关键作用,它们使得从这些系统中读取数据变得异常简单。通过表函数,ClickHouse可以轻松地与其他系统进行交互,从而实现数据的即时查询和分析,而无需事先进行数据迁移或转换。
CK存储引擎及Primary Key
CK使用了一种名为MergeTree
的数据结构和存储引擎:
MergeTree存储引擎
Parts 和 Granules
合并Parts
PRIMARY KEY in ClickHouse
为什么与MySQL中的PRIMARY KEY不同
CK的 PRIMARY KEY 和 稀疏索引
让我们通过CK中的块,进一步了解CK的主键:
块之间的顺序:
块合并:
MySQL的聚集索引与ClickHouse的PRIMARY KEY:
再理解二者PK的区别:
MySQL的PRIMARY KEY
(聚集索引)和ClickHouse的PRIMARY KEY
都能实现数据跳过和减少存储需求的效果,但它们是为了不同的工作负载而优化的。
可以这么理解:MySQL的PRIMARY KEY
是全能型设计,旨在优化随机访问和事务性查询。而ClickHouse的PRIMARY KEY
是专攻型设计,特别优化了大数据分析的工作负载。
ClickHouse中数据写入和存储的过程
总结
ClickHouse是一个高性能的分析数据库,适合实时或近实时的大数据查询。如果我们的目标是进行高速分析和查询,而不仅仅是数据存储和同步,那么使用ClickHouse可能会有帮助。我们可以将数据从数据库同步到ClickHouse,并使用ClickHouse的强大查询能力进行分析。
然而,如果只需要数据存储和简单的查询功能,直接使用Mysql / Hudi可能更加简洁和高效。只有需要高速、复杂的实时查询时,考虑使用ClickHouse。