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

又一个月过去,ClickHouse 迎来了全新的版本更新!
发布概要
本次ClickHouse 25.6 发布包含 25 项新功能 🌸 32 项性能优化 🦋 以及 105 个缺陷修复 🐝。
在这一版本中,ClickHouse 实现了在同一个查询中对所有子查询和表引用使用单一一致性快照(snapshot)、支持按多个投影(projection)过滤、对 Parquet 文件中 JSON 的支持,等等。
新贡献者
在此特别欢迎 25.6 版本的新贡献者!ClickHouse 社区的不断壮大令人感到振奋,我们非常感谢大家为 ClickHouse 流行度持续增长做出的贡献。
以下是新贡献者名单:
Alexander Grueneberg, Delyan Kratunov, Denis K, Engel Danila, George Larionov, Hans Krutzer, Himanshu Pandey, Joel Höner, Kenny Sun, Krishna Mannem, Lucas Pelecq, Lucas Ricoy, Nihal Z., Nikolay Govorov, Philip Dubé, Q3Master, Roy Kim, San Tran, Sav, Shakhaev Kyamran, Tanner Bruce, abashkeev, clickhouse-gh[bot], fhw12345, haowenfeng, haoyangqian, mekpro, nihalzp, roykim98, sdairs, sinfillo
SELECT 的单一快照(snapshot)
由 Amos Bird 贡献
ClickHouse 确保 SELECT 查询总是在一致性的快照上运行。这意味着,在整个查询执行期间,即使并发地插入新的行,或更新、删除现有的行,查询看到的数据也始终保持一致。
这一能力的核心来自表数据分片(data parts)的不可变特性[https://clickhouse.com/docs/parts]:
-
插入操作总是创建新的分片,现有数据从不被原地修改。
-
删除和更新会通过 mutation(mutation)或分片合并,最终生成包含更改的新分片。
依靠这种不可变性,SELECT 查询就可以安全地基于查询启动时的分片快照执行。
下面这张动画演示了这一快照机制:

① 当 ClickHouse 收到针对表 t 的 SELECT 查询 Q1 时,会在查询计划与索引分析阶段确定相关的数据分片。
② 这些分片会被标记为当前查询的引用对象。
在 Q1 执行期间,以下变化可以安全地发生且不会影响结果:
③ 一个分片被删除
④ 一个新的分片被插入
⑤ 一个分片被变更(mutate)
由于引用机制的存在,Q1 会持续从原始快照中读取数据,在整个执行过程中保证一致性。
更重要的是,所有被查询引用的分片在查询结束前都不会被删除。一旦 Q1 执行完成,引用会被释放,旧分片也就可以安全清理。
问题:子查询快照不一致
在 ClickHouse 25.6 版本之前,系统会为每一个子查询或表引用分别生成快照,这种行为会带来数据一致性风险:

① 当 ClickHouse 收到一个包含子查询 SQ1 和 SQ2 的 SELECT 查询时,
② 它会先为 SQ1 确定需要使用的数据分片,然后再单独为 SQ2(④)确定分片。
③ 如果此过程中发生了数据分片的插入、删除或变更,
④ 那么两个子查询很可能读取到不一致的版本。
解决方案:整条查询使用单一快照
从 25.6 版本起,ClickHouse 会在查询执行开始时为整个查询(即便包含多个子查询或公共表表达式 CTE)创建一个统一、一致的快照。这让即使最复杂的 SELECT 查询也能保证正确的结果。
这个行为由配置项 enable_shared_storage_snapshot_in_query 控制:
SET enable_shared_storage_snapshot_in_query = 1;
启用后,所有子查询会共享同一张表的相同快照:

在版本发布演示中,你可以看到这一新旧机制的对比效果,Alexey 在讲解时还提供了一个真实的案例(点击可跳转至正确时间戳的视频)。

[视频链接:https://www.youtube.com/live/_9IBOM3pR4U?t=779s]
功能改进:按多个投影(projection)过滤
由 Amos Bird 贡献
ClickHouse 为大规模实时分析提供了多种加速手段,其中一个非常强大的功能就是投影(projection)。它是一种由系统自动维护并隐藏的结构化表,用来优化查询效率。

最低0.47元/天 解锁文章
1220

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



