Doris vs StarRocks实战:SSB压测全流程解析(附避坑指南)
当我们需要为数据仓库选型时,性能往往是决定性的砝码。Doris和StarRocks,这两个同源而生却又各自发展的MPP数据库,经常让技术决策者陷入“幸福的烦恼”。网上不乏各种基准测试报告,但数据背后的环境细节、操作流程和那些只有亲手操作才会遇到的“坑”,往往语焉不详。这篇文章,我想从一个实际执行者的角度,带你完整走一遍SSB(Star Schema Benchmark)压测的全过程。这不仅仅是一次性能对比,更是一次从零开始的实战演练,我会把每一步的操作、可能遇到的问题以及我的解决思路,毫无保留地分享出来。无论你是想为自己的项目做技术选型,还是单纯想深入了解这两个系统的性能特性,这篇手把手的指南都能让你避开我踩过的雷,直达核心。
1. 压测环境搭建与数据准备
压测的第一步,也是最容易出问题的一步,就是搭建一个干净、可控的测试环境。很多人直接拿生产环境的副本来测,结果引入了太多变量,导致数据没有可比性。我的建议是,务必使用独立的、硬件配置完全一致的集群来进行对比测试。
1.1 硬件与软件环境规划
为了确保公平,我为Doris和StarRocks分别准备了两个完全相同的物理集群。每个集群包含3个节点(1个FE,2个BE),节点配置如下:
| 组件 | 规格 | 说明 |
|---|---|---|
| CPU | 8核心 (Intel Xeon Gold 6248) | 确保算力一致,避免因CPU型号差异导致性能偏差。 |
| 内存 | 32 GB DDR4 | 内存容量对聚合、Join等操作影响显著,需充足。 |
| 存储 | 500 GB NVMe SSD | 使用高性能本地SSD,排除磁盘IO瓶颈。 |
| 操作系统 | CentOS 7.9 | 内核版本 3.10.0-1160.el7.x86_64。 |
| 网络 | 万兆内网互联 | 节点间网络延迟低于0.1ms,避免网络成为瓶颈。 |
注意:如果你使用云主机,请确保所有实例位于同一可用区、同一子网,并且实例类型(CPU型号、内存带宽、网络性能)完全相同。云盘性能也需保持一致,建议使用同等级别的ESSD云盘。
软件版本的选择同样关键。我选择了当时最新的稳定版本:
- Apache Doris: 2.0.5
- StarRocks: 3.2.3
这两个版本发布时间接近,功能集和优化方向具有可比性。安装过程两者都相对简单,通过官方文档的二进制包部署即可。这里有一个小技巧:在安装完成后,先别急着进行任何参数调优。第一轮测试,请使用默认配置。这能帮助我们了解系统的“开箱即用”性能,后续的调优才有基准可言。
1.2 SSB测试数据生成
SSB是学术界和工业界广泛使用的星型模型基准测试。我们将使用Doris社区提供的ssb-tools来生成数据。
首先,从GitHub获取工具包:
git clone https://github.com/apache/doris.git
cd doris/tools/ssb-tools
编译数据生成器:
./build-ssb-dbgen.sh
这个脚本会编译dbgen工具。如果遇到编译错误,通常是缺少依赖(如gcc, make),根据提示安装即可。
接下来,生成测试数据。-s参数指定缩放因子(Scale Factor),它决定了数据量的大小。-s 100意味着生成约100GB的原始文本数据。对于初次测试,我建议从-s 10或-s 20开始,速度更快。
# 生成约20GB的测试数据
./gen-ssb-data.sh -s 20
数据生成过程可能会持续几分钟到几十分钟,取决于你的磁盘性能和缩放因子。生成的数据会放在ssb-data/目录下,包含以下文件:
lineorder.tbl(事实表,数据量最大)customer.tblpart.tblsupplier.tbldate.tbl
第一个坑点:字符编码。dbgen生成的文本文件默认编码可能与数据库不匹配,导致后续导入乱码。一个稳妥的做法是,生成后检查一下文件格式,并统一转换为UTF-8:
file ssb-data/lineorder.tbl
# 如果显示非UTF-8,如ISO-8859
iconv -f ISO-8859-1 -t UTF-8 ssb-data/lineorder.tbl -o ssb-data/lineorder_utf8.tbl
mv ssb-data/lineorder_utf8.tbl ssb-data/lineorder.tbl
2. 数据导入与表结构设计
数据生成完毕,接下来就是创建表并导入数据。这一步,Doris和St

1729

被折叠的 条评论
为什么被折叠?



