实时分析应用程序的数据库基准测试
选择合适的分析数据库并非易事。市面上有很多数据库可供选择,每种数据库都针对不同的使用场景进行了优化。
有些数据库专为面向客户的应用程序中的实时分析而构建,这类应用对低延迟查询和高数据摄取性能要求极高。另一些数据库则专为内部商业智能和报表而设计,并针对大规模聚合和批量处理进行了优化。有些数据库是通用型的,既能处理事务也能处理分析,而另一些数据库则专门用于分析工作负载。
基准测试可以提供帮助——但前提是它们能够反映你的实际工作量。
ClickBench、TPC-H 和 TPC-DS 等多种基准测试工具用于评估数据库的分析性能。然而,它们并不能代表实时分析的性能。
为了填补这一空白,我们创建了 RTABench,这是一个新的基准测试,旨在帮助开发人员评估不同数据库在实时分析场景中的性能。
实时分析的关键模式包括:
-
多表连接:快速合并来自多个表的数据。
-
选择性过滤:快速查找最新、最具体的数据。
-
预聚合结果:使用预先计算的物化视图进行快速响应。
虽然数据非规范化可以加快查询速度,但它会增加管理复杂性并提高成本。实时应用程序更倾向于使用规范化的模式,并在查询时连接数据。
RTABench 简介
为了满足实时分析工作负载的需求,我们开发了 RTABench,这是一个旨在测试满足这些特定要求的数据库的基准测试工具。RTABench 专注于连接、过滤和预聚合等关键查询模式。
RTABench 的工作原理
RTABench 使用规范化表对订单跟踪系统进行建模,以模拟实时分析应用程序。它使用约 1.71 亿条订单记录,并使用 40 种不同的查询来评估数据库,包括基本计数、选择性过滤、多表连接和预聚合查询。
RTABench 将数据库分为以下几类:
-
通用数据库:例如 PostgreSQL 和 MySQL。
-
实时分析数据库:针对快速洞察进行了优化,通常是辅助数据库。
-
批量分析数据库:主要用于历史数据,不用于实时基准测试。
基准测试结果:我们学到了什么
RTABench 测试结果发布在 rtabench.com。虽然性能会因工作负载特征而异,但该基准测试揭示了一些有趣的见解:
-
通用数据库在 RTABench 上的性能优于 ClickBench。这符合预期——RTABench 使用的是类似于实际应用程序的规范化模式,而 ClickBench 基于针对批量分析优化的非规范化数据集。
-
TimescaleDB 在 RTABench 测试中比 ClickHouse 快 1.9 倍,尽管在 ClickBench 测试中慢了 6.8 倍。这可能是因为 TimescaleDB 针对实时分析应用进行了优化,这类应用通常依赖于规范化的模式和选择性聚合,而 ClickHouse 则在非规范化的列式分析和大规模聚合方面表现出色。
-
增量物化视图能够显著提升速度。与查询原始数据相比,它们的性能可提升数百倍甚至数千倍(从几秒缩短到几毫秒),充分展现了其在实时分析中的价值。然而,在测试的数据库中,只有 ClickHouse 和 TimescaleDB 支持增量物化视图。
-
ClickHouse在数据加载和存储效率方面处于领先地位。它的数据加载速度比排名第二的数据库快4.8倍,磁盘占用空间减少1.7倍。
-
PostgreSQL 曾是速度最快的通用数据库。作为开发者中最流行的数据库,它展现了自身的多功能性。启用索引后,其原始查询速度仅比 TimescaleDB 慢 4.1 倍——但它无法匹敌增量物化视图的性能,而 PostgreSQL 也并不支持增量物化视图。
点击这里查看完整结果。
我们鼓励大家为 RTABench 项目做出贡献!无论是添加新的数据库、改进现有查询,还是调整配置,我们都希望您能为代码库贡献力量。所有工具、数据集和结果都可以在 GitHub 上找到,最新版本在此处。
文章来源:https://dev.to/tigerdata/benchmarking-databases-for-real-time-analytics-applications-f2d
