篇二|什么是ClickHouse的表引擎?

作者&投稿:芒缸 (若有异议请与网页底部的电邮联系)
~

在上一篇分享中,我们介绍了ClickHouse的安装部署和简单使用。本文将介绍ClickHouse中一个非常重要的概念— 表引擎(table engine) 。如果对MySQL熟悉的话,或许你应该听说过InnoDB和MyISAM存储引擎。不同的存储引擎提供不同的存储机制、索引方式、锁定水平等功能,也可以称之为 表类型 。ClickHouse提供了丰富的表引擎,这些不同的表引擎也代表着不同的 表类型 。比如数据表拥有何种特性、数据以何种形式被存储以及如何被加载。本文会对ClickHouse中常见的表引擎进行介绍,主要包括以下内容:

Log系列表引擎功能相对简单,主要用于快速写入小表(1百万行左右的表),然后全部读出的场景。 即一次写入多次查询

该引擎适用于 一次写入,多次读取的场景 。对于处理小批数据的中间表可以使用该引擎。值得注意的是,使用大量的小表存储数据,性能会很低。

进入默认数据存储目录,查看底层数据存储形式,可以看出: TinyLog 引擎表每一列都对应的文件

当我们执行 ALTER操作 时会报错,说明该表引擎不支持ALTER操作

相比TinyLog而言,StripeLog拥有更高的查询性能(拥有.mrk标记文件,支持并行查询),同时其使用了更少的文件描述符(所有数据使用同一个文件保存)。

进入默认数据存储目录,查看底层数据存储形式

可以看出StripeLog表引擎对应的存储结构包括三个文件:

Log引擎表适用于临时数据,一次性写入、测试场景。Log引擎结合了TinyLog表引擎和StripeLog表引擎的长处,是Log系列引擎中性能最高的表引擎。

进入默认数据存储目录,查看底层数据存储形式

Log引擎的存储结构包含三部分:

在所有的表引擎中,最为核心的当属MergeTree系列表引擎,这些表引擎拥有最为强大的性能和最广泛的使用场合。对于非MergeTree系列的其他引擎而言,主要用于特殊用途,场景相对有限。而MergeTree系列表引擎是官方主推的存储引擎,支持几乎所有ClickHouse核心功能。

MergeTree在写入一批数据时,数据总会以数据片段的形式写入磁盘,且数据片段不可修改。为了避免片段过多,ClickHouse会通过后台线程,定期合并这些数据片段,属于相同分区的数据片段会被合成一个新的片段。这种数据片段往复合并的特点,也正是合并树名称的由来。

MergeTree作为家族系列最基础的表引擎,主要有以下特点:

查看一下数据存储格式,可以看出,存在三个分区文件夹,每一个分区文件夹内存储了对应分区的数据。

进入一个分区目录查看

可以看出,新插入的数据新生成了一个数据块,并没有与原来的分区数据在一起,我们可以执行 optimize 命令,执行合并操作

执行上面的合并操作之后,会新生成一个该分区的文件夹,原理的分区文件夹不变。

上文提到 MergeTree 表引擎无法对相同主键的数据进行去重,ClickHouse提供了ReplacingMergeTree引擎,可以针对相同主键的数据进行去重,它能够在合并分区时删除重复的数据。值得注意的是, ReplacingMergeTree 只是在一定程度上解决了数据重复问题,但是并不能完全保障数据不重复。

当我们再次向该表插入具有相同主键的数据时,观察查询数据的变化

从上面的示例中可以看出,ReplacingMergeTree是支持对数据去重的,那么是根据什么进行去重呢?答案是: ReplacingMergeTree在去除重复数据时,是以ORDERBY排序键为基准的,而不是PRIMARY KEY 。我们在看一个示例:

再次向该表中插入相同emp_id和name的数据,并执行合并操作,再观察数据

至此,我们知道了ReplacingMergeTree是支持去重的,并且是按照 ORDERBY排序键 为基准进行去重的。细心的你会发现,上面的重复数据是在一个分区内的,那么如果重复的数据不在一个分区内,会发生什么现象呢?我们再次向上面的 emp_replacingmergetree1 表插入不同分区的重复数据

ReplacingMergeTree在去除重复数据时,是以ORDERBY排序键为基准的,而不是PRIMARY KEY。

在执行分区合并时,会触发删除重复数据。optimize的合并操作是在后台执行的,无法预测具体执行时间点,除非是手动执行。

ReplacingMergeTree是以分区为单位删除重复数据的。只有在相同的数据分区内重复的数据才可以被删除,而不同数据分区之间的重复数据依然不能被剔除。

如果没有设置 [ver]版本号 ,则保留同一组重复数据中的最新插入的数据; 如果设置了 [ver]版本号 ,则保留同一组重复数据中 ver字段取值最大的那一行

一般在数据量比较大的情况,尽量不要使用该命令。因为在海量数据场景下,执行optimize要消耗大量时间

该引擎继承了MergeTree引擎,当合并 SummingMergeTree 表的数据片段时,ClickHouse 会把所有具有相同主键的行合并为一行,该行包含了被合并的行中具有数值数据类型的列的汇总值,即如果存在重复的数据,会对对这些重复的数据进行合并成一条数据,类似于group by的效果。

推荐将该引擎和 MergeTree 一起使用。例如,将完整的数据存储在 MergeTree 表中,并且使用 SummingMergeTree 来存储聚合数据。这种方法可以避免因为使用不正确的主键组合方式而丢失数据。

如果用户只需要查询数据的汇总结果,不关心明细数据,并且数据的汇总条件是预先明确的,即 GROUP BY的分组字段是确定的 ,可以使用该表引擎。

当我们再次插入具有相同emp_id,name的数据时,观察结果

要保证 PRIMARY KEY expr 指定的主键是 ORDER BY expr 指定字段的前缀,比如

这种强制约束保障了即便在两者定义不同的情况下,主键仍然是排序键的前缀,不会出现索引与数据顺序混乱的问题。

用ORBER BY排序键作为聚合数据的条件Key。即如果排序key是相同的,则会合并成一条数据,并对指定的合并字段进行聚合。

以数据分区为单位来聚合数据。当分区合并时,同一数据分区内聚合Key相同的数据会被合并汇总,而不同分区之间的数据则不会被汇总。

如果没有指定聚合字段,则会按照非主键的数值类型字段进行聚合

如果两行数据除了排序字段相同,其他的非聚合字段不相同,那么在聚合发生时,会保留最初的那条数据,新插入的数据对应的那个字段值会被舍弃

该表引擎继承自MergeTree,可以使用 AggregatingMergeTree 表来做增量数据统计聚合。如果要按一组规则来合并减少行数,则使用 AggregatingMergeTree 是合适的。AggregatingMergeTree是通过预先定义的聚合函数计算数据并通过二进制的格式存入表内。

与SummingMergeTree的区别在于:SummingMergeTree对非主键列进行sum聚合,而AggregatingMergeTree则可以指定各种聚合函数。

对于AggregateFunction类型的列字段,在进行数据的写入和查询时与其他的表引擎有很大区别,在写入数据时,需要调用 <agg>-State 函数;而在查询数据时,则需要调用相应的 <agg>-Merge 函数。对于上面的建表语句而言,需要使用 sumState 函数进行数据插入

上面演示的用法非常的麻烦,其实更多的情况下,我们可以结合物化视图一起使用,将它作为物化视图的表引擎。而这里的物化视图是作为其他数据表上层的一种查询视图。

AggregatingMergeTree通常作为物化视图的表引擎,与普通MergeTree搭配使用。

CollapsingMergeTree就是一种通过以增代删的思路,支持行级数据修改和删除的表引擎。它通过定义一个sign标记位字段,记录数据行的状态。如果sign标记为1,则表示这是一行有效的数据;如果sign标记为-1,则表示这行数据需要被删除。当CollapsingMergeTree分区合并时,同一数据分区内,sign标记为1和-1的一组数据会被抵消删除。

每次需要新增数据时,写入一行sign标记为1的数据;需要删除数据时,则写入一行sign标记为-1的数据。

上面的建表语句使用CollapsingMergeTree(sign),其中字段sign是一个Int8类型的字段

CollapsingMergeTree同样是以ORDER BY排序键作为判断数据唯一性的依据。

分数数据折叠不是实时的,需要后台进行Compaction操作,用户也可以使用手动合并命令,但是效率会很低,一般不推荐在生产环境中使用。

当进行汇总数据操作时,可以通过改变查询方式,来过滤掉被删除的数据

只有相同分区内的数据才有可能被折叠。其实,当我们修改或删除数据时,这些被修改的数据通常是在一个分区内的,所以不会产生影响。

值得注意的是:CollapsingMergeTree对于写入数据的顺序有着严格要求,否则导致无法正常折叠。

如果数据的写入程序是单线程执行的,则能够较好地控制写入顺序;如果需要处理的数据量很大,数据的写入程序通常是多线程执行的,那么此时就不能保障数据的写入顺序了。在这种情况下,CollapsingMergeTree的工作机制就会出现问题。但是可以通过VersionedCollapsingMergeTree的表引擎得到解决。

上面提到CollapsingMergeTree表引擎对于数据写入乱序的情况下,不能够实现数据折叠的效果。VersionedCollapsingMergeTree表引擎的作用与CollapsingMergeTree完全相同,它们的不同之处在于,VersionedCollapsingMergeTree对数据的写入顺序没有要求,在同一个分区内,任意顺序的数据都能够完成折叠操作。

VersionedCollapsingMergeTree使用 version 列来实现乱序情况下的数据折叠。

可以看出:该引擎除了需要指定一个sign标识之外,还需要指定一个UInt8类型的version版本号。




雅思口语评分标准中的五条潜规则
说到原创精神的培养,一是多开发点同义词和近义词,来替代原来的cliché;二是多与外教交流,及时注意他们在用词方面的原创之处。比如老外绝对不会去说learn knowledge,而有一次我听到一位外教说recipients of knowledge(知识的接受者),我就赶紧记下来,日后可以为我所用。潜规则三:最恨两样东西 — generalized & memo...

唐建武成就及荣誉
他的科研成果硕果累累,其中“肺癌不同亚型的蛋白表型研究”荣获省级科技进步一等奖,而“肺泡细胞癌淋巴结移行定植行为的受体与基因研究”和“子宫肿瘤凝集素结合特性研究”分别获得了二等奖和三等奖。在国家级科研项目方面,他同样表现出色,如“子宫鞘糖脂及子宫凝集素结合特性变化”和“Clic1\\Ech1\\Pla...

LINC 和ESL 什么意思?
LINC=Language Instruction for New Comers to Canada,法语叫CLIC LINC是加拿大新移民语言课程,一般分1-5级,每级学三个月,LINC不接收留学生,只面对成年的新移民或难民,并完全免费.一年分三个学期,一般是9月~11月一个学期,12月~3月一个学期,5~7月为一个学期,一个学期为一级,不断地晋级...

魔术的常识
二、魔术的表演 魔术演出前—— (一)挑选适合自己的魔术节目(要挑选熟练的,不要常常更换魔术节目). (二)如有助手的话,要经常彩排,以便达到最佳的协调和默契. (三)要经常检查魔术道具,如机簧之类的装置,必需经常加添润滑剂,保持运作正常. (四)必需提前到达演出的场地,在后台整理好魔术道具,略为休息,准备出场....

英文魔术术语
second deal 发第二张 bottom deal 发底牌 center deal 发中间牌 palm 掌中藏牌 top palm 藏顶牌 bottom palm 藏底牌 Gambler's Cop 赌徒扣牌 side steal 侧边偷牌 Tenkai palm 天海藏牌 back palm 手背藏牌 Spread Control 摊牌控牌 convincing control pass 控制移牌 in jog 挪移 break 布雷...

神庙逃亡2梦魇马怎么找不到?
神庙逃亡2[1]原版名称 TEMPLE RUN 2 别名 寺庙狂奔2、逃离神庙2 游戏类型 冒险,动作 游戏平台 Android,iOS 神庙逃亡2 冒险类跑酷游戏《神庙逃亡》的二代 [1]《神庙逃亡2》是由Imangi Studios和 LLC研发的一款角色扮演游戏。2014年8月29日,曾让全球1.7亿玩家都乐在其中的跑酷游戏《神庙逃亡2》...

关于剪纸的英文作文怎么写?
范文二:Paper cutting is a traditional folk art form with a long history.It can be dated back to the Eastern Han Dynasty.In traditional Chinese culture, paper-cuts can reflect various aspects of life such as prosperity, health or harvest.Although other art forms, like painting, ...

现代还有黑话吗?都有什么呢?
(二)古彩戏法道具专用术语: 粘—— 身上夹带各种道具叫粘托或挂托。 摆—— 在身上挂东西,也叫爬。 合—— 身上挂东西所使用的特制的钩子。 过—— 身上夹带道具所使用的布口袋。 月—— 身上夹带水碗特制的布口袋。 别—— 身上挂道具起插销作用的小工具。 捧—— 助手“抛衫”,即要求主演...

英语谚语小学二年级
老生常谈陈词滥调 cut and dried, cliché礼尚往来 Courtesy calls for reciprocity.留得青山在不怕没柴烧 Where there is life, there is hope.马到成功 achieve immediate victory; win instant success 名利双收 gain in both fame and wealth 茅塞顿开 be suddenly enlightened 没有规矩...

我的联通突然有个增值业务 咋取消?
联通手机号码可登录中国联通APP,点击菜单“办理--基础业务--增值业务退订”,根据页面提示进行退订增值业务。温馨提示:上述回答以重庆为例,因各省市区业务办理差异,具体退订方式可拨打当地联通客服咨询。

和龙市15775109995: The Click Five是个什么样的乐队? -
韦急立复: 中文名称:Greetings From Imrie House 资源类型:MP3! 发行时间:2005年08月16日 专辑歌手:The Click Five 地区:美国 语言:英语 专辑介绍: 出身柏克莱音乐学院疯迷全美在校生的校园王子首张青春摇滚大碟 创下2005年首张专辑名次...

和龙市15775109995: 求一篇高二英语作文,学校要组织关节能减排的演讲比赛,根据提示写一篇演讲稿,为保护地球献计献策. 现 -
韦急立复: Today, economy is advancing at a fast pace and together with it, the climate. Greenhouse gases is getting more and more and the world ,with its rising temperature, is having a 'fever". Due to the icebergs melting rapidly, the sea level is increasing ...

和龙市15775109995: 英语作文:以现在进行时写一篇关于家庭照初二 -
韦急立复: I have a happy family.There are my father,my mother,my brother and I. My father works a long way from home.And my mother is a housewife.My brother is a student who studies in the school.In a word,my family is full of happiness. I have a very happy ...

和龙市15775109995: 帮忙写2篇英文短文,先谢谢了英语补考的作文提纲,可能就是在这两篇
韦急立复: 2. Write about a problem or disagreement that you either had in the past or have ... To rent room vs to buy room Regarding with the issue of buying a house or renting a ...

和龙市15775109995: 英语2分钟演讲稿 -
韦急立复: Stopping by Woods on Snowy Evening 《雪夜林边小驻》,美国诗人Robert Frost的作品,美国人必修的一首诗,有点类似我们的白日依山尽…… Whose woods these are I think I know. His house is in th...

和龙市15775109995: 如何禁止别人转载文章如果blog的文章不想让人转载有什么办法吗?
韦急立复: 两种禁止复制的源代码: 代码之一: function click() { alert('禁止你的左键复制!') } function click1() { if (event.button==2) {alert('禁止右键点击~!') }} function ...

和龙市15775109995: ClickHouse支持多种表引擎.如果需要存储和分析大量的日志数据,例如...
韦急立复: My neighborhood My house is on Center street.There is a hotel ,a park ,a restaurant and two banks in the neighborhood. The hotel is infront of my house.And the park is across from the hotel.The restaurant is behind my house.As for two banks ,...

和龙市15775109995: 关于理想家园的英语作文!提示:1.房子很大,至少有20间,共三层; 2.一搂是电脑房和书;3.卧室在三楼,有一个大的阳台;4.二楼是餐厅和卧室;5.房子... -
韦急立复:[答案] Dear Wang Lin, Let me introduce my ideal house to you. My ideal house is a very big one, which is three-storeyed and has at least 20 rooms. On the first floor is my computer room and study, in which I can study. The bedrooms are on the third floor which ...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网