当前位置:首页>科技>数据库管理页面设置列式数据库管理系统
发布时间:2026-06-22阅读(1)
ClickHouse是一个用于联机分析(OLAP)的列式数据库管理系统(DBMS)。ClickHouse不单单是一个数据库, 它是一个数据库管理系统。
官方文档:https://clickhouse.com/docs/zhGitHub地址:https://github.com/ClickHouse/ClickHouse
1)ClickHouse主要功能2)ClickHouse的特性
- DDL ( 数据定义语言 ):可以动态地创建、修改或删除数据库、表和视图,而无须重启服务;
- DML ( 数据操作语言 ):可以动态查询、插入、修改或删除数据;
- 权限控制:可以按照用户粒度设置数据库或者表的操作权限,保障数据的安全性;
- 数据备份与恢复:提供了数据备份导出与导入恢复机制,满足生产环境的要求;
- 分布式管理:提供集群模式,能够自动管理多个数据库节点。
3)稠密索引和稀疏索引
- 列式数据库管理系统:在一个真正的列式数据库管理系统中,除了数据本身外不应该存在其他额外的数据。这意味着为了避免在值旁边存储它们的长度«number»,你必须支持固定长度数值类型。
- 数据压缩:除了在磁盘空间和CPU消耗之间进行不同权衡的高效通用压缩编解码器之外,ClickHouse还提供针对特定类型数据的专用编解码器,这使得ClickHouse能够与更小的数据库(如时间序列数据库)竞争并超越它们。
- 数据的磁盘存储:许多的列式数据库(如 SAP HANA, Google PowerDrill)只能在内存中工作,这种方式会造成比实际更多的设备预算。ClickHouse被设计用于工作在传统磁盘上的系统,它提供每GB更低的存储成本,但如果可以使用SSD和内存,它也会合理的利用这些资源。
- 多核心并行处理:ClickHouse会使用服务器上一切可用的资源,从而以最自然的方式并行处理大型查询。
- 多主架构:hdfs、Spark、HBase和Elasticsearch这类分布式系统,都采用了Master-Slave主从架构,由一个管控节点作为Leader统筹全局。而ClickHouse则由于它的集群架构和其他数据库不同,这种架构使得它是一个多主架构。
- 多服务器分布式处理:在ClickHouse中,数据可以保存在不同的shard上,每一个shard都由一组用于容错的replica组成,查询可以并行地在所有shard上进行处理。
- 支持SQL:ClickHouse支持一种基于SQL的声明式查询语言,它在许多情况下与ANSI SQL标准相同。支持的查询GROUP BY, ORDER BY, FROM, JOIN, IN以及非相关子查询。相关(依赖性)子查询和窗口函数暂不受支持,但将来会被实现。
- 多样化的表引擎:ClickHouse和mysql一样,也将存储部分进行了抽象,把存储引擎作为一层独立的接口。所以说Clickhouse实现了很多种表引擎,比如mergetree,log,Memory等类型的引擎,每一种表引擎都有着各自的特点,用户可以根据实际业务场景的要求,选择合适的表引擎使用。
- 向量引擎:为了高效的使用CPU,数据不仅仅按列存储,同时还按向量(列的一部分)进行处理,这样可以更加高效地使用CPU。
- 实时的数据更新:ClickHouse支持在表中定义主键。为了使查询能够快速在主键中进行范围查找,数据总是以增量的方式有序的存储在MergeTree中。因此,数据可以持续不断地高效的写入到表中,并且写入的过程中不会存在任何加锁的行为。
- 在线查询:按照主键对数据进行排序,这将帮助ClickHouse在几十毫秒以内完成对数据特定值或范围的查找。
- 支持数据复制和数据完整性:ClickHouse使用异步的多主复制技术。当数据被写入任何一个可用副本后,系统会在后台将数据分发给其他副本,以保证系统在不同副本上保持相同的数据。
- 角色的访问控制:ClickHouse使用SQL查询实现用户帐户管理,并允许角色的访问控制,类似于ANSI SQL标准和流行的关系数据库管理系统。
- 限制没有完整的事务支持。缺少高频率,低延迟的修改或删除已存在数据的能力。仅能用于批量删除或修改数据,但这符合 GDPR(General Data Protection Regulation:通用数据保护条例)。稀疏索引使得ClickHouse不适合通过其键检索单行的点查询。
- 稠密索引:即每一条记录,对应一个索引字段。稠密索引,访问速度非常块,但是维护成本大。根据索引字段不一样,有候选键索引和非候选键索引之分。
- 稀疏索引:相对稠密索引,稀疏索引并没有每条记录,建立了索引字段,而是把记录分为若干个块,为每个块建立一条索引字段。稀疏索引字段,要求索引字段是按顺序排序的,否则无法有效索引。稀疏索引,数据查询速度较慢,但是存储空间小,维护成本低。
二、ClickHouse库表引擎1)数据库引擎
默认情况下,ClickHouse使用Atomic数据库引擎。它提供了可配置的table engines和SQL dialect。目前支持的数据库引擎有以下几种:
- Atomic
- MySQL
- SQLite
- PostgreSQL
- MaterializeMySQL
- Lazy
- MaterializedPostgreSQL
- Replicated
关于更多,请查看官方文档:https://clickhouse.com/docs/zh/engines/database-engines/
2)表引擎表引擎(即表的类型)决定了:
- 数据的存储方式和位置,写到哪里以及从哪里读取数据
- 支持哪些查询以及如何支持。
- 并发数据访问。
- 索引的使用(如果存在)。
- 是否可以执行多线程请求。
- 数据复制参数。
表引擎类型
1、MergeTree类型引擎适用于高负载任务的最通用和功能最强大的表引擎。这些引擎的共同特点是可以快速插入数据并进行后续的后台数据处理。 MergeTree系列引擎支持数据复制(使用Replicated* 的引擎版本),分区和一些其他引擎不支持的其他功能。该类型的引擎:MergeTree、ReplacingMergeTree、SummingMergeTree、AggregatingMergeTree、CollapsingMergeTree、VersionedCollapsingMergeTree、GraphiteMergeTree
2、log类型引擎这些引擎是为了需要写入许多小数据量(少于一百万行)的表的场景而开发的。具有最小功能的轻量级引擎。当您需要快速写入许多小表(最多约100万行)并在以后整体读取它们时,该类型的引擎是最有效的。该类型的引擎:TinyLog、StripeLog、Log
3、集成类型引擎ClickHouse 提供了多种方式来与外部系统集成,包括表引擎。像所有其他的表引擎一样,使用CREATE TABLE或ALTER TABLE查询语句来完成配置。 支持的集成引擎:Kafka、MySQL、ODBC、JDBC、HDFS等。
4、用于其他特定功能的引擎特定功能的引擎有如下几种:Distributed、MaterializedView、Dictionary、Merge、File、Null、Set、Join、URL、View、Memory、Buffer
三、ClickHouse架构Clickhouse的集群架构是和其他的数据集群有一定的区别,他的集群能力是表级别的,而我们熟知的大数据体系,比如hadoop系列的集群都是服务级别的。例如,一个hdfs集群,所有文件都会切片、备份;而Clickhouse集群中,建表时也可以自己决定用不用,也就是说其实Clickhouse单节点就能存活。
- Parser与Interpreter
Parser和Interpreter是非常重要的两组接口:Parser分析器是将sql语句已递归的方式形成AST语法树的形式,并且不同类型的sql都会调用不同的parse实现类。而Interpreter解释器则负责解释AST,并进一步创建查询的执行管道。Interpreter解释器的作用就像Service服务层一样,起到串联整个查询过程的作用,它会根据解释器的类型,聚合它所需要的资源。首先它会解析AST对象;然后执行"业务逻辑" ( 例如分支判断、设置参数、调用接口等 );最终返回IBlock对象,以线程的形式建立起一个查询执行管道。
- 表引擎
表引擎是ClickHouse的一个显著特性,clickhouse有很多种表引擎。不同的表引擎由不同的子类实现。表引擎是使用IStorage接口的,该接口定义了DDL ( 如ALTER、RENAME、OPTIMIZE和DROP等 ) 、read和write方法,它们分别负责数据的定义、查询与写入。
- DataType
数据的序列化和反序列化工作由DataType负责。根据不同的数据类型,IDataType接口会有不同的实现类。DataType虽然会对数据进行正反序列化,但是它不会直接和内存或者磁盘做交互,而是转交给Column和Filed处理。
- Column与Field
Column和Field是ClickHouse数据最基础的映射单元。作为一款百分之百的列式存储数据库,ClickHouse按列存储数据,内存中的一列数据由一个Column对象表示。Column对象分为接口和实现两个部分,在IColumn接口对象中,定义了对数据进行各种关系运算的方法,例如插入数据的insertRangeFrom和insertFrom方法、用于分页的cut,以及用于过滤的filter方法等。而这些方法的具体实现对象则根据数据类型的不同,由相应的对象实现,例如ColumnString、ColumnArray和ColumnTuple等。在大多数场合,ClickHouse都会以整列的方式操作数据,但凡事也有例外。如果需要操作单个具体的数值 ( 也就是单列中的一行数据 ),则需要使用Field对象,Field对象代表一个单值。与Column对象的泛化设计思路不同,Field对象使用了聚合的设计模式。在Field对象内部聚合了Null、UInt64、String和Array等13种数据类型及相应的处理逻辑。
- Block
ClickHouse内部的数据操作是面向Block对象进行的,并且采用了流的形式。虽然Column和Filed组成了数据的基本映射单元,但对应到实际操作,它们还缺少了一些必要的信息,比如数据的类型及列的名称。于是ClickHouse设计了Block对象,Block对象可以看作数据表的子集。Block对象的本质是由数据对象、数据类型和列名称组成的三元组,即Column、DataType及列名称字符串。Column提供了数据的读取能力,而DataType知道如何正反序列化,所以Block在这些对象的基础之上实现了进一步的抽象和封装,从而简化了整个使用的过程,仅通过Block对象就能完成一系列的数据操作。在具体的实现过程中,Block并没有直接聚合Column和DataType对象,而是通过ColumnWith TypeAndName对象进行间接引用。
四、ClickHouse环境部署1)环境准备
Copyright © 2024 有趣生活 All Rights Reserve吉ICP备19000289号-5 TXT地图HTML地图XML地图