ClickHouse 在什么场景下才管用?

本文涉及的产品
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 Tair(兼容Redis),内存型 2GB
简介: ClickHouse 是一款以速度快著称的分析型数据库,尤其在列式宽表遍历方面表现出色。然而,面对复杂查询和关联运算时,ClickHouse 的性能急剧下降,甚至无法执行某些任务。相比之下,esProc SPL 通过更简洁的 SPL 语法和强大的优化能力,在各种复杂场景下均表现出色,全面超越 ClickHouse。实际案例显示,esProc SPL 在处理大规模数据时,性能提升可达数十倍。

ClickHouse 是近年来分析型数据库的热点,一向以快著称,很多其它以性能为卖点的分析型数据库也常常会用它作为一个对比标杆。很多用户碰到数据库运算性能问题时,也会考虑转向求助于 ClickHouse 解决
ClickHouse 确实是有过人之处,它的列式宽表速度很快,估计是压缩做得非常好。然而,除此之外,再无长处。希望用 ClickHouse 解决数据库计算性能问题的用户,大概率会失望的。

我们先拿 TPCH 100G 来测试 ClickHouse,在同样的硬件环境下和 Oracle 对比,这里只列出一个结果(时间单位:秒),完整的测试报告在 SPL 计算性能系列测试:TPCH 。
QQ_1729568367880.png
TPCH 算是比较基础的数据库性能测试,总体来讲不算很复杂,但也包含了一些 JOIN 和子查询,不全是简单的单表遍历。这情况下,ClickHouse 的表现非常差,有相当多的题跑不出来,还有个别题的 SQL 被认为过于复杂而无法执行。这方面甚至还不如 Oracle,Oracle 不是专业分析型数据库,速度会慢很多,但所有题都能跑出来。
具体原因很可能如上所述,ClickHouse 仅仅是把数据存储压缩做得很好,这会导致简单遍历速度很快,但对稍复杂的运算,它的优化能力相当拉胯,结果直接跑不出来。
希望用 ClickHouse 解决性能问题的用户,要先考察一下自己面临的计算任务的复杂度和 TPCH 相比如何。

我们继续用这套 TCPH 数据生成一个多列的宽表,再做 ClickHouse 最为擅长的多维分析计算,结果如下(时间单位:秒),完整测试报告见 SPL 计算性能系列测试:关联表及宽表 。
QQ_1729568402059.png
宽表遍历是 ClickHouse 擅长的场景,性能最好。但只要有多一点关联,ClickHouse 的运算性能就会急剧下降。关联再复杂后又会溢出,再一次验证了上述的原因分析。
看来,ClickHouse 的“快”,仅仅在于最简单的无关联单表遍历,这种“快”能适应的场景实在是太狭窄了。专门引进一个数据库仅仅做这么一点点事情,值得吗?

相比 ClickHouse 的“徒有虚名”,上面测试报告中提到的 esProc SPL 才是性能王者。

esProc SPL 也是开源软件,它是纯 Java 开发的,但在相当多的性能优化场景中却能远远跑赢 C++ 开发的 ClickHouse。
严格地说,esProc 并不是一个分析型数据库,不过它提供了高性能的存储格式(列存、压缩等)和相应的算法类库,可以完全取代分析型数据库的计算功能。
和市场上其它与 ClickHouse 竞争的数据库产品不同,esProc 没有再使用 SQL 语法,而是采用了更简洁的 SPL。这样才能克服 SQL 的缺陷,实现 SQL 难以甚至无法实现的高性能算法。这里有通俗的解释 快出数量级的性能是怎样炼成的 。而继续采用 SQL 体系的数据库,即便在某些局部能超越 ClickHouse,但仍然会受到 SQL 的局限,无法充分利用硬件资源跑出最好的性能。

我们再再把刚才测试报告中 esProc SPL 的性能列出和 ClickHouse 对比:
QQ_1729568434690.png
结果,esProc SPL 表现出来的性能明显优于 ClickHouse,所有题都能很快跑出来,对 ClickHouse 有全面的碾压优势。
QQ_1729568460922.png
数据量加大后,ClickHouse 在擅长的单个宽表遍历场景中确实更胜一筹,比 esProc SPL 更快。不过,大多数情况下采用宽表是为了规避低速的关联运算(以更大的存储量和更复杂的数据准备换取不做关联),而 esProc SPL 特有的关联优化方案能够跑出比 ClickHouse 宽表更快的速度,没有必要再生成宽表了。宽表丧失性能优势后,就只剩缺点,纯属多余。

对于单表上的无关联简单统计,ClickHouse 虽然更快,但也没有比 esProc 快出数量级(毕竟 CPU 和硬盘的动作就是那么快)。如果这时候可以利用任务特征来优化时,基于 ClickHouse 仍然会很难搞,SQL 无法实现很多优化逻辑,只能在上层用 C++ 继续编程才能实现,非常繁琐且困难。而 SPL 的可编程能力要强大得多,可以充分利用任务特征写出优化代码。
比如现代多维分析时几乎总会涉及到多指标统计,SPL 可以写出遍历复用算法,一次遍历计算出多个统计值,即便单指标计算比 ClickHouse 稍慢,多指标统计时就能大幅超出:
QQ_1729568483090.png
(完整测试报告 SPL 计算性能系列测试:多指标统计 )

对于更复杂的运算,比如漏斗运算,其复杂度已经无法再用 ClickHouse 做测试了,esProc SPL 当然不在话下 SPL 计算性能系列测试:漏斗分析 。
总结一下:esProc SPL 的性能优势是全面综合的,ClickHouse 的性能优势仅对一个非常狭窄的领域有效。

举个实际的案例,某个时空碰撞问题,总数据量约 250 亿行。SQL 看起来并不算很复杂:

WITH DT AS ( SELECT DISTINCT id, ROUND(tm/900)+1 as tn, loc FROM T WHERE tm<3*86400) SELECT * FROM ( SELECT B.id id, COUNT( DISINCT B.tn ) cnt FROM DT AS A JOIN DT AS B ON A.loc=B.loc AND A.tn=B.tn WHERE A.id=a AND B.id<>a
GROUP BY id )
ORDER BY cnt DESC
LIMIT 20
传统数据库跑得太慢,用户转而求助于 ClickHouse,结果用了 5 节点的集群环境下也跑了 30 分钟多,达不到期望。同样数据量,SPL 代码只用一个节点不到 6 分钟即可完成计算,超出了用户期望。考虑到硬件资源的差距,SPL 相当于比 ClickHouse 快了 25 倍以上。
QQ_1729568509162.png
(SPL 代码写在格子里,这和普通程序语言很不像,参考这里 写在格子里的程序语言 )

SQL 中的 DISTINCT 计算会涉及 HASH 和比对,数据量很大时计算量也会很大,然后还有自关联以及进一步的 COUNT(DISTINCT),都会严重拖累性能,而 SPL 可以充分利用 SQL 没有的有序分组和序号定位,有效避免复杂度很高的自关联和 DISTINCT 运算。虽然在存储效率上比 ClickHouse 并没有优势,Java 也会略慢于 C++,但仍然获得了数量级的性能提升。

最后,esProc SPL 到这里找:https://github.com/SPLWare/esProc。

相关实践学习
AnalyticDB MySQL海量数据秒级分析体验
快速上手AnalyticDB MySQL,玩转SQL开发等功能!本教程介绍如何在AnalyticDB MySQL中,一键加载内置数据集,并基于自动生成的查询脚本,运行复杂查询语句,秒级生成查询结果。
阿里云云原生数据仓库AnalyticDB MySQL版 使用教程
云原生数据仓库AnalyticDB MySQL版是一种支持高并发低延时查询的新一代云原生数据仓库,高度兼容MySQL协议以及SQL:92、SQL:99、SQL:2003标准,可以对海量数据进行即时的多维分析透视和业务探索,快速构建企业云上数据仓库。 了解产品 https://www.aliyun.com/product/ApsaraDB/ads
相关文章
|
6月前
|
存储 分布式计算 Hadoop
ClickHouse(01)什么是ClickHouse,ClickHouse适用于什么场景
ClickHouse是一款高性能的列式存储OLAP数据库,由俄罗斯的Yandex公司开发,用于在线分析处理(OLAP)。它提供秒级大数据查询,适用于商业智能、广告流量等领域。ClickHouse速度快的原因包括列式存储、数据压缩、向量化执行和多线程分布式处理。然而,它不支持事务,不适合OLTP操作。相比Hadoop生态中的查询引擎,ClickHouse在大量数据查询上表现出色。一系列的文章详细介绍了ClickHouse的各个方面,包括安装、表引擎和使用场景。
369 0
ClickHouse(01)什么是ClickHouse,ClickHouse适用于什么场景
|
SQL 分布式计算 测试技术
从 Clickhouse 到阿里云数据库 SelectDB 版内核 Apache Doris:有赞业务场景下性能测试与迁移验证
从 Clickhouse 到阿里云数据库 SelectDB 版内核 Apache Doris 迁移实践:有赞查询提速近 10 倍,OLAP 分析更实时高效!
从 Clickhouse 到阿里云数据库 SelectDB 版内核 Apache Doris:有赞业务场景下性能测试与迁移验证
|
SQL 分布式计算 测试技术
从 Clickhouse 到 Apache Doris:有赞业务场景下性能测试与迁移验证
当前,电商运营的主要痛点不仅来自多变的市场和客户需求,也受困于碎片化用户触达等带来的竞争与挑战。为了深度挖掘用户价值、培养用户忠诚度、实现业绩增长,有赞为商家搭建了全方位 OLAP 分析系统,提供实时与离线分析报表、智能营销与人群圈选等 SaaS 服务。本文将详细介绍有赞从 Clickhouse 至 Apache Doris 的迁移规划和性能对比测试实践,分享如何基于 Apache Doris 统一 OLAP 技术栈,并满足庞大数据体量下的实时分析与极速查询,最终有赞在多个场景下实现查询平均提速 200% 。
344 0
|
存储 搜索推荐 关系型数据库
55.【clickhouse】ClickHouse从入门到放弃-概念场景
【clickhouse】ClickHouse从入门到放弃-概念场景
55.【clickhouse】ClickHouse从入门到放弃-概念场景
|
消息中间件 SQL 搜索推荐
干货|从 ClickHouse 到 ByteHouse:实时数据分析场景下的优化实践
干货|从 ClickHouse 到 ByteHouse:实时数据分析场景下的优化实践
|
搜索推荐 BI OLAP
Clickhouse在画像场景如何快速计算人群的年龄分布
在画像场景场景中,对不同年龄段的人群进行计数是一个常见的操作,如何使用Clickhouse快速的计算出人群的年龄分布情况呢?
1606 1
Clickhouse在画像场景如何快速计算人群的年龄分布
|
搜索推荐 OLAP
Clickhouse在画像场景如何对人群分布情况进行N等分
Clickhouse是一个性能强悍的OLAP系统,经常被用于用户画像等场景。 在画像场景中,经常需要按照某一指标对人群进行N等分,然后对每个人根据指标所处的范围打上对应标签。 本文主要介绍如何通过Clickhouse对人群分布情况进行N等分。
453 0
Clickhouse在画像场景如何对人群分布情况进行N等分
|
5月前
|
存储 关系型数据库 数据库
【DDIA笔记】【ch2】 数据模型和查询语言 -- 多对一和多对多
【6月更文挑战第7天】该文探讨数据模型,比较了“多对一”和“多对多”关系。通过使用ID而不是纯文本(如region_id代替&quot;Greater Seattle Area&quot;),可以实现统一、避免歧义、简化修改、支持本地化及优化搜索。在数据库设计中,需权衡冗余和范式。文档型数据库适合一对多但处理多对多复杂,若无Join,需应用程序处理。关系型数据库则通过外键和JOIN处理这些关系。文章还提及文档模型与70年代层次模型的相似性,层次模型以树形结构限制了多对多关系处理。为克服层次模型局限,发展出了关系模型和网状模型。
59 6
|
5月前
|
XML NoSQL 数据库
【DDIA笔记】【ch2】 数据模型和查询语言 -- 概念 + 数据模型
【6月更文挑战第5天】本文探讨了数据模型的分析,关注点包括数据元素、关系及不同类型的模型(关系、文档、图)与Schema模式。查询语言的考量涉及与数据模型的关联及声明式与命令式编程。数据模型从应用开发者到硬件工程师的各抽象层次中起着简化复杂性的关键作用,理想模型应具备简洁直观和可组合性。
39 2
|
5月前
|
SQL 人工智能 关系型数据库
【DDIA笔记】【ch2】 数据模型和查询语言 -- 文档模型中Schema的灵活性
【6月更文挑战第8天】网状模型是层次模型的扩展,允许节点有多重父节点,但导航复杂,需要预知数据库结构。关系模型将数据组织为元组和关系,强调声明式查询,解耦查询语句与执行路径,简化了访问并通过查询优化器提高效率。文档型数据库适合树形结构数据,提供弱模式灵活性,但在Join支持和访问局部性上不如关系型。关系型数据库通过外键和Join处理多对多关系,适合高度关联数据。文档型数据库的模式灵活性体现在schema-on-read,写入时不校验,读取时解析,牺牲性能换取灵活性。适用于不同类型或结构变化的数据场景。
49 0