clickhouse---MergeTree系列表引擎

MergeTree

MergeTree作为家族最基础的表引擎,提供了数据分区、一级索引和二级索引等功能。对于基础原理,在上一篇文章中已经介绍过了。本节进一步介绍MergeTree家族独有的另外两项能力----数据TTL与存储侧罗

TTL

MergeTree中可以设置整个列字段或者整张表的TTL.如果到达ttl会将对应列/表删除。

ttl的运行原理:如果一张MergeTree表设置了TTL表达式,那么在写入数据时,会以数据分区为单位,在每个分区目录内生成一个名为ttl.txt文件,里面存储ttl相关信息。columns用于保存列级别的ttl信息,tables用于保存表级别的ttl信息。min和max分别表示ttl制定日期字段的最小值、最大值与interval表达式计算后的时间戳。

多路径的存储策略

19.15版本开始,MergeTree实现了自定义存储策略的功能,支持以数据分区为最小移动单元,将分区目录写入多块磁盘目录。
3类存储策略:

  • 默认策略:MergeTree原本的存储策略,无须任何配置,所有分区会自动保存到config.xml配置的path目录下
  • JBOD策略:JUST A BUNCH OF DISKS。适合服务器挂栽了多块磁盘,但没有做raid场景。每一次执行insert或者merge时候,所产生的新分区会轮询写入各个磁盘。这种策略的效果类似RAID 0。可以降低单块磁盘的负载。单磁盘故障会丢失部分数据
  • HOT/COLD策略:适合服务器挂栽了不同类似磁盘的场景。将存储磁盘分为HOT与COLD两类区域。写入hot,数据累积到阈值时候,自行移动到cold区域。每个区域内部可以用JBOD策略。

ReplacingMergeTree

能够在合并分区时候删除重复的数据。一定程度解决了数据重复的问题。

Engine = ReplacingMergeTree(ver:版本号)
  • order by排序键作为判断重复数据的唯一键
  • 只有在合并分区时候才会触发删除重复数据的逻辑
  • replacingMergeTree是以分区为单位删除重复数据,只有在相同数据分区内的重复数据才可以被删除,而不同数据分区之间的重复数据依然不能被剔除。
  • 在进行数据去重时候,因为分区内的数据已经基于orderby进行排序,所以能够找到那些相邻的重复数据。
  • 数据去重策略有两种:如果没有设置ver版本号,则保留同一组重复数据中最后一行。如果设置了ver版本号,则保留同一组重复数据中ver最大的一行。

SummingMergeTree

group by条件明确,不会随意改变,用户主需要查询数据的汇总结果,不关心明细数据。
summingMerge能够子分区合并时候按照预先定义的条件聚合汇总数据,将同一组下的多行数据汇总成一行,这样既减少了数据行,又降低了后续查汇总的开销

  • 用order by排序键作为聚合数据的条件key
  • 只有在合并分区的时候才会触发汇总的逻辑
  • 以数据分区为单位来聚合数据。当分区合并时,同一数据分区内聚合key相同的数据会被合并汇总,而不同分区之间的数据则不会。
  • 如果定义引擎时指定了columns汇总列,则sum汇总这些字段,如果未指定,则聚合所有非主键的数值类型字段
  • 数据汇总时,因为分区内的数据已经基于orderby排序,所以能够找到相邻且拥有相同聚合key的数据
  • 在汇总数据时,同一分区内,相同聚合key的多行数据会合并成一行。其中汇总字段会进行sum计算,对于非汇总字段去用第一行数据的值
  • 支持嵌套结构,但列字段必须以Map后缀结尾

AggregatingMergeTree

能够在合并分区时候,按照预先定义的条件聚合数据。同时将预先定义的聚合函数计算数据并通过二进制格式存入表内。一般结合物化视图使用,类似数据立方体概念。

  • 用order by排序键作为聚合数据的条件key
  • 使用aggregateFuntion字段定义聚合函数的类型以及聚合字段。
  • 只有在合并分区时候才会触发聚合计算的逻辑
  • 以数据分区为单位来聚合数据。当分区合并时,同一数据分区内聚合key相同的数据会被合并计算,而不同分区之间的数据则不会被计算
  • 在进行数据计算时,因为分区内的数据已经基于orderby排序,所以能够找到相邻并且拥有相同聚合key的函数
  • 在聚合数据的时候,同一分区内,相同聚合key的多行数据会合并成一行。对于那些非主键、非aggregatefunction类型字段,则会使用第一行数据取值
  • aggregatefunction类型的字段使用二进制存储,在写入数据时,需要调用state函数,在查询数据时候,需要调用相应Merge函数
  • AggregatingMergeTree通常作为物化视图的表引擎,与普通MergeTree搭配使用。

CollapsingMergeTree

对已经存在的数据实现行级粒度的修改或删除。相比较于直接修改文件,会讲修改和删除操作转换成新增操作、以增代删。sign为1和-1的数据会被抵消掉

VersionedCollapsingMergeTree

对数据写入顺序没有要求,又一个ver版本号

ReplicatedMergeTree

组合关系+7种表引擎,增加了分布式血统的能力,借助Zookeeper消息日志广播的功能,实现了副本实例之间的数据同步。

你可能感兴趣的:(大数据,数据库,database,clickhouse,表引擎)