博客

TOP 性能,极速体验!Databend v1.0 前瞻

sundy-li3月 3, 2023

经历近两年的打磨,Databend 终于要发 1.0 版本了!我们深知从零开始构建数据库是一段非常艰辛的历程。从两年前的第一行代码到现在的 30 万行 Rust 代码,记录了 Databenders 小伙伴们的不懈付出。

许多人都非常关注我们是如何从零开始构建数据库的。相比于其他基于成熟底层技术栈的数据库产品,我们的性能表现如何?今天我们来基于最新版本来测试体验下 Databend 的优秀性能。

考虑到市场上已经有很多优秀的 OLAP 数据库,我们希望使用一个公开的标准来衡量 Databend 的性能,而不是自己建立测试标准。因此,我们选择了 ClickBench[1],这是由 ClickHouse 发起的分析型数据库性能测试排行榜,测试数据集为 hits,来自生产环境,使用 clickhouse-obfuscator 工具进行了混淆处理,覆盖了常见的多维报表查询,能够真实地反映各类数据库在生产环境下的性能比较。这个排行榜收录了 Snowflake、Doris、ClickHouse、MySQL、Greenplum、DuckDB 等 50 个主流数据库的测试结果。

评测方式是在特定的机型下,将近 70G 的原始数据导入到数据库中,并对比数据的导入时间。接着,对 43 个查询 SQL 进行测试,在每次执行 SQL 之前清空内存缓存,然后重复执行三次,并记录三次执行中耗时最短的一次。ClickBench 考察的是数据库在所有测试场景下的总体表现,因此会将所有数据库在所有场景的评分结果进行对比计算,得出总排名。

为了展现 Databend 的真实性能,我们没有针对测试场景进行特别优化:

  • 全部使用默认配置,不进行任何参数调优

  • 不对数据进行 特定字段分区导入,使用默认建表语句

  • 不对原始数据进行 Cache,也不对查询结果进行 Cache,只 Cache 元数据和索引

我们提交了最常见的三种机型的测试结果:

  • c6a.metal, 500gb gp2 (192core)

  • c6a.4xlarge, 500gb gp2 (16core)

  • c5.4xlarge, 500gb gp2 (16core)

1 导入性能,三个机型下均排行第一

特别是在 c6a.metal 机型上,我们的导入性能仅需要 70 秒。与其他数据库的性能表现相比,可以看到 Databend 的导入性能有巨大的优势。这主要得益于 Databend 在向量化并行导入下的极致优化,以及 pipeline 在计算和 io 之间的优秀调度能力。

此外,我们的底层 Storage Access 模块都基于 OpenDAL[2] ,它具有简洁的 API 设计,同时不失原生 API 的性能,覆盖了 s3、fs、memory、ftp、azblob、ipfs 等十多种后端存储。许多优秀的 Rust 项目,如 RisingWave、Greptimedb、Sscache 等,都采用了 OpenDAL 作为底层 IO 模块。目前,OpenDAL 即将进入 Apache 孵化器,旨在打造云原生的统一存储底座。

2 查询性能,三个机型下各居一二三

在 hot run 查询下,Databend 在 c6a.4xlarge 上表现出色,排名第一;在 c5.4xlarge 微弱劣势居第二,c6a.metal 居第三。

得益于 Databend 新的表达式系统设计[3],所有的算子都已经实现了向量化,并且我们所有的算子都有基于 Domain 值域推导能力。基于此,我们可以应用强大的常量折叠框架来做数据多级裁剪,尽可能略过不必要的数据块。此外,pipeline 的调度能力以及聚合算子的功能也再次加强,使得 CPU 和 IO 能够高效调度,从而发挥极致性能。

Databend 是面向对象存储而设计的新一代云原生数仓,并没有对本地 fs 场景做太多优化,在上面榜单中,前三的差距其实并不是很大。因此,在不太擅长的场景中,结合高性能的计算能力,Databend 也可以取得不错的优势。

由于 Databend 使用了默认配置,禁用了 DataCache,因此,在 cold run 场景下,对比意义不大。我们也可以对建表语句做一些针对性的优化(例如,按 UserID 分区导入,优化 Q17 等按 UserId 聚合场景),或者加入一些参数调优,这样性能估计还能再提升一个档次,但面向 Benchmark 调优并不是这次测试的主要意义,以用户为中心,在通用场景带给用户极致的性能、易用的产品体验才是我们的终极目标。

做 Benchmark 主要为了让我们有个衡量性能的方式,从而提升产品质量,ClickBench 测试非常具有代表意义,所以我们将 ClickBench 集成到了各个版本和 PR 的性能测试 CI 中[4],方便开发者观测性能回退和提升,优化产品开发。

3 更多

登顶 ClickBench 证明了 Databend 的导入查询性能已经取得非常优异的成绩,从零用 Rust 实现的数据库不一定比 C++ 慢,两年时间我们也可以做出别人十年的成就。 但这只是我们前进的一小步。性能并不能完全体现数据库的全部优点,但它始终是我们数据库内核开发者心中的一个目标。

在 v1.0 即将发布之际,希望有更多的开源爱好者加入 Databend 社区,和优秀的开发者一起协作,打造世界一流的数据库产品!让我们一起携手努力,为数据库技术的进步和发展贡献力量!

4 引用

[1]
 ClickBench: https://benchmark.clickhouse.com/

[2]
 OpenDAL: https://github.com/datafuselabs/opendal

[3]
 Databend 新的表达式系统设计: https://github.com/datafuselabs/databend/pull/9411

[4]
 PR 的性能测试 CI 中: https://repo.databend.com/benchmark/clickbench/release/index.html

Connect With Us

Databend 是一款开源、弹性、低成本,基于对象存储也可以做实时分析的新式数仓。期待您的关注,一起探索云原生数仓解决方案,打造新一代开源 Data Cloud。

分享本篇文章

订阅我们的新闻简报

及时了解功能发布、产品规划、支持服务和云服务的最新信息!