ByConity与主流开源OLAP引擎(Clickhouse、Doris、Presto)性能对比分析

news2024/12/23 0:46:43

引言:

随着数据量和数据复杂性的不断增加,越来越多的企业开始使用OLAP(联机分析处理)引擎来处理大规模数据并提供即时分析结果。在选择OLAP引擎时,性能是一个非常重要的因素。

因此,本文将使用TPC-DS基准测试的99个查询语句来对比开源的ClickHouse、Doris、Presto以及ByConity这4个OLAP引擎的性能表现,以便为企业选择合适的OLAP引擎提供参考。

TPC-DS基准测试简介

TPC-DS(Transaction Processing Performance Council Decision Support Benchmark)是一个面向决策支持系统(Decision Support System,简称DSS)的基准测试,该工具是由TPC组织开发,它模拟了多维分析和决策支持场景,并提供了99个查询语句,用于评估数据库系统在复杂的多维分析场景下的性能。每个查询都设计用于模拟复杂的决策支持场景,包括跨多个表的连接、聚合和分组、子查询等高级SQL技术。

OLAP引擎介绍

ClickHouse、Doris、Presto和ByConity都是当前比较流行的开源OLAP引擎,它们都具有高性能和可扩展性的特点。

  • ClickHouse是由俄罗斯搜索引擎公司Yandex开发的一个列式数据库管理系统,它专注于大规模数据的快速查询和分析。

  • Doris是一个分布式列式存储和分析系统,它支持实时查询和分析,并可以与Hadoop、Spark和Flink等大数据技术进行集成。

  • Presto是一个分布式SQL查询引擎,它由Facebook开发,可以在大规模数据集上进行快速查询和分析。

  • ByConity是由字节开源的云原生数仓,采用了存储计算分离的架构,实现租户资源隔离、弹性扩缩容,并具有数据读写的强一致性等特性,它支持主流的OLAP引擎优化技术,读写性能非常优异。

本文将使用这四个OLAP引擎对TPC-DS基准测试的99个查询语句进行性能测试,并对比它们在不同类型的查询中的性能差异。

测试环境和方法:

 ClickhouseDorisPrestoByConity
环境配置Memory: 256GB
Disk: ATA, 7200rpm, partitioned:gpt
System: Linux 4.14.81.bm.30-amd64 x86_64, Debian GNU/Linux 9
测试数据量使用1TB的数据表,相当于28亿行数据量级
软件包版本23.4.1.19431.2.4.10.28.00.1.0-GA
版本发布时间2023/4/262023/4/272023/3/162023/3/15
节点数5个Worker5个BE,1个FE5个Worker,1个Coordinator5个Worker,1个Server
其他配置distributed_product_mode = 'global',
partial_merge_join_optimizations = 1
bucket配置:维表1,
returns表10-20,
sales表100-200
Hive Catalog,
ORC format,
Xmx200GB
enable_optimizer=1,
dialect_type='ANSI'

服务器配置:

Architecture:          x86_64
CPU op-mode(s):        32-bit, 64-bit
Byte Order:            Little Endian
CPU(s):                48
On-line CPU(s) list:   0-47
Thread(s) per core:    2
Core(s) per socket:    12
Socket(s):             2
NUMA node(s):          2
Vendor ID:             GenuineIntel
CPU family:            6
Model:                 79
Model name:            Intel(R) Xeon(R) CPU E5-2650 v4 @ 2.20GHz
Stepping:              1
CPU MHz:               2494.435
CPU max MHz:           2900.0000
CPU min MHz:           1200.0000
BogoMIPS:              4389.83
Virtualization:        VT-x
L1d cache:             32K
L1i cache:             32K
L2 cache:              256K
L3 cache:              30720K
NUMA node0 CPU(s):     0-11,24-35
NUMA node1 CPU(s):     12-23,36-47

测试方法:

  • 使用TPC-DS基准测试的99个查询语句,和1TB(28亿行)的数据测试4个OLAP引擎的性能。

  • 在每个引擎中使用相同的测试数据集,并保持相同的配置和硬件环境。

  • 对于每个查询,多次执行并取平均值,以减少测量误差,设置每次查询超时时间为500秒。

  • 记录查询执行的细节,例如查询执行计划、I/O和CPU使用情况等。

性能测试结果

我们使用了相同的数据集和硬件环境来测试这四个OLAP引擎的性能。

测试数据集大小为1TB,硬件和软件环境如上介绍,我们使用了TPC-DS基准测试中的99个查询语句分别在四个OLAP引擎上进行了连续三次的测试,并取三次平均结果。

  • 其中ByConity跑通了所有99个查询测试。
  • Doris在SQL15出现Crash,另外有4次的Timeout,分别是SQL54、SQL67、SQL78和SQL95。
  • Presto只在SQL67和SQL72发生Timeout,其他查询测试都跑通了。
  • Clickhouse只跑通了50%的查询语句,大概有一部分是Timeout,另一部分是系统报错,分析原因是Clickhouse不能有效的支持多表关联查询导致,只能把这类SQL语句做手动改写拆分才能执行。

因此在对比总耗时我们暂时排除Clickhouse,其他三个OLAP引擎TPC-DS测试总耗时如下图1所示,从图1 中我们可以看出开源的ByConity查询性能明显优于其他引擎,性能约是其他的3-4倍。(注:以下所有图表纵坐标单位为秒)

图1 TPC-DS 99条查询总耗时

针对TPC-DS基准测试的99个查询语句,我们接下来按照查询场景的不同进行分类,例如基础查询、连接查询、聚合查询、子查询、窗口函数查询等。

下面我们将使用这些分类方式来对ClickHouse、Doris、Presto和ByConity四个OLAP引擎进行性能分析对比:

基础查询场景下

该场景包含简单的查询操作,例如从单个表中查询数据,过滤和排序结果等。基础查询的性能测试主要关注处理单个查询的能力。

其中ByConity的表现最佳,Presto和Doris的性能也表现都不错,这是因为基础查询通常只涉及到少量的数据表和字段,因此能够充分利用Presto和Doris的分布式查询特性和内存计算能力,Clickhouse对多表关联支持不好,出现一些跑不通的现象,其中SQL5、8、11、13、14、17、18均超时,我们按Timeout=500秒计算,但希望显示更清晰截取Timeout=350秒。

下图2 是基础查询场景下四个引擎的平均查询时间:

图2 TPC-DS 基础查询的性能对比

连接查询场景

连接查询是常见的多表查询场景,它通常使用JOIN语句连接多个表,并根据指定条件进行数据检索。

如图3 我们看到ByConity的性能最佳,主要得益于对查询优化器的优化,引入了基于代价的优化能力(CBO),在多表Join时候进行re-order的等优化操作。其次是Presto和Doris,Clickhouse在多表Join的效果相比其他三个性能不是很好,且对很多复杂语句的支持不够好。

图3 TPC-DS连接查询的性能对比

聚合查询场景

聚合查询是对数据进行统计计算的场景,例如测试SUM、AVG、COUNT等聚合函数的使用。

ByConity依然表现优异,其次是Doris和Presto,Clickhouse出现了四次Timeout,为了方便看出差异,我们截取Timeout值到250秒。

图4 TPC-DS聚合查询的性能对比

子查询场景

子查询是在SQL语句中嵌套使用的查询场景,它通常作为主查询的条件或限制条件。

如下图5所示,ByConity表现最佳,原因是ByConity实现了基于规则的优化能力(RBO)进行查询优化,通过算子下推、列裁剪和分区裁剪等技术,把复杂的嵌套查询进行整体优化,替除所有的子查询,把常见算子转化成Join+Agg的形式。

其次是Doris和Presto表现相对较好,但Presto在SQL68和SQL73出现Timeout,Doris也在3个SQL查询出现Timeout,Clickhouse同样出现了部分超时和系统报错,原因上面有提到。同样为方便看出差异,我们截取Timeout值等于250秒。

图5 TPC-DS子查询的性能对比

窗口函数查询场景

窗口函数查询是一种高级的SQL查询场景,它可以在查询结果中进行排名、分组、排序等操作。

如下图6所示,ByConity的性能最优,其次是Presto,Doris出现了一次Timeout的情况,Clickhouse依然有部分没有跑通TPC-DS测试。

图6 TPC-DS窗口函数查询的性能对比

总结

本文对ClickHouse、Doris、Presto和ByConity四个OLAP引擎在TPC-DS基准测试的99个查询语句下的性能进行了分析和比较。我们发现,在不同的查询场景下,四个引擎的性能表现存在差异。

  • ByConity在所有TPC-DS的99个查询场景下都表现优异,超过其他三个OLAP引擎;
  • Presto和Doris在连接查询、聚合查询和窗口函数查询场景下表现较好;
  • 由于Clickhouse的设计和实现并不是专门针对关联查询进行优化,因此在多表关联查询方面整体表现差强人意。

需要注意的是,性能测试结果取决于多个因素,包括数据结构、查询类型、数据模型等。在实际应用中,需要综合考虑各种因素,以选择最适合自己的OLAP引擎。

在选择OLAP引擎时,还需要考虑其他因素,如可扩展性、易用性、稳定性等。在实际应用中,需要根据具体业务需求进行选择,并对引擎进行合理的配置和优化,以获得最佳的性能表现。

总之,ClickHouse、Doris、Presto、ByConity都是非常优秀的OLAP引擎,具有不同的优点和适用场景。在实际应用中,需要根据具体业务需求进行选择,并进行合理的配置和优化,以获得最佳的性能表现。同时,需要注意选择具有代表性的查询场景和数据集,并针对不同的查询场景进行测试和分析,以便更全面地评估引擎的性能。,以便更全面地评估引擎的性能。


欲了解更多可浏览墨天轮社区,围绕数据人的学习成长提供一站式的全面服务,打造集新闻资讯、在线问答、活动直播、在线课程、文档阅览、资源下载、知识分享及在线运维为一体的统一平台,持续促进数据领域的知识传播和技术创新。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/588781.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

排序算法、HashMap原理以及单例模式

文章目录 1、二分查找2、冒泡排序3、选择排序4、插入排序5、希尔排序6、快速排序(面试写这个)7、ArrayList8、Iterator9、LinkedList10、HashMap10.1、基本数据结构底层数据结构,1.7和1.8有什么不同? 10.2、树化与退化为何要用红黑…

【LINUX】进程间信号

文章目录 前言铺垫信号 信号的产生1、终端按钮产生信号2、调用系统函数向进程发送信号3、软件条件产生信号4、硬件异常产生信号 信号的保存补充:位图数据结构信号的处理结语 前言 铺垫 1、日常中我们能经常感受到信号的存在:红灯停绿灯行、三更鸡鸣、妈…

60.网络训练中的超参调整策略—学习率调整2

4、inverse_time_decay inverse_time_decay(learning_rate, global_step, decay_steps, decay_rate,staircase=False, name=None)逆时衰减,这种方式和指数型类似。如图, 5、cosine_decay cosine_decay(learning_rate, global_step

K8s in Action 阅读笔记——【7】ConfigMaps and Secrets: configuring applications

K8s in Action 阅读笔记——【7】ConfigMaps and Secrets: configuring applications 7.1 Configuring containerized applications 在我们讨论如何将配置数据传递给在Kubernetes中运行的应用程序之前,让我们先看看通常如何配置容器化应用程序。 如果忽略了你可以…

002. java.lang.NumberFormatException: Infinite or NaN,怎么破?

你好,我是YourBatman:当我老了,也写代码;不为别的,只为爱好。 📚前言 如果你工作超5年,100%遇到过这个异常:java.lang.NumberFormatException: Infinite or NaN Infinite中文释义…

使用MockJS进行前端开发中的数据模拟

在前端开发中,有时我们需要在没有后端接口的情况下进行前端页面的开发和测试。这时,我们可以使用MockJS来模拟数据,以便进行开发和调试。MockJS是一个用于生成随机数据和拦截Ajax请求的JavaScript库,它能够帮助我们快速搭建起一个…

InVEST模型

学习目标: 1)采用InVEST模型,掌握产水(包括水源涵养)、碳存储(包括固碳)、土壤保持、水质(氮磷)、生境质量和热岛缓解等生态系统服务评估方法,开展人类活动影响、重大工…

MATLAB EXPO 2023会议记录|基于STM32的MATLAB电机控制方案

算法导出工作流视频:(99 封私信 / 82 条消息) Simulink 算法导出工作流 —— stm32电机控制示例(v2) - 知乎 (zhihu.com) Algorithm-Export Workflows for Custom Hardware 示例: Algorithm-Export Workflows for Custom Hardware - MATLAB & Simuli…

JavaScript拖拽API,ondragstart、ondragover、ondragenter、ondrop,使用详细(JavaScript常用原生拖拽API)

简述:JavaScript的拖拽api相必大家都不陌生,今天来分享下元素在拖动时触发的事件,顺便做下记录。 一、ondragstart事件 ondragstart事件在拖动元素时触发,通常用于设置拖动时的数据类型和数据。可以通过event.dataTransfer.setDa…

开发环境搭建-stm32CubeIDE进行标准库开发

stm32CubeIDE介绍 https://www.stmcu.com.cn/ecosystem/Cube/STM32CubeIDE stm32CubeIDE下载 点击上面的链接,登录即可下载。 搭建demo工程 新建工作空间 创建一个工程 选择芯片-STM32F103C8T6 点击“Next” 点击“Finish ” 添加标准库到项目工程文件目录下 配…

SM国密算法(二)-- OpenSSL库中分离算法

一、OpenSSL简介: OpenSSL 是用于传输层安全性 (TLS) 和安全套接字层 (SSL) 协议的一个强大、商业级和功能齐全的工具包。它也是一个通用的密码学库,包含有RSA、SM4、DES、AES等诸多加密算法。 OpenSSL GitHub地址 二、移植过程 1. 文件目录 下载在…

除蚂蚁文件数据恢复大师之外,还有哪些相似的软件?

数据丢失是一件常见的事情,许多人都会遇到这样的问题。为了解决这个问题,出现了许多数据恢复软件,其中包含蚂蚁文件数据恢复大师。但是,除了蚂蚁文件数据恢复大师之外,还有哪些类似的软件呢?本文为您整理了…

笔试强训总结3

作者:爱塔居 专栏:笔试强训 作者简介:大三学生,希望能同大家一起进步! 1.以下代码运行输出的是 public class Person{ private String name "Person"; int age0; } public class Child extends Person{ p…

selenium clear()无效的解决办法

做自动化时,在往输入框中send_keys前往往需要先清空一下这个输入框里的内容,避免输入框原本有内容或默认值,导致最终输入的结果不是预期的内容。 清空内容我们一般会用clear()方法 import time from selenium import webdriverdriver webd…

如何使用Python操作Excel文件?看这篇博客就够了!

前言 如何使用Python操作Excel文件?看这篇博客就够了! 在工作中,我们经常需要处理和分析数据。而Excel作为一种广泛使用的数据分析工具,被很多人所熟知。但是,对于一些非技术背景的用户来说,如何操作Exce…

自学网络安全,一般人我劝你还是算了吧

学前感言: 我为什么会这样说,要一般人自学网络安全就算了,因为我不是一般人 1.这是一条坚持的道路,三分钟的热情可以放弃往下看了. 2.多练多想,不要离开了教程什么都不会了.最好看完教程自己独立完成技术方面的开发 .3.有时多 google,baidu,我们往往…

自学网络安全(黑客)?一般人我劝你还是算了吧!

一、自学网络安全学习的误区和陷阱 1.不要试图以编程为基础的学习开始学习 我在之前的回答中,我都一再强调不要以编程为基础再开始学习网络安全,一般来说,学习编程不但学习周期长,而且实际向安全过渡后可用到的关键知识并不多 …

IMX6ULL裸机篇之IIC协议

一. IIC实验简介 I2C 是最常用的通信接口,众多的传感器都会提供 I2C 接口来和主控相连。 比如摄像头、 加速度计、触摸屏等。 I.MX6U-ALPHA开发板 使用 I2C1 接口连接了一个距离传感器 AP3216C ,本章我们就来学习如何使用 I.MX6U 的 I2C 接口…

“开启科技之门,每日工作充满力量” —— 全国科技者工作日

作者主页:爱笑的男孩。的博客_CSDN博客-深度学习,活动,python领域博主爱笑的男孩。擅长深度学习,活动,python,等方面的知识,爱笑的男孩。关注算法,python,计算机视觉,图像处理,深度学习,pytorch,神经网络,opencv领域.https://blog.csdn.net/Code_and516?typeblog个…

科技创新—人工智能应用技术的出现

科技创新—人工智能应用技术的出现 人工智能(Artificial Intelligence,AI)研究目的是通过探索智慧的实质,扩展人类智能——促使智能主体会听(语音识别、机器翻译等)、会看(图像识别、文字识别等…