云原生数据库性能对比(阿里云、百度智能云、腾讯云)

本文作者 LYZ

近些年,云原生数据库成为云厂商的重要发展方向,阿里云、百度智能云、腾讯云均先后发布了自研的云原生数据库。笔者认为云原生数据库具有更高的性价比、更极致的弹性,可以满足业务发展的不同阶段和负载场景的需求,也是云数据库从托管开源数据库到原生化自研的必然发展。

笔者一直非常深度关注、调研和使用云数据库,其中性能是关注的重点之一。一方面性能是最终成本的重要影响因素,更好的性能,通常意味着使用更少的资源支撑更高的业务量,从而降低整体成本。另外,性能还意味着在极端场景下,数据库的上限支撑能力。所以,近期对各个云数据库厂商做了一个较为系统的性能对比,供开发者和企业在云数据库选型时的参考。

笔者在进行大量测试之后,对主要的云厂商分别选择了“主流规格”(适合生产环境配置的)进行了对比,综合性能结果是阿里云 PolarDB > 百度智能云 GaiaDB > 腾讯云 TDSQL-C,详细测试数据对比见下图:

(蓝色:百度智能云 GaiaDB 红色:腾讯云 TDSQL-C 绿色:阿里云 PolarDB)

 

 

测试方案

测试环境

厂商
虚机客户端
云原生数据库信息

阿里-PolarDB

  • 地域/可用区:华北2(北京)

  • 客户端:32核64GB

  • 实例镜像:CentOS 8.2 64位

  • 网络:云服务器 ECS 和云原生数据库集群在同一私有网络(VPC)

  • 内核版本:mysql8.0.2

  • 实例类型:独享型

  • 实例规格:2C8G、4C16G、8C32G、8C64G、16C128G、32C256G

  • 节点个数:一主一只读

腾讯-TDSQL-C

  • 地域/可用区:北京

  • 客户端:32核64GB

  • 客户端操作系统:CentOS 8.2 64位

  • 网络:云服务器 CVM 和云原生数据库集群在同一私有网络(VPC)

  • 内核版本:mysql8.0

  • 实例类型:独享型

  • 实例规格:2C8G、4C16G、8C32G、8C64G、16C128G、32C256G

  • 节点个数:一主一只读

百度-GaiaDB

  • 地域/可用区:华北-北京

  • 客户端:32核64GB

  • 客户端操作系统:CentOS 8.2 64位

  • 网络:云服务器BCC和云原生数据库集群在同一私有网络(VPC)

  • 内核版本:mysq8.0.18

  • 实例类型:独享型

  • 实例规格:2C8G、4C16G、8C32G、8C64G、16C128G、32C256G

  • 节点个数:一主一只读

测试工具

  • sysbench工具介绍:SysBench 是一个跨平台且支持多线程的模块化基准测试工具,用于评估系统在运行高负载的数据库时相关核心参数的性能表现。可绕过复杂的数据库基准设置,甚至在没有安装数据库的前提下,快速了解数据库系统的性能。sysbench官方文档

  • sysbench版本: 1.0.20版本

  • sysbench测试模型:

    • sysbench 标准 OLTP 读写混合场景中一个事务包含18个读写 SQL。

    • sysbench 标准 OLTP 只读场景中一个事务包含14个读 SQL(10条主键点查询、4条范围查询)。

    • sysbench 标准 OLTP 只写场景中一个事务包含4个写 SQL(2条 UPDATE、1条 DETELE、1条 INSERT)。

测试指标

性能测试的指标包括:

  • 每秒执行事务数TPS(Transactions Per Second)数据库每秒执行的事务数,以COMMIT成功次数为准。

  • 每秒执行请求数QPS(Queries Per Second)数据库每秒执行的SQL数,包含INSERT、SELECT、UPDATE、DETELE、COMMIT等。

  • 所有 event 95分位耗时 95_lat(95% Latency)

评测方法

  1. 阿里云、百度智能云、腾讯云分别申请同配置云主机作为客户端

  2. 云厂商申请同等价位和配置的数据库实例

  3. Sysbench工具从云主机客户端向数据库实例发起读请求、写请求和读写请求

测试方法

  • OLTP读写场景压测

#准备数据:

sysbench --db-driver=mysql --mysql-host=XXX --mysql-port=XXX --mysql-user=XXX --mysql-password=XXX --mysql-db=sbtest --table_size=25000 --tables=250 --events=0 --time=600 oltp_read_write prepare

#运行workload

sysbench --db-driver=mysql --mysql-host=XXX --mysql-port=XXX --mysql-user=XXX --mysql-password=XXX --mysql-db=sbtest --table_size=25000 --tables=250 --events=0 --time=600 --threads=XXX --percentile=95 --report-interval=1 oltp_read_write run

#清理

sysbench --db-driver=mysql --mysql-host=XXX --mysql-port=XXX --mysql-user=XXX --mysql-password=XXX --mysql-db=sbtest --table_size=25000 --tables=250 --events=0 --time=600 --threads=XXX --percentile=95 oltp_read_write cleanup

  • OLTP只读场景压测

#准备数据:

sysbench --db-driver=mysql --mysql-host=XXX --mysql-port=XXX --mysql-user=XXX --mysql-password=XXX --mysql-db=sbtest --table_size=25000 --tables=250 --events=0 --time=600 oltp_read_only prepare

#运行workload

sysbench --db-driver=mysql --mysql-host=XXX --mysql-port=XXX --mysql-user=XXX --mysql-password=XXX --mysql-db=sbtest --table_size=25000 --tables=250 --events=0 --time=600 --threads=XXX --percentile=95 --range_selects=0 --skip-trx=1 --report-interval=1 oltp_read_only run

#清理

sysbench --db-driver=mysql --mysql-host=XXX --mysql-port=XXX --mysql-user=XXX --mysql-password=XXX --mysql-db=sbtest --table_size=25000 --tables=250 --events=0 --time=600 --threads=XXX --percentile=95 --range_selects=0 oltp_read_only cleanup

  • OLTP只写场景压测

#准备数据

sysbench --db-driver=mysql --mysql-host=XXX --mysql-port=XXX --mysql-user=XXX --mysql-password=XXX --mysql-db=sbtest --table_size=25000 --tables=250 --events=0 --time=600 oltp_write_only prepare

#运行workload

sysbench --db-driver=mysql --mysql-host=XXX --mysql-port=XXX --mysql-user=XXX --mysql-password=XXX --mysql-db=sbtest --table_size=25000 --tables=250 --events=0 --time=600 --threads=XXX --percentile=95 --report-interval=1 oltp_write_only run

#清理

sysbench --db-driver=mysql --mysql-host=XXX --mysql-port=XXX --mysql-user=XXX --mysql-password=XXX --mysql-db=sbtest --table_size=25000 --tables=250 --events=0 --time=600 --threads=XXX --percentile=95 oltp_write_only cleanup

测试场景

  • 分别选择百度和竞品的6种套餐2C8G、4C16G、8C32G、8C64G、16C128G、32C256G进行测试

  • 对于每种规格选择读写、只读、只写3种场景进行测试

  • 每个套餐均新增128并发下的测试

限制与补充说明

在测试过程中的一些限制进行补充说明,供参考。

  • 不同厂商的内核兼容版本存在小版本号差别,这里忽略小版本的性能差异。

  • 不同厂商的CPU、磁盘类型、价格等各有不同,所以这是一个相对对等的测试。

  • 不同厂商的数据库实例的默认参数也各有不同,因此不能确定测试结果是最优配置,但基本是默认配置下的性能表现。

总体结论与分析:

  1. 综合性能排名:阿里云 > 百度智能云 > 腾讯云:

  • 阿里云 PolarDB 整体性能明显高于百度智能云 GaiaDB 和腾讯云 TDSQL-C,分析原因应该是 PolarDB 在云上使用了更高端的硬件,从阿里云的宣传来看应该使用了RDMA和NVM。

  • 百度智能云 GaiaDB 性能也还不错,在部分测试场景中和阿里云PolarDB差距不大。从公开的信息分析,GaiaDB没有使用高端的硬件,如果仅使用通用硬件跑出这个性能,应该还是非常不错的性能。

  • 腾讯云 TDSQL-C 性能比较出乎意料,在8核以上规格的性能明显低于百度、阿里。从腾讯公开的信息分析,腾讯也没有使用高端的硬件,因此只能说软件层面的深度优化还有很大空间。

  1. 只写场景:

只写性能百度与阿里差距较小,从最近百度发布的《核心技术演进和解析》分析,百度智能云 GaiaDB 在写链路方面做了较多优化,包括Quorum协议、高性能网络协议等。

参考资料

以下是笔者在分析性能过程中翻阅的网络材料,仅供参考:

[数据库技术]PolarDB-超火的云原生

云原生数据库 GaiaDB 的核心技术演进和解析

百度直播

百度安全验证



 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/581033.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

FPGA高端项目:SDI 视频+音频编解码,提供工程源码和技术支持

目录 1、前言免责声明 2、相关方案推荐我这里已有的 GT 高速接口解决方案我目前已有的SDI编解码方案 3、设计思路和框架设计框图GV8601A均衡EQGTX 时钟要求GTX 调用与控制SMPTE SD/HD/3G-SDISMPTE SD/HD/3G-SDI 接收SMPTE SD/HD/3G-SDI 发送 SDI 视频接收数据处理SDI 音频接收-…

pycharm 工具栏不见了

新版pycharm后, 菜单栏和工具栏不见了 目录 我发现的解决方法: 其他旧版的解决方法: 我发现的解决方法: 其他旧版的解决方法: 另外,一些使用pycharm的新手可能会由于不熟悉软件的功能而误操作&#xff…

【头歌实训】PySpark Streaming 数据源

文章目录 第1关:MySQL 数据源任务描述相关知识PySpark JDBC 概述PySpark JDBCPySpark Streaming JDBC 编程要求测试说明答案代码 第2关:Kafka 数据源任务描述相关知识Kafka 概述Kafka 使用基础PySpark Streaming Kafka 编程要求测试说明答案代码 第1关&a…

scikit-learn文档中的数据生成器

目录 1. make_classification: 2. make_regression: 3. make_blobs: 4. make_moons: 5.make_circles 6. make_sparse_coded_signal: 1. make_classification: 这是一个用于生成复杂二维数据的函数,通常用于可视化分类器的学习过程或者测试机器学习算法的性能…

Kali Linux如何启动SSH并在Windows系统远程连接

文章目录 1. 启动kali ssh 服务2. kali 安装cpolar 内网穿透3. 配置kali ssh公网地址4. 远程连接5. 固定连接SSH公网地址6. SSH固定地址连接测试 简单几步通过[cpolar 内网穿透](cpolar官网-安全的内网穿透工具 | 无需公网ip | 远程访问 | 搭建网站)软件实现ssh 远程连接kali! …

工具系列:TimeGPT_(9)模型交叉验证

交叉验证 文章目录 交叉验证外生变量比较不同的模型 时间序列预测中的主要挑战之一是随着时间的推移固有的不确定性和变异性,因此验证所采用的模型的准确性和可靠性至关重要。交叉验证是一种强大的模型验证技术,特别适用于此任务,因为它提供了…

使用 GitHub 进行团队协作的操作指南

目录 前言1 使用github进行团队开发的意义2 邀请成员加入团队3 克隆和提交代码3.1 克隆远程仓库到本地3.2 加入暂存区3.3 提交修改到本地仓库3.4 设置本地仓库和远程仓库的关联3.5 将本地仓库的代码推送到远程仓库 结语 前言 GitHub 是一个广泛使用的基于 Git 的代码托管平台&…

Java - 获取 Jar 包内的 pom.xml 文件

目录 一.引言 二.通过 jar 命令 ◆ 查看 Jar 包内文件 ◆ 导出 Pom.xml ◆ 导出 Jar 包内文件 三.通过 unzip 命令 ◆ 导出 Jar 包内文件 四.总结 一.引言 引用其他同学的 Jar 包时,需要获取其对应 jar 包内的 pom.xml 文件检查版本依赖关系,下…

MYSQL存储过程和存储函数-数据库实验五

Mysql数据库实验及练习题相关 MySQL 数据库和表的管理-数据库实验一 MySQL连接查询、索引、视图-数据库实验二、实验三 MySQL约束、触发器-数据库实验四 MYSQL存储过程和存储函数-数据库实验五 MySQL批量随机生成name、TEL、idNumber MYSQL数据库的安全管理-数据库实验六 MYSQ…

基于JetCache整合实现一级、二级缓存方案(方案实现)

目录 一、整体方案说明 1.1 需求说明 1.2 整体方案实现组件结构图 二、Caffeine缓存实现 2.1 组件说明 2.2 组件结构图 2.3 组件Maven依赖 2.4 组件功能实现源码 2.4.1 CaffeineCacheManager扩展实现 2.4.2 CaffeineConfiguration配置类实现 2.4.3 涉及其他组件的类 …

如何在Android Termux中使用SFTP实现远程传输文件

文章目录 1. 安装openSSH2. 安装cpolar3. 远程SFTP连接配置4. 远程SFTP访问5. 配置固定远程连接地址6、结语 SFTP(SSH File Transfer Protocol)是一种基于SSH(Secure Shell)安全协议的文件传输协议。与FTP协议相比,SFT…

Spring Boot 中的虚拟线程

在本文中,我将讨论 Spring Boot 中的虚拟线程。 什么是虚拟线程? 虚拟线程作为 Java 中的一项功能引入,旨在简化并发性。 Virtual threads 是 轻量级的线程,由 Java Virtual Machine 而不是操作系统管理。它们被设计为易于使用且…

ElasticSearch:centos7安装elasticsearch7,kibana,ik中文分词器,云服务器安装elasticsearch

系统:centos7 elasticsearch: 7.17.16 安装目录:/usr/local 云服务器的安全组:开放 9200 和5601的端口 一、下载安装elasticsearch7.17.16 1、安装 #进入安装目录 cd /usr/local#下载elasticsearch wget https://artifacts.elastic.co/d…

Elasticsearch:在不停机的情况下优化 Elasticsearch Reindex

实现零停机、高效率和成功迁移更新的指南。更多阅读:Elasticsearch:如何轻松安全地对实时 Elasticsearch 索引 reindex 你的数据。 在使用 Elasticsearch 的时候,总会有需要修改索引映射的时候,遇到这种情况,我们只能做…

前端实现websocket类封装

随着Web应用程序的发展,越来越多的人开始利用Websocket技术来构建实时应用程序。Websocket是一种在客户端和服务器之间建立持久连接的协议。这种协议可以在一个单独的连接上实现双向通信。与HTTP请求-响应模型不同,Websocket允许服务器自主地向客户端发送…

想要学会JVM调优,先掌握JVM内存模型和JVM运行原理

1、前言 今天将和你一起探讨Java虚拟机(JVM)的性能调优。 JVM算是面试中的高频问题了,通常情况下总会有人问到:请你讲解下 JVM 的内存模型,JVM 的 性能调优做过? 2、为什么 JVM 在 Java 中如此重要 首…

利用网络教育系统构建个性化学习平台

在现代教育中,网络教育系统作为一种创新的学习方式,为学生提供了更加个性化和灵活的学习体验。在本文中,我们将通过简单的技术代码,演示如何构建一个基础的网络教育系统,为学生提供个性化的学习路径和资源。 1. 环境…

在Go语言中实现HTTP请求的缓存

大家好,我是你们可爱的编程小助手,今天我们要一起探讨如何使用Go语言实现HTTP请求的缓存。听起来是不是很酷?让我们开始吧! 首先,我们要明白什么是缓存。简单来说,缓存就是将数据存储在内存中,…

Flutter配置Android和IOS允许http访问

默认情况下,Android和IOS只支持对https的访问,如果需要访问不安全的连接,也就是http,需要做以下配置。 Android 在res目录下的xml目录中(如果不存在,先创建xml目录),创建一个xml文件network_security_con…

Appium+python自动化(三)- SDK Manager(超详解)

简介 本来宏哥一开始打算用真机做的,所以在前边搭建环境时候就没有下载SDK,但是由于许多小伙伴通过博客发短消息给宏哥留言说是没有真机,所以顺应民意整理一下模拟器,毕竟“得民心者,得天下”。SDK顾名思义&#xff0c…