突破 MySQL 三大技术瓶颈,分布式数据库的技术实践

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS PostgreSQL,集群系列 2核4GB
简介: 数据库选型时的五个考量因素众所周知,分布式数据库自身具备水平扩展、高可用以及数据强一致等特点,除了这些能力,我们还十分看重它是否稳定、是否易运维、是否低成本、是否具备高性能、是否有丰富的生态。稳定性。当我们将业务迁移至分布式数据库后,服务的稳定性是特别重要的。对于用户来说,他们或许并不在乎一个产品的底层存储是什么,但一定在乎服务是否足够稳定。易运维。由于分布式数据库的门槛相对较高,如果它能提供一些智能化或平台化的运维工具,我们的运维人员所需的学习成本则会大大降低。性能。我们希望能在有限的节点,且在可容忍的延迟范围内,考察一下分布式数据库能支撑多大的吞吐量。

数据库选型时的五个考量因素


众所周知,分布式数据库自身具备水平扩展、高可用以及数据强一致等特点,除了这些能力,我们还十分看重它是否稳定、是否易运维、是否低成本、是否具备高性能、是否有丰富的生态。


稳定性。当我们将业务迁移至分布式数据库后,服务的稳定性是特别重要的。对于用户来说,他们或许并不在乎一个产品的底层存储是什么,但一定在乎服务是否足够稳定。


易运维。由于分布式数据库的门槛相对较高,如果它能提供一些智能化或平台化的运维工具,我们的运维人员所需的学习成本则会大大降低。


性能。我们希望能在有限的节点,且在可容忍的延迟范围内,考察一下分布式数据库能支撑多大的吞吐量。


生态。在将业务数据真正迁移到分布式数据库后,随着业务场景的丰富和数据量的增长,后续可能还会遇到各种各样的问题。如果数据库产品有一个良好的生态,就能帮助我们快速找到问题的解决方案。


成本。对于创业公司来说,降成本是一个无法避免的选型因素,就不再赘述了。


基于以上几个考察因素,翼鸥教育选择了解并测试业内流行的两款分布式数据库:TiDB 和 OceanBase(见图 1)。

图 1 TiDB 和 OceanBase 的主要特点


TiDB

TiDB 是一款支持混合事务处理和分析处理(Hybrid Transaction Analytical Processing,HTAP)的融合型数据库产品,可以做到水平扩容和缩容,也能达到金融级高可用能力,数据能够达到强一致。TiDB 的表数据可以自动分裂,不需要 DBA 介入,这个功能非常好用。同时,TiDB 的社区也很活跃,当我们遇到问题时,在 TiDB 社区中基本能找到解决方法。

OceanBase

OceanBase 也拥有 HTAP 能力、并具备水平扩容或缩容、金融级高可用、数据强一致这三个特点。在 OceanBase 3.x 版本中,如果表的数据比较大,需要我们进行手动分区,在 OceanBase 4.0 版本后,开始支持大数据自动分区。


我们认为 OceanBase 具备一个特别吸引人的能力,就是它支持多租户和资源隔离。一个集群在承担众多业务的情况下,做到业务不互相影响是非常重要的。而且,当我们遇到问题时,在 OceanBase 社区也能快速得到解决方案。此外我们发现 OceanBase 为了能让客户及时收到别人对自己提问、解答的回复,设置了消息提醒,通过服务号绑定社区帐号就能在我们的问题得到解答时第一时间看到。


在初步对 TiDB 和 OceanBase 进行考察后,我们根据翼欧教育的业务场景对两款数据库做了进一步的对比和测试。

TiDB 和 OceanBase 的对比测试


我们的对比测试不局限于压力测试,因为两款数据库的压力测试都有极高的性能表现,甚至 OceanBase 在 TPC-C、TPC-H 中都取得了世界级的突破,所以我们并不担心两款数据库的性能,而是从两个具体的业务场景中测试慢日志、CPU、事务延迟、数据同步、在线 DDL、压测响应等。

测试场景一:OceanBase 慢日志少,CPU、延迟指标表现平稳


第一个场景是翼鸥教育的某个 MySQL 业务集群(写峰值 1.3k,读峰值 3.5k,数据近 2TB),见图 2 ,其特点是单库分表,多分表之间存在关联查询,且存在多分表插入和更新等操作。

图 2 第一个测试场景概述


我们选择了 TiDB v6.1 和 OceanBase v3.1.4 进行测试与对比,测试所用的机器配置为 3 台 64C/256G/3T SSD。我们将线上的真实流量引入测试集群,测试的 TiDB 架构如图 3 所示,通过 DM 同步 MySQL 的 dml 操作,模拟写流量,写入 TiDB cluster 。再通过 TcpCopy 复制 MySQL 读流量,回放到 TiDB cluster 来模拟读流量。对 OceanBase 测试的架构也与其类似,通过 OMS 采集写流量,通过 Tcp Copy 拷贝和回放读流量,再回放到 OceanBase cluster。

图 3 TiDB 在第一个场景中测试的架构


通过对 TiDB 和 OceanBase 这两款产品的测试,我们得到了关于慢日志、CPU、延迟等方面的数据。


首先,对于慢日志,我们通过图 4 和图 5 可以看到。 TiDB 的慢日志比较多,OceanBase 也出现了慢日志,但次数较少。这是由于 TiDB 优化器不稳定,出现索引走错的情况,而 OceanBase 不支持倒序索引,其查询不走索引。

图 4 TiDB 慢日志测试数据

图 5 OceanBase 慢日志测试数据


其次,对于 CPU 指标,我们可以从图 6 和图 7 中的数据得知,由于 TiDB 的延迟发生了一些波动, TiDB 的 CPU 使用率也出现了较为明显的波动,而 OceanBase 的 CPU 使用率表现非常平稳。

图 6 TiDB 的 CPU 数据

图 7 OceanBase 的 CPU 数据


最后来看延迟指标,见图 8 与图 9,在整个测试过程中,TiDB 出现了几次小的波动,OceanBase 整体较为稳定。

图 8 TiDB 的延迟数据

图 9 OceanBase 的延迟数据


从延迟和 CPU 这两个角度来看,OceanBase 都要优于 TiDB。因为 TiDB 的数据在大于某个值后会自动拆分,数据会自动分散在各个节点上,而分表的查询或关联的更新基本走的都是分布式事务。OceanBase 支持本地事务,数据都在一个 zone 内,查询走的都是本地事务,所以其延迟比分布式事务低。

测试场景二: OceanBase 较 TiDB,数据清洗快 2.74 倍,数据同步快 2.6 倍


第二个测试场景是某业务需要从上游的多套 MySQL 集群汇集数据并清洗,数据清洗完成后提供线上服务。该业务场景的数据涉及多个上游集群,且清洗后的数据单表记录数最大达到 30 亿。

图 10 第二个测试场景概述


我们还是采用 TiDB v6.1 和 OceanBase v3.1.4 进行测试对比,机器配置仍为 3 台 64C/256G/3T SSD。在本次测试中,我们对两个数据库产品采用同一套清洗程序进行数据清洗,考察业务迁移后数据的压缩率、数据同步时间、数据清洗时间、在线 DDL 用时、业务接口压测响应时间。


测试 TiDB 的架构见图 11,通过 DM 把上游多个 MySQL 表的数据同步到下游的 TiDB cluster。在同步完数据后,业务程序会对同步过来的数据进行清洗,并将清洗完的数据写到本集群的新库中。

图 11 TiDB 在第二个场景中测试的架构


OceanBase 的测试架构如图 12 所示,与 TiDB 的测试架构类似。通过 OMS 采集上游的数据,再同步到 OceanBase cluster,业务程序也是在本集群进行数据的清洗,并将清洗完的数据写到本集群的新库中。

图 12 OceanBase 在第二个场景中测试的架构


经过测试,我们分别对比了 TiDB 和 OceanBase 在数据压缩率、数据同步时间、数据清洗时间、在线 DDL 用时、业务接口压测响应时间的表现。

1、数据压缩率对比

从图 13 来看,TiDB 和 OceanBase 对于单表各有优势。但前者的整体压缩率优于后者。

图 13 数据迁移后的压缩率对比

2、数据同步时间对比

我们并没有对同步的配置做优化,只是采用了默认的同步配置,发现 TiDB 所需的数据迁移时间是 50674 秒,OceanBase 只要 19406 秒。如图 14 所示,相当于 OceanBase 比 TiDB 的数据同步快 2.6 倍。

图 14 数据同步时间对比

3、数据清洗时间对比

数据清洗时间也关乎上线耗时,是业务迁移中比较重要的节点。我们的测试结果显示,同一套清洗程序,TiDB 的数据清洗用时是 OceanBase 的 2.74 倍,这意味着使用 OceanBase 的上线耗时比使用 TiDB 要短。因此,我们的研发人员对 OceanBase 的性能充满了信心和期待。

图 15 数据清洗时间对比

4、表在线 DDL 用时对比


如图 16 所示,OceanBase 在线 DDL 加索引的用时比 TiDB 短很多,尤其对于一些大表的改表用时,测试结果的差距非常明显。这一对比结果,让我们感到非常意外。

图 16 表在线 DDL 用时对比

5、接口压测相应时间对比


我们选取了五个核心接口,采用相同的压测线程数对同一接口进行压测,经过测试,我们发现 OceanBase 的响应比 TiDB 的响应快两倍。


相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
7天前
|
关系型数据库 MySQL Linux
Linux环境下MySQL数据库自动定时备份实践
数据库备份是确保数据安全的重要措施。在Linux环境下,实现MySQL数据库的自动定时备份可以通过多种方式完成。本文将介绍如何使用`cron`定时任务和`mysqldump`工具来实现MySQL数据库的每日自动备份。
22 3
|
8天前
|
SQL 关系型数据库 MySQL
go语言数据库中mysql驱动安装
【11月更文挑战第2天】
22 4
|
6天前
|
SQL 关系型数据库 MySQL
12 PHP配置数据库MySQL
路老师分享了PHP操作MySQL数据库的方法,包括安装并连接MySQL服务器、选择数据库、执行SQL语句(如插入、更新、删除和查询),以及将结果集返回到数组。通过具体示例代码,详细介绍了每一步的操作流程,帮助读者快速入门PHP与MySQL的交互。
19 1
|
15天前
|
监控 关系型数据库 MySQL
数据库优化:MySQL索引策略与查询性能调优实战
【10月更文挑战第27天】本文深入探讨了MySQL的索引策略和查询性能调优技巧。通过介绍B-Tree索引、哈希索引和全文索引等不同类型,以及如何创建和维护索引,结合实战案例分析查询执行计划,帮助读者掌握提升查询性能的方法。定期优化索引和调整查询语句是提高数据库性能的关键。
77 1
|
3天前
|
运维 关系型数据库 MySQL
安装MySQL8数据库
本文介绍了MySQL的不同版本及其特点,并详细描述了如何通过Yum源安装MySQL 8.4社区版,包括配置Yum源、安装MySQL、启动服务、设置开机自启动、修改root用户密码以及设置远程登录等步骤。最后还提供了测试连接的方法。适用于初学者和运维人员。
27 0
|
SQL Java 数据库连接
MySQL---数据库从入门走向大神系列(十五)-Apache的DBUtils框架使用
MySQL---数据库从入门走向大神系列(十五)-Apache的DBUtils框架使用
188 0
MySQL---数据库从入门走向大神系列(十五)-Apache的DBUtils框架使用
|
SQL 关系型数据库 MySQL
MySQL---数据库从入门走向大神系列(六)-事务处理与事务隔离(锁机制)
MySQL---数据库从入门走向大神系列(六)-事务处理与事务隔离(锁机制)
140 0
MySQL---数据库从入门走向大神系列(六)-事务处理与事务隔离(锁机制)
|
存储 SQL 关系型数据库
MySQL---数据库从入门走向大神系列(五)-存储过程
MySQL---数据库从入门走向大神系列(五)-存储过程
138 0
MySQL---数据库从入门走向大神系列(五)-存储过程
|
数据库
MySQL---数据库从入门走向大神系列(四)-子查询、表与表之间的关系(3)
MySQL---数据库从入门走向大神系列(四)-子查询、表与表之间的关系
200 0
MySQL---数据库从入门走向大神系列(四)-子查询、表与表之间的关系(3)
|
SQL 关系型数据库 MySQL
MySQL---数据库从入门走向大神系列(二)-用Java对MySQL进行增删改查
MySQL---数据库从入门走向大神系列(二)-用Java对MySQL进行增删改查
210 0
MySQL---数据库从入门走向大神系列(二)-用Java对MySQL进行增删改查

推荐镜像

更多