ClickHouse设计原理简介(中)

简介: ClickHouse设计原理简介(中)

ClickHouse核心模块--Column&Field


  • • Column与Field是ClickHouse数据最基础的映射单元
  • • 内存中的每一列数据由一个Column对象表示。Column对象分为接口和实现两部分,在IColunn接口对象中,定义了对数据进行各种关系运算的方法
  • • 在大多数场合,ClickHouse都会以整列的方式操作数据。如果需要操作单个具体的数值,则需要使用Field对象,Field对象代表一个单值。与Column对象的泛化设计思路不同,Field对象使用了聚合的设计模式。
  • • 在Field对象内部聚合了Null、UInt64、String和Array等13种数据类型及相应的处理逻辑。


ClickHouse核心模块--DataType&Block


  • • 数据的序列化核反序列化工作由DataType负责。IDataType接口定义了许多正反序列化的方式,它们成对出现
  • • ClickHouse内部的数据操作是面向Block对象进行的,并且采用流的形式
  • • Block对象可以看作数据表的子集。Block对象是由Column、DataType及列名称组成的三元组,仅通过Block对象能完成一系列的数据操作
  • • Block流操作有两组顶层接口,IBlockInputStream负责数据的读取和关系运算;IBlockOutputStream负责将数据输出到下一环节。IBlockInputStream接口有众多实现类,这些实现类大致可以分为三类,第一类用于处理数据定义的DDL操作;第二类用于处理关系运算的各种操作;第三类是与表引擎呼应,每一种表引擎都拥有与之对应的。


ClickHouse核心模块--Parser&Interpreter


  • • Parser分析器可以将一条SQL语句以递归下降的方式解析成AST语法树的形式。不同的SQL语句,会经由不同的Parser实现类解析
  • • Interpreter解释器负责解释AST,并进一步创建查询的执行Processor,起到串联整个查询过程的作用,它会根据解释器的类型,聚合它所需要的资源


ClickHouse核心模块--Functions&Aggregate Functions


  • • ClickHouse主要提供两类函数,普通函数核聚合函数
  • • 普通函数由IFunction接口定义,拥有数十钟函数实现,普通函数是没有状态的,而是采用向量化的方式直接作用于一整列数据
  • • 聚合函数由AggregateFunction接口定义,聚合函数是有状态的,以COUNT聚合函数为例,其AggregateFunctionCount的状态使用整型Unit64记录,聚合函数的状态支持序列化核反序列化。所以能够在分布式节点之间进行传输,以实现增量计算。


MergeTree表引擎家族


image.png

  • • PARTITION BY 选填,分区键
  • • ORDER BY 必填,排序键
  • • PRIMARY KEY 选填,表示主键,声明之后会依次按照主键字段生成一级索引,用于加速表查询。如果不指定,那么主键默认和排序键相同。MergeTree允许主键有重复数据
  • • SAMPLE KEY 选填,抽样表达式。用于声明数据以何种标准进行采样,其用于配合SAMPLE子查询使用
  • • INDEX 选填,二级索引,也叫做跳数索引
  • • SETTINGS 选填,用于指定一些额外的参数,例index_granularity(索引粒度),min_compress_block_size(最小的压缩数据块大小)

MergeTree存储结构

image.png

  • • columns.txt

列信息文件,使用文本文件存储,用于保存分区下的列字段信息

  • • primay.idx

索引文件,用于存储稀疏索引

  • • [column].bin

数据文件,使用压缩格式存储,默认使用LZ4压缩格式,用于存储某一列数据

  • • [column].mrk

列字段标记,保存了bin文件中的数据偏移量信息,MergeTree通过标记文件建立了primay.idx稀疏索引与bin数据文件的映射关系

  • • [column].mrk2

如果用了自适应大小的索引间隔,则标记文件会以.mrk2命名

  • • partition.dat

用于保存当前分区表达式最终生成值

  • • minmax_[column].idx

用于记录当前分区字段对应原始数据的最小值和最大值

  • • skip_idx_[column]


相关文章
|
存储 SQL 运维
涨姿势 | 一文读懂备受大厂青睐的ClickHouse高性能列存核心原理
本文尝试解读ClickHouse存储层的设计与实现,剖析它的性能奥妙
4244 0
涨姿势 | 一文读懂备受大厂青睐的ClickHouse高性能列存核心原理
|
11月前
|
存储 分布式计算 监控
ClickHouse简介
ClickHouse是一款专注于OLAP(联机分析处理)的列式存储数据库,以其极致的查询性能、高压缩率和实时分析能力著称。它通过列式存储、向量化查询引擎及分布式架构,满足大规模数据复杂聚合需求,适用于实时日志分析、用户行为分析等场景。然而,ClickHouse不支持事务(ACID),JOIN性能较弱,且对单行更新/删除效率低,不适合OLTP场景。其丰富的表引擎(如MergeTree系列)和数据类型(如LowCardinality优化类型)为不同业务需求提供了灵活支持。
1709 3
|
存储 缓存 监控
ClickHouse 架构原理及核心特性详解
ClickHouse 是由 Yandex 开发的开源列式数据库,专为 OLAP 场景设计,支持高效的大数据分析。其核心特性包括列式存储、字段压缩、丰富的数据类型、向量化执行和分布式查询。ClickHouse 通过多种表引擎(如 MergeTree、ReplacingMergeTree、SummingMergeTree)优化了数据写入和查询性能,适用于电商数据分析、日志分析等场景。然而,它在事务处理、单条数据更新删除及内存占用方面存在不足。
4200 21
|
SQL 消息中间件 分布式计算
大数据-141 - ClickHouse 集群 副本和分片 Zk 的配置 Replicated MergeTree原理详解(一)
大数据-141 - ClickHouse 集群 副本和分片 Zk 的配置 Replicated MergeTree原理详解(一)
491 0
|
SQL 大数据
大数据-141 - ClickHouse 集群 副本和分片 Zk 的配置 Replicated MergeTree原理详解(二)
大数据-141 - ClickHouse 集群 副本和分片 Zk 的配置 Replicated MergeTree原理详解(二)
489 0
|
存储 自然语言处理 算法
ClickHouse设计原理简介(下)
ClickHouse设计原理简介(下)
575 0
ClickHouse设计原理简介(下)
|
存储 消息中间件 SQL
Sentry 监控 - Snuba 数据中台架构简介(Kafka+Clickhouse)
Sentry 监控 - Snuba 数据中台架构简介(Kafka+Clickhouse)
1165 0
Sentry 监控 - Snuba 数据中台架构简介(Kafka+Clickhouse)
|
存储 SQL 算法
ClickHouse设计原理简介(上)
ClickHouse设计原理简介(上)
809 0
ClickHouse设计原理简介(上)
|
存储 SQL 分布式计算
clickhouse简介
clickhouse简介
764 0
|
5月前
|
存储 监控 大数据
探究ClickHouse数据库的Mutation机制
ClickHouse的Mutation机制提供了一种高效的方式来处理大数据集上的修改操作。然而,需要注意的是,由于其异步和资源密集的特性,应当谨慎地进行规划和优化,以确保系统的整体性能。通过合理地使用Mutation操作,可以在保证数据一致性的同时,有效地管理和分析大规模数据集。
300 18

推荐镜像

更多