CC00009.clickhouse——|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切分数据,剩下的数据继续按照上述规则执行。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

yanqi_vip

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值