栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 前沿技术 > 大数据 > 大数据系统

大数据之-clickhouse

大数据之-clickhouse

Clickhouse原理解析

OLAP常见架构

OLAP名为联机分析(豆腐分析)

下钻(豆腐下钻)

从“省”下钻到“市”上卷(豆腐上卷)

从“市”汇聚成“省”切片(豆腐切片)

将一个或多个维度设为单个固定值,然后观察剩余的维度切块(豆腐切块)

将商品维度固定成“足球”“篮球”和“乒乓球”旋转(豆腐旋转)

旋转立方体的一面,如果要将数据映射到一张二维表,那么就要进行旋转,这就等同于行列置换。ROLAP

直接使用关系模型构建,数据模型常使用星型模型或者雪花模型。MOLAP

使用多维数组的形式保存数据,其核心思想是借助预先聚合结果HOLAP

这种思路可以理解成ROLAP和MOLAP两者的集成LSM

首先,会在内存中构建出一棵小树,构建完毕即算写入成功(这里会通过预写日志的形式,防止因内存故障而导致的数据丢失)(景区多个门口排队,进入景区,每个人都有凭证)其次,小树在构建的过程中会进行排序,这样就保证了数据的有序性(基于个头排序)最后,当内存中小树的数量达到某个阈值时,就会借助后台线程将小树刷入磁盘并生成一个小的数据段。在每个数据段中,数据局部有序(进入游戏项目1继续按个头排队)ClickHouse不适用的场景

不支持事务不擅长根据主键按行粒度进行查询不擅长按行删除数据并发不高大表join核心特性

在线查询完备的DBMS功能

DDL(数据定义语言)DML(数据操作语言)权限控制数据备份与恢复分布式管理列式存储与数据压缩

网络带宽|/磁盘IO|/向量化执行引擎

向量化执行,需要利用CPU的SIMD指令ClickHouse目前利用SSE4.2指令集实现向量化执行多样化的表引擎多线程与分布式

支持分区(纵向扩展,利用多线程原理)支持分片(横向扩展,利用分布式原理)多主架构数据分片与分布式查询clickhouse的架构设计

Column与Field(字段和单值)DataType(数据类型)

序列化反序列化Block与Block流(数据块)

数据对象

Column数据类型

DataType列名称Table(表)IStorage接口(表引擎)

IStorageSystemOneBlock(系统表)StorageMergeTree(合并树表引擎)StorageTinyLog(日志表引擎)Parser与Interpreter(解析)

Parser分析器负责创建AST对象Interpreter解释器则负责解释AST,并进一步创建查询的执行管道Functions与Aggregate Functions(函数)

普通函数和聚合函数Cluster与Replication(集群和副本)

ClickHouse的1个节点只能拥有1个分片分片只是一个逻辑概念,其物理承载还是由副本承担的客户端访问接口ClickHouse

CLI(Command Line Interface)即命令行接口

TCP传输层JDBC

HTTP应用层 ClickHouse的数据类型

基础类型

数值类型

IntFloatDecima字符串类型

StringFixedString

空字符填充UUID

格式为8-4-4-4-12时间类型

DateTimeDateTime64Date复合类型

数组元组枚举嵌套特殊类型

Nullable

基础数据类型可以是Null值Domain

IPv4IPv6数据字典

内置字典外部扩展字典MergeTree原理(找书模型)

MergeTree的存储结构

checksums.txt:校验文件,使用二进制格式存储

完整性正确性columns.txt:列信息文件,使用明文格式存储count.txt:计数文件,使用明文格式存储primary.idx:一级索引文件,使用二进制格式存储[Column].bin:数据文件

LZ4压缩格式[Column].mrk:列字段标记文件,使用二进制格式存储

标记文件与稀疏索引对齐,又与.bin文件一一对应partition.dat与minmax_[Column].idx一级索引(按书名字母排序引导牌)

稀疏索引

在稠密索引中每一行索引标记都会对应到一行具体的数据记录。而在稀疏索引中,每一行索引标记对应的是一段数据,而不是一行primary.idx内的索引数据常驻内存索引粒度

一级索引和数据标记的间隔粒度相同(同为index_granularity行)数据文件也会依照index_granularity的间隔粒度生成压缩数据块索引数据的生成规则

1   819257  80  =>>>5780索引的查询过程

MarkRange(数据治理开头是sjzl)

mark =  0  1  2row   =  1  2  3==>markrange [0,1]:[1,2]生成查询条件区间(比如找数据治理书)

id=2   ===> [2,2]递归交集判断

除8合并MarkRange区间数据标记  (对齐排序,引导牌 、记录书柜号和几排几行)

数据标记的生成规则

mark压缩块偏移量解压后偏移量数据标记的工作方式

读取压缩数据块读取数据数据存储(书柜)

压缩数据块

头信息

压缩算法类型1byte压缩后的数据大小4byte压缩前的数据大小4byte压缩数据

大小范围

按压缩前大小,控制在64KB~1MB压缩数据块最终的大小

单个批次数据size

继续获取下一批数据单个批次数据64KB

直接生成压缩数据块单个批次数据size>1MB

截断数据分区  (图书分类)

数据的分区规则

不指定分区键

all_0_0_0使用整型

1_0_0_0使用日期类型

20100101_0_0_0使用其他类型

hash128_0_0_0分区目录的命名规则

PartitionID_MinBlockNum_MaxBlockNum_LevelMergeTree系列表引擎

MergeTTL和多路径存储

数据TTL

表列多路径存储策略

默认策略

单磁盘JBOD策略

多磁盘轮询策略

HOT/COLD策略ReplacingMergeTree

功能

数据去重特点

orderby去重分区内去重合并生效SummingMergeTree

数据汇总AggregatingMergeTree

数据聚合CollapsingMergeTree

折叠表

以增代删

有序VersionedCollapsingMergeTree

高级折叠表

以增代删

无序副本和分片

副本

功能

数据备份提高负载

分摊查询读写分离特点

依赖zookeeper

INSERTALTER表级别的副本多主架构Block数据块

128*8192原子性

block要么全部成功,要么全部失败唯一性

hash摘要

block内顺序数据行数据大小ZooKeeper内的节点结构

元数据

metadata

主键分区键采样表达式columns

列名称数据类型replicas

副本名称判断标识

leader_election:用于主副本的选举工作

MERGEMUTATION操作

ALTER DELETEALTER UPDATEblocks

Hash信息摘要partition_idblock_numbers

分区顺序=partition顺序

Merge按序quorum

当至少有quorum数量的副本写入成功后,整个写操作才算成功操作日志

log

INSERTMERGEDROP PARTITIONmutations

alert DELETEalert UPDATEreplicas/{replica_name}

queue:任务队列log_pointer

最后一次执行的log日志下标信息mutation_pointer

最后一次执行的log日志下标信息Entry

LogEntry

source replica

指令来源副本block_id

当前分区的BlockIDpartition_name

当前分区目录的名称type

get

下载分区merge

合并drop partition

删除分区MutationEntry

source replica

指令来源副本commands

ALTER DELETEALTER UPDATEmutation_id

MUTATION操作的版本号partition_id

当前分区目录的IDINSERT的核心执行流程

创建副本实例

创建第一个副本实例

初始化所有的ZooKeeper节点,·在/replicas/节点下注册自己的副本启动监听任务,监听/log日志节点参与副本选举,选举出主副本,选举的方式是向/leader_election/插入子节点,第一个插入成功的副本就是主副本创建第二个副本实例

/replicas/节点下注册自己的副本实例启动监听任务,监听/log日志节点参与副本选举,选举出主副本向第一个副本实例写入数据由第一个副本实例推送Log日志

由执行了INSERT的副本向/log节点推送操作日志第二个副本实例拉取Log日志第二个副本实例向其他副本发起下载请求第一个副本实例响应数据下载第二个副本实例下载数据并完成本地写入MERGE的核心执行流程

由主副本来制定

创建远程连接,尝试与主副本通信主副本接收通信由主副本制定MERGE计划并推送Log日志各个副本分别拉取Log日志各个副本分别在本地执行MERGEMUTATION的核心执行流程

推送MUTATION日志所有副本实例各自监听MUTATION日志由主副本实例响应MUTATION日志并推送Log日志各个副本实例分别拉取Log日志各个副本实例分别在本地执行MUTATIONALTER的核心执行流程

修改共享元数据监听共享元数据变更并各自执行本地修改确认所有副本完成修改Distributed表引擎

1)ZooKeeper内的节点结构

clickhouse/task_queue/dd

/query-[seq]/active:临时保存当前集群内状态为active的节点/query-[seq]/finished2)DDLLogEntry日志对象的数据结构

query记录了DDL语句hosts记录了指定集群的hosts主机3)initiator记录初始化host主机的名称,hosts主机列表的取值来自于初始化host节点上的集群外部存储类型

HDFSMySQLJDBCKafkaFile内存类型

Memory表引擎Set

数据不会丢失,当数据表被重新装载时,文件数据会再次被全量加载至内存只能作为IN查询的右侧条件被查询使用JoinBuffer日志类型

TinyLog接口类型

DictionaryDistributedSQL优化规则

1、count优化

count() 和 count(*) 且没有过滤条件,会使用system.tables 的 total_rows2、消除子查询重复字段3、谓词下推:

当 group by 有 having 子句,但是没有 with cube、with rollup 或者 with totals 修饰的时候,having 过滤会下推到 where 提前过滤4、聚合计算外推

select sum(id * 2)   === > select sum(id)*25、删除重复的 group (ordelimit)by key

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/721270.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号