
本文字数:12937;估计阅读时间:33 分钟
作者:ClickHouse Team
本文在公众号【ClickHouseInc】首发

又到了每月版本发布的时间!
发布概要
本次ClickHouse 25.6 发布包含 27 项新功能 🌸 26 项性能优化 🍦 以及 98 个缺陷修复 🐞。
本次更新中,我们要特别欢迎所有参与 25.7 版本开发的新贡献者!ClickHouse 社区的不断壮大令人深受感动,我们始终感谢每一位推动 ClickHouse 走向更广泛应用的贡献者。
以下是本次新增的贡献者名单:
Alon Tal、Andrey Volkov、Damian Maslanka、Diskein、Dominic Tran、Fgrtue、H0uston、HumanUser、Ilya fanyShu、Joshie、Mishmish Dev、Mithun P、Oleg Doronin、Paul Lamb、Rafael Roquetto、Ronald Wind、Shiv、Shivji Kumar Jha、Surya Kant Ranjan、Ville Ojamo、Vlad Buyval、Xander Garbett、Yanghong Zhong、ddavid、e-mhui、f2quantum、jemmix、kirillgarbar、lan、wh201906、xander、yahoNanJing、yangjiang、yangzhong、思维
轻量级更新
由 Anton Popov 开发
ClickHouse 现在支持 可大规模执行的标准 SQL UPDATE 语句,由全新的轻量级 patch-part 机制驱动。与传统需要重写整列数据的变更操作不同,这种方式只会写入很小的补丁部分(patch parts),能够即时生效,并且对查询性能几乎没有影响。
工作原理
补丁部分继承了 专用引擎(https://clickhouse.com/blog/updates-in-clickhouse-1-purpose-built-engines)(如 ReplacingMergeTree)背后的相同原理,但以完全通用的方式,通过 标准 SQL(https://www.w3schools.com/sql/sql_update.asp) 暴露给用户:
UPDATE orders
SET discount = 0.2
WHERE quantity >= 40;
-
插入操作非常快速(https://clickhouse.com/blog/updates-in-clickhouse-1-purpose-built-engines#inserts-are-so-fast-we-turned-updates-into-inserts)。
-
合并是持续进行的(https://clickhouse.com/blog/updates-in-clickhouse-1-purpose-built-engines#merges-are-fast-thanks-to-sorted-parts)。
-
数据部分是不可变且有序的(https://clickhouse.com/blog/updates-in-clickhouse-1-purpose-built-engines#inserts-create-sorted-and-immutable-parts)。
因此,ClickHouse 不会去定位并直接修改行,而是插入一个紧凑的补丁部分,用于在合并过程中修补数据部分,仅应用更改过的数据。

合并任务原本就在后台运行,现在我们让它在几乎零额外开销的情况下多做一步:应用补丁部分,在合并数据时高效更新基础数据。
更新可以即时反映出来,尚未合并的补丁部分会被匹配,并且会在每个 数据流(https://clickhouse.com/docs/optimize/query-parallelism#distributing-work-across-processing-lanes) 的各个数据范围内独立应用,以精确且有针对性的方式确保更新正确执行,同时不影响并行处理。

这让声明式更新在我们的基准测试中最高可比以往快 1,000 倍(https://clickhouse.com/blog/updates-in-clickhouse-3-benchmarks#time-until-bulk-updates-are-visible-to-queries),并且在合并前对查询的影响几乎可以忽略。
无论是更新一行还是一百万行,现在都能做到快速、高效,并且完全是声明式的。
DELETE 是 轻量级 羽量级
对于使用 标准 SQL 语法(https://www.w3schools.com/sql/sql_delete.asp) 的 DELETE 操作,例如:
DELETE FROM orders WHERE order_id = 1001 AND item_id = 'mouse';
ClickHouse 只需创建一个补丁部分,将被删除行的 _row_exists 设置为 0。然后,这些行会在下一次后台合并时被移除。

快速 UPDATE 的内部机制
想更深入地了解?可以阅读我们关于 ClickHouse 快速 UPDATE 的三篇博客系列:
-
第 1 篇:专用引擎(https://clickhouse.com/blog/updates-in-clickhouse-1-purpose-built-engines)
介绍 ClickHouse 如何利用基于插入的引擎(ReplacingMergeTree、CollapsingMergeTree、CoalescingMergeTree)来规避缓慢的行级更新。
-
第 2 篇:声明式 SQL 风格 UPDATE(https://staging.clickhouse.com/blog/updates-in-clickhouse-2-sql-style-updates)
探讨我们

最低0.47元/天 解锁文章
173

被折叠的 条评论
为什么被折叠?



