MergeTree系列引擎概述与存储结构

MergeTree系列引擎介绍

MergeTree系列引擎是clickhouse中最强大的表引擎
数据按照片段被一批批写入表
数据片段在后台按照一定规则进行合并。

主要特性

  • 数据按照 主键排序,稀疏索引快速检索数据
  • 数据分区 增加查询性能
  • 数据副本 ReplicatedMergeTree系列的引擎支持数据副本,替身查询性能和容错
  • 数据采样 设置采样方法,快速分析数据

建表模板

CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster] 
(
    name1 [type1] [DEFAULT|MATERIALIZED|ALIAS expr1] [TTL expr1], 
	name2 [type2] [DEFAULT|MATERIALIZED|ALIAS expr2] [TTL expr2], 
	... 
	INDEX index_name1 expr1 TYPE type1(...) GRANULARITY value1,
	INDEX index_name2 expr2 TYPE type2(...) GRANULARITY value2
) ENGINE = MergeTree()
[PARTITION BY expr]
[ORDER BY expr]
[PRIMARY KEY expr]
[SAMPLE BY expr]
[TTL expr [DELETE|TO DISK 'xxx'|TO VOLUME 'xxx'], ...]
[SETTINGS name=value, ...]

建表语句

  • ENGINE : 引擎的名称和参数
  • PARTITION BY : 分区键
  • ORDER BY:表的排序键
  • PRIMARY KEY : 表的主键
  • SAMPLE BY : 采样表达式
  • TTL:定义行数据的存储时间,磁盘和卷之间数据片段的自动移动逻辑。
  • SETTINGS : 控制MergeTree行为的额外参数。

MergeTree设置

重要参数:

  • index_granularity:索引力度,以行数为单位,表示索引标记(mark)之间的最大数据行数。默认值:8192。
  • index_granularity_bytes:索引力度,以字节为单位,表示索引力度的最大子节大小,默认值:10Mb。设置该参数为0,将仅按行数限制索引粒度大小。
  • use_minimalistic_part_header_in_zookeeper:数据片段(part)头在Zookeeper中的存储方法。设置为1,紧凑存储数据片段头信息,极大减少Zookeeper的存储数据量。
  • storage_policy:存储策略。存储策略定义了使用多块设备进行数据存储的逻辑。
  • 更多设置参数:参数列表中其功能参见表system.merge_tree_settings。

MergeTree参数的设置

  • 表级:在建表时设置
  • 全局:config.xml的merge_tree标签内进行设置。

建表示例

非分区表

CREATE TABLE merge_demo(
	srcip String,
	destip String,
	date_time DateTime
)
ENGINE = MergeTree()
ORDER BY srcip
SETTINGS index_granularity = 8192;

分区表

CREATE TABLE merge_partition_demo(
	srcip String,
	destip String,
	date_time DateTime
)
ENGINE = MergeTree()
PARTITION BY toYYYYMM(date_time)
ORDER BY srcip;

插入数据

insert into merge_demo values
('113.248.234.232','123.212.22.01','2018-07-12 14:35:31'),
('113.248.234.231','123.212.22.02','2018-07-12 14:35:32'),
('113.248.234.233','123.212.22.03','2018-07-12 14:35:33'),
('113.248.234.234','123.212.22.04','2018-07-12 14:35:34'),
('113.248.234.235','123.212.22.05','2018-07-12 14:35:35'),
('113.248.234.236','123.212.22.06','2018-07-12 14:35:36');


insert into merge_partition_demo values
('113.248.234.232','123.212.22.01','2018-07-12 14:35:31'),
('113.248.234.231','123.212.22.02','2018-07-12 14:35:32'),
('113.248.234.233','123.212.22.03','2018-07-12 14:35:33'),
('113.248.234.234','123.212.22.04','2018-07-12 14:35:34'),
('113.248.234.235','123.212.22.05','2018-07-12 14:35:35'),
('113.248.234.236','123.212.22.06','2018-07-12 14:35:36'),
('113.248.234.232','123.212.22.01','2013-07-12 14:35:31'),
('113.248.234.231','123.212.22.02','2013-07-12 14:35:32'),
('113.248.234.233','123.212.22.03','2016-07-12 14:35:33'),
('113.248.234.234','123.212.22.04','2016-07-12 14:35:34'),
('113.248.234.235','123.212.22.05','2019-07-12 14:35:35'),
('113.248.234.236','123.212.22.06','2019-07-12 14:35:36');

查看数据存储

查看非分区表的存储

ll /var/lib/clickhouse/data/test/merge_demo/
这里test是表中数据库名,merge_demo是表名。

在这里插入图片描述

查看分区表的存储

ll /var/lib/clickhouse/data/test/merge_partition_demo/

在这里插入图片描述

数据的存储

  • checksums.txt : 校验文件的正确性和完整性。
  • columns.txt : 存储列的信息,包括数据类型。
  • count.txt : 存储分区目录下数据的总行数。
  • primary.idx : 存储索引数据的文件。稀疏索引,能够加速查询。
  • bin文件:存储数据的文件,以研所格式存储,默认LZ4。
  • mrk文件:存储列的数据标记的文件。
  • partition.dat : 存储存储分区表表达式生成的值。使用二进制格式存储。该文件只在分区表中存储。
  • minmax_*文件 : 存储能当前目录下,分区字段对应的原始字段的最小和最大值。
  • skp_idx_.idx、skp_idx_.mrk:skip索引标记文件。

数据片段

  • 一个表是由按主键排序的数据片段(part)组成
  • 当向表中插入数据时,将创建单独的数据片段
  • clickhouse在后台合并数据片段以便更高效的存储
  • 不会合并来自不同分区的数据片段。

演示

再导入一遍分区数据,查看目录
ll /var/lib/clickhouse/data/test/merge_partition_demo/

在这里插入图片描述

在clickhouse中输入手动合并命令
optimize table merge_partition_demo;
再次查看目录多了一个文件夹

在这里插入图片描述

虽然没有删除还存在的旧文件加,但是已经失效通过查看system.parts表就知道了
select partition,name,active,table from system.parts where table='merge_partition_demo';

在这里插入图片描述

可以清楚的看到文件已失效。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值