2024年软件测试最全Clickhouse实战--数据更新和删除概述_clickhouse update,费时6个月成功入职阿里

img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上软件测试知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

需要这份系统化的资料的朋友,可以戳这里获取

(4)CollapsingMergeTree表引擎+Insert语句

(5)VersionedCollapsingMergeTree表引擎+Insert语句

Update和Delete操作

ClickHouse提供了DELETE和UPDATE的能力,这类操作被称为Mutation操作,它可以看作ALTER语句的变种。

虽然Mutation能最终实现修改和删除,但不能完全以通常意义上的UPDATE和DELETE来理解,我们必须清醒地认识到它的不同,主要有以下几个方面:

  • Mutation语句是一种“很重”的操作,更适用于批量数据的修改和删除;
  • 它不支持事务,一旦语句被提交执行,就会立刻对现有数据产生影响,无法回滚;
  • Mutation语句的执行是一个异步的后台过程,语句被提交之后就会立即返回,但这并不代表具体逻辑已经执行完毕,它的具体执行进度需要通过system.mutations系统表查询。
  • 对于*MergeTree表引擎,在执行Mutation操作时是通过重写整个分区数据来实现的(使用新的分区代替老的分区)。如果需要操作的分区非常多,optimize的耗时会非常长甚至失败。此时,可以根据实际情况和分区的分布使数据的更新只涉及部分分区来提高效率。
  • 对于update操作:不能更新是主键的列(在primary by或order by中的列),
  • 对于delete操作:可以使用ALTER DELETE来灵活删除旧数据。对于定期删除操作,主要缺点是:需要有一个外部系统来提交操作命令。性能方面的考虑,因为即使只有一行要删除,Mutation操作也会重写完整的分区。
使用ReplacingMergeTree表引擎

在创建该引擎的数据表时一般会创建一个ver字段,该引擎在后台合并分区数据时会删除:主键(order by 后面的列)相同,而ver较小的数据行,只会保留一条ver最大的那一条数据。若没有指定ver字段,会保留主键相同,最新的一条数据。这样,就间接的通过insert操作实现了数据的删除、更新。

要注意的是,Clickhouse后台的数据合并操作不是立即执行的,而是要等到分区数据合并时才会执行,而后台数据合并的时间是不确定的,业务实现时不能依赖这个时间。

那么,若我们想要让数据替换操作立即生效,该怎么办呢?Clickhouse也提供了一个选择,那就是在查询语句时添加final关键字。添加final关键字后,会根据规则自动去重数据,但可能对查询的性能有一定影响。

另外,还需要注意,必须是同一个分区的数据才会被合并。也就是说,要想对相同主键的数据去重,必须保证这些数据处于同一个分区;那么,若是分布式表,首先要保证数据落到同一个节点上。

该引擎的建表语句如下:

CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster]
(
    name1 [type1] [DEFAULT|MATERIALIZED|ALIAS expr1],
    name2 [type2] [DEFAULT|MATERIALIZED|ALIAS expr2],
    ...
) ENGINE = ReplacingMergeTree([ver])
[PARTITION BY expr]
[ORDER BY expr]
[SAMPLE BY expr]
[SETTINGS name=value, ...]

从建表语句可以看到,在创建表时ReplacingMergeTree的引擎中,必须指定ver字段。该引擎的使用,会有专门的文章进行描述。

使用VersionedCollapsingMergeTree表引擎

该引擎会根据:sign, version和主键字段来对数据进行删除(折叠)操作,从而实现数据的更新。

同样,数据的合并必须要主键相同,sign字段为1和-1时,version值相同的两条数据会被合并。而sign的值和version的值,是由数据写入端写入的。

同时,数据也必须处于同一分区时才会合并,数据最终才会被删除。

img
img

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**

  • 18
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值