详解clickhouse分区目录的合并过程
数据存储底层分布
目录名 | 类型 | 说明 |
202103_1_10_2 | 目录 | 分区目录一个或多个,由于分区+LSM生成的 |
detached | 目录 | 通过DETACH语句卸载后的表分区存放位置 |
format_version.txt | 文本文件 | 纯文本,记录存储的格式 |
columns.txt:该文件是一个文本文件,存储了表结构信息,可以用文本编辑打开。
count.txt:该文件也是一个文本文件,存储了该分区下的行数。可以用文本文件打开。在用户执行select count(*) from xxx时本质上就是直接返回了该文件的内容,而不需要遍历数据。因此clickhouse的count(*)的速度非常快。
[column].bin:真正存储数据的数据文件。每一列都会生成一个单独的bin文件。
skp_idx_[column].idx:跳数索引,在使用了二级索引时会生成,否则这不生成。
数据分区目录命名规则
比如20221115_2_2_0,其中 20221115是分区ID ,2_2对应的是最小的数据块编号和最大的数据块编号,最后的 _0 表示目前分区合并的层级。这么命名是为了数据目录合并算法。
分区ID:该值由 insert 数据时分区键的值来决定。分区键支持使用任何一个或者多个字段组合表达式,针对取值数据类型的不同,分区ID的生成逻辑目前有四种规则:
- 不指定分区键:如果建表时未指定分区键,则分区ID默认使用all,所有数据都被写入all分区中。
- 整型字段:如果分区键取值是整型字段,并且无法转换为YYYYMMDD的格式,则会按照该整型字段的字符形式输出,作为分区ID取值。
- 日期类型:如果分区键属于日期格式,或可以转换为YYYYMMDD格式的整型,则按照YYYYMMDD格式化后的字符形式输出,作为分区ID取值。
- 其他类型:如果使用其他类似Float、String等类型作为分区键,会通过对其插入数据的128位Hash值作为分区ID的取值。
MinBlockNum 和 MaxBlockNum: BlockNum 是一个整型的自增长型编号,该编号在单张MergeTree表中从1开始全局累加,当有新的分区目录创建后,该值就加1,对新的分区目录来讲,MinBlockNum 和 MaxBlockNum 取值相同。
Level: 表示合并的层级。相当于某个分区被合并的次数,它不是以表全局累加,而是以分区为单位,初始创建的分区,初始值为0,相同分区ID发生合并动作时,在相应分区内累计加1。
分区目录的合并过程
MergeTree的分区目录和传统意义上其他数据库有所不同。MergeTree的分区目录并不是在数据表被创建之后就存在的,而是在数据写入过程中被创建的。也就是说如果一张数据表没有任何数据,那么也不会有任何分区目录存在。MergeTree的分区目录伴随着每一批数据的写入(一次INSERT语句),MergeTree都会生成一批新的分区目录。即便不同批次写入的数据属于相同分区,也会生成不同的分区目录。也就是说,对于同一个分区而言,也会存在多个分区目录的情况。在之后的某个时刻(写入后的10~15分钟,也可以手动执行optimize查询语句),ClickHouse会通过后台任务再将属于相同分区的多个目录合并成一个新的目录。已经存在的旧分区目录并不会立即被删除,而是在之后的某个时刻通过后台任务被删除(默认8分钟)。
但是有些特殊场景下,用户希望立刻删除老的数据目录,这种需求可以在创建MergeTree表的时候通过Settings属性来设置。如下所示
CREATE TABLE partition_directory_merge
(partition_key Int32,orderBy_key String,data String
)
ENGINE = MergeTree()
PARTITION BY partition_key
ORDER BY orderBy_key
SETTINGS old_parts_lifetime = 1
- old_parts_lifetime 这个属性的含义是多久删除老的分区数据目录。单位是秒
详解clickhouse分区目录的合并过程相关推荐
- 07_clickhouse、自定义分区及底层存储合并机制、自定义分区键、分区目录的命名规则、分区目录的合并过程、分区目录的合并过程、分区表达式指定、分区案例
4.自定义分区及底层存储合并机制 4.1.自定义分区键 4.2.分区目录的命名规则 4.3.分区目录的合并过程 4.4.分区目录的合并过程 4.5.分区表达式指定 4.6.分区案例 4.自定义分区及底 ...
- java源码系列:HashMap底层存储原理详解——4、技术本质-原理过程-算法-取模具体解决什么问题
目录 简介 取模具体解决什么问题? 通过数组特性,推导ascii码计算出来的下标值,创建数组非常占用空间 取模,可保证下标,在HashMap默认创建下标之内 简介 上一篇文章,我们讲到 哈希算法.哈希 ...
- 计算机的分区原理,详解磁盘分区的基本原理
今天来聊聊一篇关于详解磁盘分区的基本原理的文章,现在就为大家来简单介绍下详解磁盘分区的基本原理,希望对各位小伙伴们有所帮助. 我们所使用的电脑中的磁盘一般都分好的,或者有时候重装系统时技术人员给分好的 ...
- Spotify敏捷模式详解三部曲第二篇:研发过程
本文转自:Scrum 中文网 引言 在本系列文章的第一篇,我们介绍了Spotify的敏捷研发团队,以及它独特的组织架构.Spotify的研发团队采用的是一种非常独特的组织架构,如下图所示: 整个研发组 ...
- MTK6573智能机平台系统文件夹文件详解3 - App目录
MTK6573智能机平台系统文件夹文件详解3 - App目录 欢迎转载收藏,转载请保留如下信息: Mr.ROM出品 Email:iammrrom@gmail.com Blog:http://blog. ...
- JavaCV开发详解专栏文章目录(JavaCV速查手册)
本章作为**JavaCV开发详解**专栏的目录. 为了方便大家分类查找,我们把分为两个目录: 第一个分类目录,根据文章技术类型进行分类. 第二个目录,按照博主更新顺序排列. 有些文章既是设备采集又实现 ...
- 详解 Linux操作系统的目录结构
详解 Linux操作系统的目录结构 1 基本介绍 2 目录结构的具体介绍 3 Linux 目录总结 1 基本介绍 linux 的文件系统是采用级层式的树状目录结构,在此结构中的最上层是根目录" ...
- SOME/IP协议详解「总目录」
SOME/IP协议详解「总目录」 欢迎大家来到雪云飞星的<SOME/IP协议详解>,开始前博主先列出本专栏学习的大纲,同时这也可以作为大家学习SOME/IP协议知识点的参考.下面蓝字都是传 ...
- DDR3内存详解,存储器结构+时序+初始化过程
转载 DDR3内存详解,存储器结构+时序+初始化过程 2017-06-17 16:10:33 a_chinese_man 阅读数 23423更多 分类专栏: 硬件开发基础 转自:http://www. ...
最新文章
- redux源码分析之一:createStore.js
- Leetcode刷题指南和top100题目
- 我必须得告诉大家的 MySQL 优化原理
- 【算法笔记】图文结合彻底搞懂后缀数组
- 虚拟机架设服务器u盘不显示盘符,【图文详解】怎么解决win7虚拟机无法识别U盘问题...
- 途胜怎样与android手机互联,现代途胜车载蓝牙怎么连接,途胜手机互联映射教程...
- 为什么计算机能读懂 1 和 0 ?
- seajs学习(1)----什么是系统
- 关于字符串中length与length()的区别
- 游戏引擎——cocos2d-x
- 重磅!L4级自动驾驶硬件方案来啦!
- 电脑USB接口实现鼠标和键盘功能
- matlab制作莫尔条纹,光栅莫尔条纹 matlab程序
- 金立E6刷MIUI V5教程
- 计算机必学知识,基础电脑知识:计算机操作常识入门必学
- Android应用分身检测
- ST-GCN demo运行记录
- linux挂接移动硬盘,LINUX挂接移动硬盘
- [paper]Feature Squeezing: Detecting Adversarial Examples in Deep Neural Networks
- MySQL安装与配置my.ini
热门文章
- 宽带拨号上网显示服务器失效,拨号上网失败 宽带连接错误651怎么办
- IDEA SpringBoot 自定义Banner
- PKUSC2018游记
- MacM1安装Pajek软件的方法(with brew,wine)
- 好家伙,公司服务器直接热崩掉了!
- RTI1.3时间管理支持的两种模式
- @Resource()注解报红
- python arduino i2c1602_Arduino 将1602液晶显示屏改造为IIC接口
- java实验报告6:异常处理程序设计
- 在飞腾平台安装MySQL数据库_银河麒麟4.0.2(飞腾平台) 安装MySQL数据库