当前位置:首页 >IT科技类资讯 >多款OLAP数据库大比拼,谁更胜一筹? 正文

多款OLAP数据库大比拼,谁更胜一筹?

来源:益强资讯优选   作者:数据库   时间:2025-11-04 23:47:44

昨天在群里聊到多款OLAP数据库的多款性能对比,想到之前网上找到的数据一个benchmark, TPCH_Python_SQL_Engines.ipynb(出处已不可考),比拼 并且为了4月26日的更胜演讲,特意在4月24日跑了一遍,多款这个是数据2024年4月24日的对比结果。

图片

图片

从上面的比拼截图可以看到, 这里参加评比的更胜有:

• HyPer:HyPer 是一种高性能、混合事务和分析处理(HTAP)数据库,多款专为实时数据分析和事务处理而设计。数据

• DuckDB:DuckDB 是比拼一款轻量级的嵌入式分析数据库,专注于高效处理SQL查询和分析任务。更胜

• GlareDB:GlareDB 是多款一种新型数据库,专注于高性能和扩展性,数据以满足现代数据密集型应用的比拼需求。

• Databend(国产):Databend 是一款国产云原生数据仓库,支持弹性扩展和高效的数据分析。

• DataFusion:DataFusion 是 Apache Arrow 的一个子项目,云服务器提供商用于构建高性能的数据处理引擎和分布式 SQL 查询执行。

• CHDB:CHDB 是 ClickHouse 的嵌入式版本,适用于需要在进程内高效处理列存储数据的场景。

• Apache Spark:Apache Spark 是一个开源的分布式计算系统,支持大规模数据处理和并行计算。

本次还将加入

• Polars:Polars 是一个基于 Rust 的高性能 DataFrame 库,专为高效的数据处理和分析而设计。

本次测试结果

当时的chdb虽然垫底,但至少还可以跑通

昨天又使用最新版本作了对比, 这次chdb卡在了Query08和Query09上, 为了确认Query09很耗时,我在我的笔记本(mac M2Max 32GB内存)上做了测试,耗时158s多。

图片

• chdb的结果是query08、query09 卡死,放弃后继续后面的查询。08 和09 的结果比这里看到的数据还要糟糕

• 因为Polars对SQL的免费信息发布网支持有限, Polars 根据官方的TPCH[1]做的修改, 另外Query 17的结果是错误的,问题放在后面描述。

• 对比4月份,性能都下降了,难道是Google Colab缩水了?

图片

图片

去掉垫底的chdb和pyspark

为了方便比较,去掉了两个垫底的:chdb和pyspark

图片

图片

Polars的奇怪bug

复制import pandas as pd import duckdb import polars as pl duckdb.sql("select x, y::decimal(15,2) y from df").to_parquet(decimal.pq) decimal = pl.scan_parquet(decimal.pq)1.2.3.4.5.6.

• 结果错误

复制pl.sql(""" select x, avg(y) as avg_y from decimal group by 1 """).collect()1.2.3.4.5.6.

图片

• 这样OK

复制# 结果正确 pl.sql(""" select x, sum(y) as sum_y from decimal group by 1 """).collect()1.2.3.4.5.6.7.

图片

• 这样也可以

复制pl.sql(""" select x, sum(y)/count(*) as avg_y from decimal group by 1 """).collect()1.2.3.4.5.6.

查找手册的时候发现。

图片

好吧, 该类型仍不稳定。

优雅的代码

你觉得这样写优雅。

复制import pandas as pd duck_import = pd.read_csv(./result/duckdb.csv) hyper = pd.read_csv(./result/hyper.csv) databend = pd.read_csv(./result/databend.csv) datafusion = pd.read_csv(./result/datafusion.csv) glaredb = pd.read_csv(./result/glaredb.csv) chdb = pd.read_csv(./result/chdb.csv) apachespark = pd.read_csv(./result/apachespark.csv) polars = pd.read_csv(./result/polars.csv) concat = duckdb.sql(select duck_import.query as query, duck_import.dur as DuckDB , hyper.dur as hyper , databend.dur as databend , datafusion.dur as datafusion, glaredb.dur as glaredb,chdb.dur as chdb, apachespark.dur as apachespark,ploars.dur as polars from duck_import left join hyper on duck_import.query=hyper.query left join databend on duck_import.query=databend.query left join datafusion on duck_import.query=datafusion.query left join glaredb on duck_import.query=glaredb.query left join chdb on duck_import.query=chdb.query left join apachespark on duck_import.query=apachespark.query left join polars on duck_import.query=polars.query ).df() concat1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.17.18.19.20.21.22.23.24.25.26.27.28.29.30.31.32.

还是这样写优雅。

复制import duckdb concat = duckdb.sql(""" WITH aa AS ( SELECT * FROM read_csv(result/*.csv, filename=true) ), bb AS ( SELECT * EXCLUDE (filename), REPLACE(REPLACE(filename, .csv, ), result/, ) AS engine FROM aa ) PIVOT bb ON engine USING max(dur) ORDER BY query; """).df() concat1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.17.18.

以上两段代码结果一样。

图片

结论

从上面的粗浅测试来看, 开源的DuckDB和Databend非常值得关注, Polars对SQL支持有限,对Decimal支持有限,入坑请慎重。

Google Colab 到底是企商汇不是缩水了?如何验证?

标签:

责任编辑:IT科技