|NO.Z.00009|——————————|BigDataEnd|——|Hadoop&OLAP_ClickHouse.V06|——|ClickHouse.v06|表引擎|MergeTree|数据存储|
一、数据存储
### --- 数据存储
~~~ 表由按主键排序的数据 片段 组成。
~~~ 当数据被插入到表中时,会分成数据片段并按主键的字典序排序。
~~~ 例如,主键是 (CounterID, Date) 时,片段中数据按 CounterID 排序,
~~~ 具有相同 CounterID 的部分按 Date 排序。
~~~ 不同分区的数据会被分成不同的片段,ClickHouse 在后台合并数据片段以便更高效存储。
~~~ 不会合并来自不同分区的数据片段。
~~~ 这个合并机制并不保证相同主键的所有行都会合并到同一个数据片段中。
~~~ ClickHouse 会为每个数据片段创建一个索引文件,索引文件包含每个索引行(『标记』)的主键值。
~~~ 索引行号定义为 n * index_granularity 。
~~~ 最大的 n 等于总行数除以 index_granularity 的值的整数部分。
~~~ 对于每列,跟主键相同的索引行处也会写入『标记』这些『标记』让你可以直接找到数据所在的列。
~~~ 你可以只用一单一大表并不断地一块块往里面加入数据 – MergeTree 引擎的就是为了这样的场景
二、按列存储
### --- 按列存储
~~~ 在MergeTree中数据按列存储,具体到每个列字段,都拥有一个.bin数据文件,
~~~ 是最终存储数据的文件。 按列存储的好处: 1、更好的压缩 2、最小化数据扫描范围
~~~ # MergeTree往.bin文件存数据的步骤:
~~~ 对数据进行压缩
~~~ 根据OrderBy排序
~~~ 数据以压缩数据块的形式写入.bin文件
三、压缩数据块
### --- 压缩数据块
~~~ CompressionMethod_CompressedSize_UnccompressedSize
~~~ # 一个压缩数据块有两部分组成:
~~~ 头信息
~~~ 压缩数据
~~~ 头信息固定使用9位字节表示,1个UInt8(1字节)+2个UInt32(4字节),
~~~ 分别表示压缩算法、压缩后数据大小、压缩前数据大小
~~~ # 如:0x821200065536
~~~ 0x82:是压缩方法
~~~ 12000:压缩后数据大小
~~~ 65536:压缩前数据大小
~~~ clickhouse-compressor --stat命令
### --- 压缩数据块示例
[root@hadoop01 ~]# cd /var/lib/clickhouse/data/default/mt_table/202111_1_3_1/
[root@hadoop01 202111_1_3_1]# clickhouse-compressor --stat <./date.bin > out.log
[root@hadoop01 202111_1_3_1]# cat out.log
6 16
### --- out.log文件中显示的数据前面的是压缩的,后面是未压缩的:[Column].bin:
### --- 如果按照默认8192的索引粒度把数据分成批次,每批次读入数据的规则:
~~~ 设x为批次数据的大小,
~~~ 如果单批次获取的数据 x<64k,则继续读下一个批次,找到size>64k则生成下一个数据块
~~~ 如果单批次数据64k<x<1M则直接生成下一个数据块
~~~ 如果x>1M,则按照1M切分数据,剩下的数据继续按照上述规则执行。

Walter Savage Landor:strove with none,for none was worth my strife.Nature I loved and, next to Nature, Art:I warm'd both hands before the fire of life.It sinks, and I am ready to depart
——W.S.Landor
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通