【数据库评测】多表联合join零耗时——翰云数据库在国产龙芯硬件上的表现

简介: 【数据库评测】多表联合join零耗时——翰云数据库在国产龙芯硬件上的表现

一、评测结果


  • 64核256g内存的机器上,在ssb1000g数据集下,翰云数据库(cloudwave)在维度表与事实表之间做多表联合join时,查询耗时几乎为零,CPU占用几乎为零。

备注:

数据库 CPU 数据集 SQL1响应时间(ms) SQL2响应时间(ms) SQL1 CPU 最大占用率 SQL2 CPU 最大占用率
翰云数据库(cloudwave) 龙芯(loongson) ssb1000 32 41 0.31%(20%/6400%) 0.42%(27.4%/6400%)



二、评测环境


  • 硬件环境:4台 64核256g 龙芯服务器(组成4节点的集群),3.5TB nvme 固态硬盘
  • 软件环境
  1. 操作系统:Loongnix-Server Linux release 8.4.0


image.png

  1. 内核版本
  2. 各个服务器节点ssh互信任
  3. openjdk17(龙芯cpu支持的最高推荐jdk,支持 vector api)、hadoop 3.2.2(作为cloudwave 的分布式存储,副本数=3)



  • 软件版本:Cloudwave 4.0(最新版在2023年5月份发版)
  • 评测数据集:ssb1000
表名 行数 说明
lineorder 60 亿 SSB 商品订单表
customer 3000 万 SSB 客户表
part 200 万 SSB 零部件表
supplier 200 万 SSB 供应商表
dates 2556 日期表




三、评测SQL


  • 评测SQL1:select count(*) from lineorder,customer where lo_custkey = c_custkey;
  • 评测SQL2:select count(*) from lineorder,customer,supplier where lo_custkey = c_custkey and lo_suppkey = s_suppkey;


第1条SQL是将lineorder这张事实表与customer这张维度表join,加count()是迫使数据库必须把所有的记录都join上。


第2条SQL是将lineorder这张事实表与customer、supplier 这两张维度join,加count(
)同样是迫使数据库必须把所有的记录都join上。



三、评测方法


  • 执行100轮SQL1和SQL2的测试脚本,获得sql的平均耗时


  • 观察最大CPU占用




四、开始评测

  1. 启动并导入ssb1000数据 到cloudwave


image.png



2.执行SQL1测试


image.png




./test_join1.sh 
## 脚本内容见附录
  • 可以看到cloudwave CPU最大占用是20%
  1. 分析SQL结果


image.png

./query_result.sh 
  • 可以看到cloudwave SQL1的耗时0.032秒左右。(天呐!lineorder(数据量60亿),join customer(数据量3000万),竟然只需要0.032秒)
  1. 执行SQL2测试


image.png

./test_join2.sh 
## 脚本内容见附录
  • 可以看到CPU最大占用是27.4%
  1. 分析SQL结果


image.png


./query_result.sh
  • 可以看到cloudwave SQL2 的耗时也是0.041秒左右。(天呐!!!lineorder(数据量60亿),join  customer(数据量3000万),再join supplier(数据量200万)竟然也只需要0.041秒。简直像开了挂——官方说:我们对于事实表与维度表多表联合join的时间应该为零




[附录]


  1. test_join1.sh脚本


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


2.test_join2.sh脚本

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


  1. sql_join_1.sql文件内容
use ssb1000;
select count(*) from lineorder,customer where lo_custkey = c_custkey;


4.sql_join_2.sql文件内容

select count(*) from lineorder,customer,supplier where lo_custkey = c_custkey and lo_suppkey = s_suppkey;


5.query_result.sh脚本内容

#!/bin/bash
# Program:
#       list query time
# History:
# 2023/05/12    junfenghe.cloud@qq.com  version:0.0.1
path=/bin:/sbinz:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
export path
./analysis.sh cloudwave "$(ls n*txt)" + > query_time.txt
echo "desc history;" | ./cplus.sh > jobinfo.txt


6.analysis.sh脚本内容

#!/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
# echo $1
# echo $#
# echo $?
# echo $!
# echo $0


目录
相关文章
|
4月前
|
运维 数据库 数据库管理
云数据库问题之阿里云在运营商领域数据库替换的整体解决方案要如何实现
云数据库问题之阿里云在运营商领域数据库替换的整体解决方案要如何实现
|
4月前
|
Oracle 数据管理 关系型数据库
云数据库问题之云计算的普及化对中国数据库厂商的全球化发展有什么影响
云数据库问题之云计算的普及化对中国数据库厂商的全球化发展有什么影响
|
29天前
|
SQL 关系型数据库 数据库
国产数据实战之docker部署MyWebSQL数据库管理工具
【10月更文挑战第23天】国产数据实战之docker部署MyWebSQL数据库管理工具
96 4
国产数据实战之docker部署MyWebSQL数据库管理工具
|
2月前
|
运维 监控 安全
【YashanDB知识库】ycm托管数据库时报错OM host ip:127.0.0.1 is not support join to YCM
总之,解决“OM host ip: 127.0.0.1 is not supported to join to YCM”的关键在于理解集群管理对IP地址的使用要求,并据此做出相应的配置调整,确保集群的稳定性和数据一致性。
20 1
|
2月前
|
关系型数据库 数据挖掘 数据库
解析数据库联结:应用与实践中的 INNER JOIN、LEFT JOIN、RIGHT JOIN、FULL OUTER JOIN 与 CROSS JOIN
解析数据库联结:应用与实践中的 INNER JOIN、LEFT JOIN、RIGHT JOIN、FULL OUTER JOIN 与 CROSS JOIN
66 1
|
4月前
|
关系型数据库 分布式数据库 数据库
安全可靠的国产自研数据库PolarDB V2.0,让数据库开发像“搭积木”一样简单!
安全可靠的国产自研数据库PolarDB V2.0,让数据库开发像“搭积木”一样简单!
安全可靠的国产自研数据库PolarDB V2.0,让数据库开发像“搭积木”一样简单!
|
4月前
|
SQL 数据挖掘 数据库
数据库join类型有哪些?
【8月更文挑战第2天】
155 17
数据库join类型有哪些?
|
4月前
|
Cloud Native 关系型数据库 分布式数据库
国产数据库的发展趋势是什么?
【8月更文挑战第26天】国产数据库的发展趋势是什么?
106 15
|
4月前
|
关系型数据库 MySQL 分布式数据库
云原生数据库PolarDB MySQL版深度评测报告
作为一名开发人员,在日常工作中频繁与数据库打交道,对于数据库的性能、灵活性和易用性有着极高的要求。此次,我有幸对阿里云自主研发的云原生数据库PolarDB MySQL版进行了深入评测,旨在了解其是否能够满足现代应用的高性能、高可用性和弹性扩展需求。
90 4