数据存储底层分布

目录名 类型 说明
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分区目录的合并过程相关推荐

  1. 07_clickhouse、自定义分区及底层存储合并机制、自定义分区键、分区目录的命名规则、分区目录的合并过程、分区目录的合并过程、分区表达式指定、分区案例

    4.自定义分区及底层存储合并机制 4.1.自定义分区键 4.2.分区目录的命名规则 4.3.分区目录的合并过程 4.4.分区目录的合并过程 4.5.分区表达式指定 4.6.分区案例 4.自定义分区及底 ...

  2. java源码系列:HashMap底层存储原理详解——4、技术本质-原理过程-算法-取模具体解决什么问题

    目录 简介 取模具体解决什么问题? 通过数组特性,推导ascii码计算出来的下标值,创建数组非常占用空间 取模,可保证下标,在HashMap默认创建下标之内 简介 上一篇文章,我们讲到 哈希算法.哈希 ...

  3. 计算机的分区原理,详解磁盘分区的基本原理

    今天来聊聊一篇关于详解磁盘分区的基本原理的文章,现在就为大家来简单介绍下详解磁盘分区的基本原理,希望对各位小伙伴们有所帮助. 我们所使用的电脑中的磁盘一般都分好的,或者有时候重装系统时技术人员给分好的 ...

  4. Spotify敏捷模式详解三部曲第二篇:研发过程

    本文转自:Scrum 中文网 引言 在本系列文章的第一篇,我们介绍了Spotify的敏捷研发团队,以及它独特的组织架构.Spotify的研发团队采用的是一种非常独特的组织架构,如下图所示: 整个研发组 ...

  5. MTK6573智能机平台系统文件夹文件详解3 - App目录

    MTK6573智能机平台系统文件夹文件详解3 - App目录 欢迎转载收藏,转载请保留如下信息: Mr.ROM出品 Email:iammrrom@gmail.com Blog:http://blog. ...

  6. JavaCV开发详解专栏文章目录(JavaCV速查手册)

    本章作为**JavaCV开发详解**专栏的目录. 为了方便大家分类查找,我们把分为两个目录: 第一个分类目录,根据文章技术类型进行分类. 第二个目录,按照博主更新顺序排列. 有些文章既是设备采集又实现 ...

  7. 详解 Linux操作系统的目录结构

    详解 Linux操作系统的目录结构 1 基本介绍 2 目录结构的具体介绍 3 Linux 目录总结 1 基本介绍 linux 的文件系统是采用级层式的树状目录结构,在此结构中的最上层是根目录" ...

  8. SOME/IP协议详解「总目录」

    SOME/IP协议详解「总目录」 欢迎大家来到雪云飞星的<SOME/IP协议详解>,开始前博主先列出本专栏学习的大纲,同时这也可以作为大家学习SOME/IP协议知识点的参考.下面蓝字都是传 ...

  9. DDR3内存详解,存储器结构+时序+初始化过程

    转载 DDR3内存详解,存储器结构+时序+初始化过程 2017-06-17 16:10:33 a_chinese_man 阅读数 23423更多 分类专栏: 硬件开发基础 转自:http://www. ...

最新文章

  1. redux源码分析之一:createStore.js
  2. Leetcode刷题指南和top100题目
  3. 我必须得告诉大家的 MySQL 优化原理
  4. 【算法笔记】图文结合彻底搞懂后缀数组
  5. 虚拟机架设服务器u盘不显示盘符,【图文详解】怎么解决win7虚拟机无法识别U盘问题...
  6. 途胜怎样与android手机互联,现代途胜车载蓝牙怎么连接,途胜手机互联映射教程...
  7. 为什么计算机能读懂 1 和 0 ?
  8. seajs学习(1)----什么是系统
  9. 关于字符串中length与length()的区别
  10. 游戏引擎——cocos2d-x
  11. 重磅!L4级自动驾驶硬件方案来啦!
  12. 电脑USB接口实现鼠标和键盘功能
  13. matlab制作莫尔条纹,光栅莫尔条纹 matlab程序
  14. 金立E6刷MIUI V5教程
  15. 计算机必学知识,基础电脑知识:计算机操作常识入门必学
  16. Android应用分身检测
  17. ST-GCN demo运行记录
  18. linux挂接移动硬盘,LINUX挂接移动硬盘
  19. [paper]Feature Squeezing: Detecting Adversarial Examples in Deep Neural Networks
  20. MySQL安装与配置my.ini

热门文章

  1. 宽带拨号上网显示服务器失效,拨号上网失败 宽带连接错误651怎么办
  2. IDEA SpringBoot 自定义Banner
  3. PKUSC2018游记
  4. MacM1安装Pajek软件的方法(with brew,wine)
  5. 好家伙,公司服务器直接热崩掉了!
  6. RTI1.3时间管理支持的两种模式
  7. @Resource()注解报红
  8. python arduino i2c1602_Arduino 将1602液晶显示屏改造为IIC接口
  9. java实验报告6:异常处理程序设计
  10. 在飞腾平台安装MySQL数据库_银河麒麟4.0.2(飞腾平台) 安装MySQL数据库