什么是clickhouse
ClickHouse是一个开源的列式数据库管理系统(DBMS),专为实时分析和大规模数据查询而设计。它主要用于处理大量数据的快速查询和分析,特别适合于 OLAP(联机分析处理)工作负载。
ClickHouse 的主要特点包括:
-
列式存储: ClickHouse采用列式存储结构,将同一列的数据存储在一起,这样可以提高数据的压缩率和查询性能。列式存储适用于大规模数据分析,可以高效地进行聚合和过滤操作。
-
高性能查询: ClickHouse的设计目标之一是提供高性能的查询能力,它采用了许多优化技术,如数据压缩、向量化查询、并行执行等,从而能够在秒级甚至毫秒级内返回查询结果。
-
分布式架构: ClickHouse支持分布式部署,可以在多台服务器上构建集群,从而实现横向扩展和负载均衡。这使得它适用于处理大规模数据集。
-
实时数据处理: ClickHouse可以在不停机的情况下进行数据加载,支持实时数据分析和查询,可以与流处理框架集成,实现实时数据分析。
-
复杂查询支持: ClickHouse支持复杂的多维查询、分组、排序和聚合操作,适用于数据仓库和分析型应用。
-
高可用性: ClickHouse支持数据复制和分布式部署,可以提供高可用性和故障恢复机制。
-
开源: ClickHouse是一个开源项目,可以免费使用和定制,社区活跃,有大量的用户和开发者参与。
ClickHouse主要用于处理数据分析、报表生成、数据仓库和实时大数据分析等场景,特别是在需要高性能查询大规模数据集的情况下,ClickHouse是一个强大的选择。
列式数据库
在传统的行式数据库中,数据在数据库中都会按行存储,常见的MySQL、Oracle、SQL Server等数据库都是行式数据库。
在列式数据库中,数据是以列进行存储的,列式数据库更适合于OLAP场景,常见的列式数据库有hbase、clickhouse、Vertica等。
不同的存储结构适用于不同的业务场景,列式数据库适合数据分析类型的场景,比如要统计成绩的中位数,在行数据库中,需要将四行数据都遍历出来,取出成绩;而在列式数据库中,只需要将成绩这一列的数据取出来就可以进行分析计算。
列式数据库的优势如下;
-
查询性能: 列式数据库在聚合和分析查询方面表现出色,因为它只需要读取所需列的数据,减少了不必要的IO操作,提高了查询速度。针对分析类查询,通常只需要读取表的一小部分列。在列式数据库中你可以只读取你需要的数据。例如,如果只需要读取100列中的5列,这将帮助你最少减少20倍的I/O消耗。
-
压缩率: 列式数据库由于相似的数据类型存储在一起,可以更有效地进行数据压缩,从而节省存储空间。这进一步降低了I/O的体积。由于I/O的降低,这将帮助更多的数据被系统缓存。
-
数据聚合: 列式数据库适合进行大规模数据的聚合和汇总操作,例如SUM、COUNT、AVG等。
行式数据库的优势:
-
插入性能: 行式数据库在插入操作上表现较好,因为数据按行存储,插入新数据时只需写入相应行,减少了数据碎片。
-
事务处理: 行式数据库通常较适合处理事务性操作,因为行数据的原子性维护可以更容易地实现事务控制。
-
复杂查询: 行式数据库在执行复杂的连接操作时,可能比列式数据库效率更高,因为它们存储相关数据在同一行中。
表结构的例子:
考虑一个简单的表结构,表示用户购买历史记录:
行式数据库表结构示例:
UserID | Date | Product |
---|---|---|
1 | 2023-01-01 | Item A |
1 | 2023-01-03 | Item B |
2 | 2023-01-02 | Item C |
3 | 2023-01-04 | Item A |
列式数据库表结构示例:
UserID | Date | Product1 | Product2 |
---|---|---|---|
1 | 2023-01-01 | Item A | NULL |
1 | 2023-01-03 | Item B | NULL |
2 | 2023-01-02 | Item C | NULL |
3 | 2023-01-04 | Item A | NULL |
在这个例子中,行式数据库适合以用户为单位查询其购买历史记录,而列式数据库适合对购买记录进行聚合和分析,比如统计每个产品的销售数量。
总之,列式数据库和行式数据库在不同的查询和分析场景中各有优势,具体选择取决于应用的需求和数据处理方式。
OLAP和OATP
OLAP和OLTP是针对不同场景的两种数据库实现。
OLTP(联机事务型数据库)
简单来讲: OLTP全称是On-line Transaction Processing,是一种联机事务型数据库,典型的数据库就是关系型数据库,OLTP关注的是对业务数据的增删改查,面向用户的事务操作,追求效率的最优解。但是遇到需要对数据进行分析的场景,OLTP类型的数据库就不占优势了。
OLAP(联机分析处理数据库)
OLAP全称是On-Line Analytical Processing,是一种联机分析处理数据库,一般用于数据仓库或者大数据分析处理,这种类型的数据库在事务能力上很弱,但是在分析的场景下很强大。
OLAP型数据库一些关键性的场景
OLAP数据库主要用于分析和查询大规模数据集,以下是OLAP型数据库一些关键性的场景:
-
绝大多数是读请求: OLAP数据库主要用于支持读取操作,特别是复杂的多维度查询和聚合分析。
-
大批次数据更新: OLAP数据库适用于以大批次(> 1000行)方式更新数据,而不是频繁的单行更新,这有助于保持高性能的查询。
-
已添加数据不修改: OLAP数据库中的数据通常是只读的,不进行频繁的修改操作,适用于分析和报告。
-
大量行中提取少量列: OLAP数据库通常从大量的数据行中提取少量所需的列,以满足多维度分析的需求。
-
宽表: OLAP数据库通常用于存储宽表,即每个表包含着大量的列,用于支持复杂的分析查询。
-
相对较少的查询量: OLAP数据库适用于查询不频繁的情况(通常每台服务器每秒查询数百次或更少),但对于每个查询需要高吞吐量。
-
允许一定延迟: 对于简单查询,一定的查询延迟可以被接受(允许延迟大约50毫秒),不需要实时响应。
-
小数据量: OLAP数据库中存储的数据通常是数字和短字符串(例如,每个URL 60个字节),适合进行大规模聚合分析。
-
高吞吐量: OLAP数据库需要支持高吞吐量(每台服务器每秒可达数十亿行),特别是在处理单个查询时。
-
事务非必需: OLAP数据库通常不需要强制的事务支持,因为数据一致性要求较低。
-
低数据一致性要求: OLAP数据库适用于对数据一致性要求不高的场景,因为主要用于分析。
-
单个查询的大表: OLAP数据库适用于存在少量大表,其中一个查询可能涉及到其中的一个大表。
-
聚合结果: OLAP数据库适用于对数据进行过滤、聚合后的查询,而不是直接查询源数据。查询结果明显小于源数据。换句话说,数据经过过滤或聚合,因此结果适合于单个服务器的RAM中。
综合这些特点,OLAP型数据库在大规模数据分析、多维度查询和复杂聚合等场景下具有显著的优势,可以支持高性能的数据分析和洞察。
ClickHouse 的优点
ClickHouse 是一个高性能的列式数据库管理系统,主要用于处理大规模数据分析和查询。它在许多方面具有优点,使其在大数据分析领域广受欢迎。以下是一些 ClickHouse 的优点:
-
卓越的性能: ClickHouse 的列式存储结构和高度优化的查询引擎使其在大规模数据分析和聚合查询方面表现出色。它能够在秒级别甚至毫秒级别内完成复杂的分析查询操作。
-
高并发支持: ClickHouse 能够支持大量并发查询,适用于多用户同时访问和查询数据的场景。
-
节省存储空间: 由于采用列式存储结构,ClickHouse 在存储大量数据时可以极大地节省存储空间,特别是在压缩数据方面表现优异。
-
水平扩展能力: ClickHouse 具有良好的水平扩展能力,可以通过增加节点来扩展性能和容量,适用于处理大规模数据集。
-
实时数据更新: 尽管 ClickHouse 主要用于分析查询,但它也支持实时数据的批量更新和插入,使其适用于实时数据仓库和分析应用。
-
灵活的数据模型: ClickHouse 支持灵活的数据模型,可以处理多种数据类型,包括结构化和半结构化数据。
-
优化的数据查询: ClickHouse 针对分析查询进行了优化,支持聚合函数、合并树等操作,使得在数据仓库和大数据分析场景中表现出色。
-
开源和社区支持: ClickHouse 是开源项目,拥有活跃的社区支持,用户可以自由地获取源代码并参与开发和改进。
-
易于集成: ClickHouse 提供了多种数据导入和导出方式,可以轻松与其他工具和系统进行集成,如ETL工具、数据流处理引擎等。
综上所述,ClickHouse 在高性能、高并发、存储效率等方面都具有显著的优点,适用于需要进行大规模数据分析和查询的场景。
clickhouse安装(docker安装)
docker run -dit --name some-clickhouse -e CLICKHOUSE_DB=test1 -e CLICKHOUSE_USER=root -e CLICKHOUSE_DEFAULT_ACCESS_MANAGEMENT=1 -e CLICKHOUSE_PASSWORD=password123 -p 9000:9000 -p 8123:8123 clickhouse/clickhouse-server
用户名root,密码password123,连接端口8123(记得防火墙开放端口)
安装完成后使用dbeaver连接测试.
如果云服务器未安装docker,可以参考下面文章进行配置安装
链接: linux云服务器配置及Docker安装Mysql、Redis