引言:

随着数据量和数据复杂性的一直减少,越来越多的企业开始应用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个查问语句进行性能测试,并比照它们在不同类型的查问中的性能差别。

测试环境和办法:

服务器配置:

Architecture:          x86_64CPU op-mode(s):        32-bit, 64-bitByte Order:            Little EndianCPU(s):                48On-line CPU(s) list:   0-47Thread(s) per core:    2Core(s) per socket:    12Socket(s):             2NUMA node(s):          2Vendor ID:             GenuineIntelCPU family:            6Model:                 79Model name:            Intel(R) Xeon(R) CPU E5-2650 v4 @ 2.20GHzStepping:              1CPU MHz:               2494.435CPU max MHz:           2900.0000CPU min MHz:           1200.0000BogoMIPS:              4389.83Virtualization:        VT-xL1d cache:             32KL1i cache:             32KL2 cache:              256KL3 cache:              30720KNUMA node0 CPU(s):     0-11,24-35NUMA 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引擎,具备不同的长处和实用场景。在理论利用中,须要依据具体业务需要进行抉择,并进行正当的配置和优化,以获得最佳的性能体现。同时,须要留神抉择具备代表性的查问场景和数据集,并针对不同的查问场景进行测试和剖析,以便更全面地评估引擎的性能。,以便更全面地评估引擎的性能。


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