【数据库评测】Cloudwave 4.0 集群版(4节点) VS Starrocks 3.0 集群版(4节点)

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS PostgreSQL,集群系列 2核4GB
简介: 【数据库评测】Cloudwave 4.0 集群版(4节点) VS Starrocks 3.0 集群版(4节点)

一、评测结果



评测结论1:4台64核256g阿里云服务器组成的4节点集群,hadoop3.2.2 作为分布式存储,Cloudwave4.0在 SSB1000g 国际标准测试集下,整体性能优于Starrocks3.0近0.36倍。

评测结论2:在多表联合join场景下,Cloudwave4.0版本,耗时几乎等于零


[附]13条标准测试SQL测试结果表:

数据库 数据集 响应时间(s) CPU 最大占用率 存储压缩比 数据导入时间
Cloudwave4.0 ssb1000 7.602 90%(5763%/6400%) 59%(360g/606g) 58分钟
Starrocks3.0 ssb1000 10.397 66.6%(4266%/6400%) 169%(1024g/606g) 112分钟

[附]2条拓展测试SQL测试结果表

数据库 数据集 拓展SQL1响应时间(s) 拓展SQL1 CPU 最大占用率 拓展SQL2响应时间(s) 拓展SQL2 CPU 最大占用率
Cloudwave4.0 ssb1000 0.012 0.0935%(6%/6400%) 0.014 0.118%(7.6%/6400%)
Starrocks3.0 ssb1000 2.79 78.7%(5037%/6400%) 4.8 90.5%(5797%/6400%)



二、评测环境


  • 硬件环境:4台 64核256g 云服务器(组成2节点的集群),essd pl1 高效云盘
  • 软件环境:jdk19(Cloudwave4.0官方推荐版本,官方基于jdk19版本里头的的vector api,实现全面向量化引擎)、jdk8(starrocks安装推荐jdk版本,主要用于fe,亦可少踩坑)、mysql8(作为starrocks的客户端)、hadoop 3.2.2(作为cloudwave 和 starrocks 共同的分布式存储,副本数=2)
  • 软件版本:Cloudwave 4.0(最新版在2023年5月份发版),Starrocks 3.0(最新版在2023年4月份发版)
  • 评测数据集:ssb1000
表名 行数 说明
lineorder 60 亿 SSB 商品订单表
customer 3000 万 SSB 客户表
part 200 万 SSB 零部件表
supplier 200 万 SSB 供应商表
dates 2556 日期表


26608654-7488fec35bcce2f4.png



硬件环境

jdk版本



mysql版本

hadoop版本



Starrocks版本

Starrocks版本



三、评测方法


  • 执行19轮测试脚本,每轮执行13条标准测试sql,去除第1轮的测试数据(由于IO原因,第1次查询两边的性能均受IO影响,本测试主要测数据库引擎的算法在同等计算资源的条件下的优劣,因此去除第一轮测试数据),将余下的18轮测试数据做平均,获得每条sql的平均耗时;
  • 观察最大CPU占用
  • 观察存储压缩比
  • 观察数据加载时间

多表联合join测试

  • 测试方法:执行19轮SQL测试脚本,每轮执行1条多表联合join拓展测试sql,去除第1轮的测试数据(由于IO原因,第1次查询两边的性能均受IO影响,本测试主要测数据库引擎的算法在同等计算资源的条件下的优劣,因此去除第一轮测试数据),将余下的18轮测试数据做平均,获得sql的平均耗时
  • 观察最大CPU占用
  • 统计耗时
  • 多表联合join拓展测试SQL1:select count(*) from lineorder,customer where lo_custkey = c_custkey;
  • 多表联合join拓展测试SQL2:select count(*) from lineorder,customer,supplier where lo_custkey = c_custkey and lo_suppkey = s_suppkey;




四、开始测试[cloudwave]


  1. 查看为hadoop准备的存储空间


./sync_scripts.sh 'df -h' | grep home


  1. 格式化hadoop


hdfs namenode -format


  1. 启动hdfs,并查看服务状态


start-dfs.sh 
./sync_scripts.sh 'jps'


  1. 创建ssb1000数据上传目录

    26608654-85f9ee70f1d59fe7.png
hdfs dfs -mkdir /cloudwave
hdfs dfs -mkdir /cloudwave/uploads
hdfs dfs -put ssb1000 /cloudwave/uploads/


  1. 检查数据上传结果


  • 可以看到ssb1000的数据,占用606GB的存储空间
hdfs dfs -du -h /
du -sh /home/cloudwave/ssb-poc-0.9.3/ssb-poc/output/data_dir/ssb1000



启动cloudwave数据库,并导入ssb1000数据



  • 启动数据库
./start-all-server.sh


26608654-8775e271b5991b4a.png


  • 导入数据
./cplus_go.bin -s 'loaddata ssb1000'


26608654-1894080203ee7175.png


  • 可以看到3493秒导入完成,也就是58分钟。

26608654-c8fb7cfb758d193f.png

  • 上图通过hdfs命令,可以看到cloudwave做了数据压缩,ssb1000数据的原始大小是606G,导入cloudwave数据库之后,压缩到了360g(图中的720G 表示hdfs两个数据副本的总大小),压缩比为59%。
  1. [cloudwave]开始测试13条标准测试SQL


image.png



  • 执行测试脚本./test_ssb.sh,七镜观察到cloudwave 的4节点集群测ssb1000 CPU最大占用是90%(5763%/6400%)


  • 执行分析脚本./analysis.sh cloudwave "$(ls n*txt)" +,可以看到13条标准测试SQL的合计时间平均是7.6s
  1. [cloudwave] 开始测试2条多表联合joinSQL




  • 执行测试脚本 ./test_ex.sh,七镜观察到cloudwave的4节点集群测ssb1000 的拓展SQL1的CPU最大占用是0.0935%(6%/6400%)

26608654-259aba0b4519ac46.png

  • 执行分析脚本./analysis.sh cloudwave "$(ls n*txt)" +,可以看到拓展SQL1耗时是12ms。


  • 执行分析脚本./analysis.sh cloudwave "$(ls n*txt)" +,可以看到拓展SQL1耗时是12ms。



  • 将sql_ex.sql里的sql换成拓展SQL2,执行测试脚本 ./test_ex.sh,七镜观察到cloudwave的4节点集群测ssb1000 的拓展SQL2的CPU最大占用是0.118%(7.6%/6400%)


26608654-b123f9f3a73987ba.png


  • 执行分析脚本./analysis.sh cloudwave "$(ls n*txt)" +,可以看到拓展SQL2耗时是14ms。




五、对比测试


  1. 清空hdfs



[starrocks] 启动 starrocks3.0 fe



./fe/bin/start_fe.sh --daemon
  1. [starrocks] 添加starrocks3.0 be


26608654-24670f883dfd4b95.png


mysql -uroot -h127.0.0.1 -P9030
ALTER SYSTEM ADD BACKEND "172.17.161.33:9050"; 
ALTER SYSTEM ADD BACKEND "172.17.161.32:9050"; 
ALTER SYSTEM ADD BACKEND "172.17.161.31:9050"; 
ALTER SYSTEM ADD BACKEND "172.17.161.30:9050"; 


[starrocks] 启动 starrocks 3.0 be



./sync_scripts.sh "cd $(pwd)/be/bin && ./start_be.sh --daemon &&ps -ef | grep starrocks_be"
  1. [starrocks] 验证集群状态,4个节点的 Alive=true 即可。


26608654-01805cbfd954e93e.png


26608654-c0010ec7010f75ba.png


  1. [starrocks] 创建表


  2. [starrocks] 开始导入数据,ssb1000导入时间是

26608654-57cc69edc9c38ad7.png


  • 如上图所示,8点58分开始执行的导入命令。
date && ./bin/stream_load.sh data_dir/ssb30 && date

26608654-0170a6c9927bf88f.png


  • 如上图所示,导入过程中,发现在我设置的hdfs副本数默认=2的配置下,starrocks自己把自己建的文件副本数改成了3。


  • 如上图所示,10点50分导入结束,总计耗时112分钟。

26608654-e132b07f06de640c.png

  1. [starrocks] 查看ssb1000 压缩比,ssb1000数据的原始大小是606G,导入starrocks数据库之后,神奇的发现,占用了1T的分布式存储(压缩呢???)。


26608654-ab8dfd53d2a45a79.png


  1. [starrocks] 开始测试
  • 执行测试脚本./test_ssb.sh,七镜观察到 starrocks 的4节点集群测ssb1000 CPU最大占用是4266%/6400%

26608654-6a28df0be03dee20.png



  1. [starrocks]分析测试结果
  • 执行分析脚本./analysis.sh starrocks "$(ls n*txt)" +,去掉第一轮查询(42.57s)的平均时间是10.39秒

26608654-7ddf625226436171.png


[starrocks] 开始测试2条多表联合joinSQL



  • 执行测试脚本 ./test_ex.sh,七镜观察到starrocks的4节点集群测ssb1000 的拓展SQL1的CPU最大占用是78.7%(5037%/6400%)


  • 执行分析脚本./analysis.sh starrocks "$(ls n*txt)" +,可以看到拓展SQL1耗时是2.79s。


  • 将sql_ex.sql里的sql换成拓展SQL2,执行测试脚本 ./test_ex.sh,七镜观察到starrocks的4节点集群测ssb1000 的拓展SQL2的CPU最大占用是90.5%(5797%/6400%)

26608654-413fbb23f04a416f.png

  • 执行分析脚本./analysis.sh starrocks "$(ls n*txt)" +,可以看到拓展SQL2耗时是4.8s。




五、附加


  1. Cloudwave 测试脚本


#!/bin/bash
# Program:
#       test ssb
# History:
# 2023/03/17    junfenghe.cloud@qq.com  version:0.0.1
rm -rf ./n*txt
for ((i=1; i<20; i++))
do
    cat sql_ssb.sql |./cplus.sh > n${i}.txt
done


Starrocks 测试脚本

#!/bin/bash
# Program:
#       test ssb
# History:
# 2023/03/17    junfenghe.cloud@qq.com  version:0.0.1
rm -rf ./n*txt
for ((i=1; i<20; i++))
do
    cat sql_ssb.sql | mysql -uroot -P 9030 -h 127.0.0.1 -v -vv -vvv >n${i}.txt
done


分析脚本

#!/bin/bash
#Program:
#       analysis cloudwave/starrocks logs of base compute
#History:
#2023/02/20     junfenghe.cloud@qq.com  version:0.0.1
path=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/sbin:/usr/local/bin:~/bin
export path
suff="(s)#####"
if [ -z "${1}" ]
then
        echo "Please input database'name"
        exit -1
fi
if [ -z "$2" ]
then
        echo "Please input times of scanner"
        exit -f
fi
if [ -n "${3}" ]
then
        suff=${3}
fi
for current in ${2}
do
        result_time=""
        if [ "${1}" == "starrocks" ]
        then
            for time in $( cat ${current} | grep sec  | awk -F '('  '{print $2}' | awk -F ' ' '{print $1}' )
            do
                result_time="${result_time}${time}${suff}"
            done
        elif [ "${1}" == "cloudwave" ]
        then
            for time in $( cat ${current} | grep Elapsed | awk '{print $2}'| sed 's/:/*60+/g'| sed 's/+00\*60//g ; s/+0\*60//g ; s/^0\*60+//g' )
            do
                result_time="${result_time}${time}${suff}"
            done
        fi
        echo ${result_time%${suff}*}
done
exit 0


sql_ssb.sql

use ssb1000;
select sum(lo_revenue) as revenue from lineorder,dates where lo_orderdate = d_datekey and d_year = 1993 and lo_discount between 1 and 3 and lo_quantity < 25;
select sum(lo_revenue) as revenue from lineorder,dates where lo_orderdate = d_datekey and d_yearmonthnum = 199401 and lo_discount between 4 and 6 and lo_quantity between 26 and 35;
select sum(lo_revenue) as revenue from lineorder,dates where lo_orderdate = d_datekey and d_weeknuminyear = 6 and d_year = 1994 and lo_discount between 5 and 7 and lo_quantity between 26 and 35;
select sum(lo_revenue) as lo_revenue, d_year, p_brand from lineorder ,dates,part,supplier where lo_orderdate = d_datekey and lo_partkey = p_partkey and lo_suppkey = s_suppkey and p_category = 'MFGR#12' and s_region = 'AMERICA' group by d_year, p_brand order by d_year, p_brand;
select sum(lo_revenue) as lo_revenue, d_year, p_brand from lineorder,dates,part,supplier where lo_orderdate = d_datekey and lo_partkey = p_partkey and lo_suppkey = s_suppkey and p_brand between 'MFGR#2221' and 'MFGR#2228' and s_region = 'ASIA' group by d_year, p_brand order by d_year, p_brand;
select sum(lo_revenue) as lo_revenue, d_year, p_brand from lineorder,dates,part,supplier where lo_orderdate = d_datekey and lo_partkey = p_partkey and lo_suppkey = s_suppkey and p_brand = 'MFGR#2239' and s_region = 'EUROPE' group by d_year, p_brand order by d_year, p_brand;
select c_nation, s_nation, d_year, sum(lo_revenue) as lo_revenue from lineorder,dates,customer,supplier where lo_orderdate = d_datekey and lo_custkey = c_custkey and lo_suppkey = s_suppkey and c_region = 'ASIA' and s_region = 'ASIA'and d_year >= 1992 and d_year <= 1997 group by c_nation, s_nation, d_year order by d_year asc, lo_revenue desc;
select c_city, s_city, d_year, sum(lo_revenue) as lo_revenue from lineorder,dates,customer,supplier where lo_orderdate = d_datekey and lo_custkey = c_custkey and lo_suppkey = s_suppkey and  c_nation = 'UNITED STATES' and s_nation = 'UNITED STATES' and d_year >= 1992 and d_year <= 1997 group by c_city, s_city, d_year order by d_year asc, lo_revenue desc;
select c_city, s_city, d_year, sum(lo_revenue) as lo_revenue from lineorder,dates,customer,supplier where lo_orderdate = d_datekey and lo_custkey = c_custkey and lo_suppkey = s_suppkey and (c_city='UNITED KI1' or c_city='UNITED KI5') and (s_city='UNITED KI1' or s_city='UNITED KI5') and d_year >= 1992 and d_year <= 1997 group by c_city, s_city, d_year order by d_year asc, lo_revenue desc;
select c_city, s_city, d_year, sum(lo_revenue) as lo_revenue from lineorder,dates,customer,supplier where lo_orderdate = d_datekey and lo_custkey = c_custkey and lo_suppkey = s_suppkey and (c_city='UNITED KI1' or c_city='UNITED KI5') and (s_city='UNITED KI1' or s_city='UNITED KI5') and d_yearmonth  = 'Dec1997' group by c_city, s_city, d_year order by d_year asc, lo_revenue desc;
select d_year, c_nation, sum(lo_revenue) - sum(lo_supplycost) as profit from lineorder,dates,customer,supplier,part where lo_orderdate = d_datekey and lo_custkey = c_custkey and lo_suppkey = s_suppkey and lo_partkey = p_partkey and c_region = 'AMERICA' and s_region = 'AMERICA' and (p_mfgr = 'MFGR#1' or p_mfgr = 'MFGR#2') group by d_year, c_nation order by d_year, c_nation;
select d_year, s_nation, p_category, sum(lo_revenue) - sum(lo_supplycost) as profit from lineorder,dates,customer,supplier,part where lo_orderdate = d_datekey and lo_custkey = c_custkey and lo_suppkey = s_suppkey and lo_partkey = p_partkey and c_region = 'AMERICA'and s_region = 'AMERICA' and (d_year = 1997 or d_year = 1998) and (p_mfgr = 'MFGR#1' or p_mfgr = 'MFGR#2') group by d_year, s_nation, p_category order by d_year, s_nation, p_category;
select d_year, s_city, p_brand, sum(lo_revenue) - sum(lo_supplycost) as profit from lineorder,dates,customer,supplier,part where lo_orderdate = d_datekey and lo_custkey = c_custkey and lo_suppkey = s_suppkey and lo_partkey = p_partkey and c_region = 'AMERICA'and s_nation = 'UNITED STATES' and (d_year = 1997 or d_year = 1998) and p_category = 'MFGR#14' group by d_year, s_city, p_brand order by d_year, s_city, p_brand;
相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
17天前
|
缓存 物联网 数据库
InfluxDB vs TDengine :2025 年了,谁家用的数据库还不能高效读缓存?
在工业互联网和物联网的大数据应用场景中,实时数据的写入和查询性能至关重要。如何快速获取最新设备状态并实时处理数据,直接影响到业务的高效运转。本文将深入分析 TDengine 和 InfluxDB 在缓存机制上的差异,帮助读者更好地理解这两款主流时序数据库在性能优化方面的优劣。
45 1
|
26天前
|
存储 数据库
快速搭建南大通用GBase 8s数据库SSC共享存储集群
本文介绍如何GBase8s 数据库 在单机环境中快速部署SSC共享存储集群,涵盖准备工作、安装数据库、创建环境变量文件、准备数据存储目录、修改sqlhost、设置onconfig、搭建sds集群及集群检查等步骤,助你轻松完成集群功能验证。
|
24天前
|
Shell 数据库
GBase8a 数据库新集群第一次创建dblink
GBase8a 数据库新集群第一次创建dblink
|
24天前
|
SQL 数据库
GBase8a 数据库集群v953扩容案例问题分享
GBase8a 数据库集群v953扩容案例问题分享
|
26天前
|
存储 缓存 网络安全
南大通用GBase 8s 数据库 RHAC集群基本原理和搭建步骤
南大通用GBase 8s 数据库 RHAC集群基本原理和搭建步骤
|
27天前
|
存储 关系型数据库 数据库
【赵渝强老师】PostgreSQL的数据库集群
PostgreSQL的逻辑存储结构涵盖了数据库集群、数据库、表、索引、视图等对象,每个对象都有唯一的oid标识。数据库集群是由单个PostgreSQL实例管理的所有数据库集合,共享同一配置和资源。集群的数据存储在一个称为数据目录的单一目录中,可通过-D选项或PGDATA环境变量指定。
|
1月前
|
存储 关系型数据库 MySQL
MySQL vs. PostgreSQL:选择适合你的开源数据库
在众多开源数据库中,MySQL和PostgreSQL无疑是最受欢迎的两个。它们都有着强大的功能、广泛的社区支持和丰富的生态系统。然而,它们在设计理念、性能特点、功能特性等方面存在着显著的差异。本文将从这三个方面对MySQL和PostgreSQL进行比较,以帮助您选择更适合您需求的开源数据库。
167 4
|
3月前
|
存储 缓存 关系型数据库
阿里云数据库 SelectDB 多计算集群核心设计要点揭秘与场景应用
在云原生存算分离架构下,多计算集群的实现从技术方案上看似乎并不存在过多难题。但从产品的角度而言,具备成熟易用的多计算集群能力且能运用于用户实际业务场景中,还有较多核心要点需要深度设计
阿里云数据库 SelectDB 多计算集群核心设计要点揭秘与场景应用
|
13天前
|
关系型数据库 MySQL 数据库
Python处理数据库:MySQL与SQLite详解 | python小知识
本文详细介绍了如何使用Python操作MySQL和SQLite数据库,包括安装必要的库、连接数据库、执行增删改查等基本操作,适合初学者快速上手。
89 15
|
7天前
|
SQL 关系型数据库 MySQL
数据库数据恢复—Mysql数据库表记录丢失的数据恢复方案
Mysql数据库故障: Mysql数据库表记录丢失。 Mysql数据库故障表现: 1、Mysql数据库表中无任何数据或只有部分数据。 2、客户端无法查询到完整的信息。