50T的数据还能存储在阿里云RDS MySQL中吗?

随着业务增长,存储大量数据成为挑战。阿里云RDS MySQL的X-Engine提供了高压缩比和稳定性能,尤其适合存储冷数据。X-Engine在32TB存储规格下可存储64TB InnoDB数据,写入性能提升20%,并且完全兼容MySQL。通过LSM-Tree技术,X-Engine优化了数据存储和访问,为面临海量数据存储的企业提供了解决之道。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

随着业务发展和时间积累,业务系统的数据库存储着较大规模的数据,而这些数据访问频率是不同的,通常访问频率高的热数据是少量,比较多的冷数据访问频率并不高,甚至有些冷数据只需要只读。如果这些冷数据都存储在联机事务处理OLTP(On-Line Transaction Processing)数据库引擎中,如MySQL InnoDB引擎,会在成本、安全、性能等问题上带来一些挑战,常见做法是将系统中的冷数据存储在归档数据库中。此时一个高压缩比、性能稳定可靠、完全兼容MySQL的数据库引擎会是最佳选择,阿里云RDS MySQL X-Engine就是符合此类需求的产品。

阿里云 RDS MySQL最大存储只支持32TB,那如何存储50T的数据呢?本文将帮助阿里云用户开发者们了解RDS X-Engine的以下特性:

  • 相对于MySQL InnoDB引擎,X-Engine有50%左右的压缩率,RDS最大32TB存储的规格下,可以存64TB InnoDB引擎的数据。

  • 相对于MySQL InnoDB引擎,只写场景大约提升了20%的性能,只读和读写混合场景性能略差。

  • 完全兼容MySQL,并和MySQL有相同的生态。

1、X-Engine是什么

X-Engine是阿里云数据库产品事业部自研的联机事务处理OLTP(On-Line Transaction Processing)数据库存储引擎,完全兼容MySQL数据库。

X-Engine使用了LSM-Tree技术。LSM-Tree将数据进行分层存储,严格的顺序append-only写入磁盘,所以极大提高了数据库写入能力。在对海量数据的存储和检索场景下,近几年流行的NoSQL通常采用了此技术,比如Apache顶级开源数据库项目HBase、Cassandra,又如Google和Facebook分别开源的数据库存储引擎LevelDB、RocksDB。

阿里对LSM-Tree进行了大量的重构设计:

  • 热数据层和数据更新使用内存存储,通过内存数据库技术(Lock-Free index structure/append only)提高事务处理的性能。

  • 流水线事务处理机制,把事务处理的几个阶段并行起来,极大提升了吞吐。

  • 访问频度低的数据逐渐淘汰或是合并到持久化的存储层次中,并结合多层次的存储设备进行存储。

  • 对性能影响比较大的Compaction过程做了优化:

    a)拆分数据存储粒度,利用数据更新热点较为集中的特征,尽可能在合并过程中复用数据。

    b)精细化控制LSM的形状,减少I/O和计算代价,有效缓解了合并过程中的空间增大。

  • 同时使用更细粒度的访问控制和缓存机制,优化读的性能。

2、X-Engine架构

LSM tree (log-structured merge-tree) 是一个磁盘严格顺序写入、数据分level存储、每level的数据都按主键(Key)排序后存储、各level中的数据会定期merge然后写入下一level等特性的数据结构。这种特性保证了对增删改很友好,尤其是极大的增强写入吞吐量能力,但是弱化了范围查的能力。阿里又加入硬件加速Compaction过程、Copy-on-write等技术,从而使X-Engine可以将存储空间降低至10%~50%。X-Engine的LSM架构详见图1。

图1

3、X-Engine测试

3.1 测试环境

X-Engine和InnoDB相比,他的压缩率和事务并发处理能力到底如何呢?我们进行了实际测试,首先在阿里云上分别购买2个RDS MySQL 8.0实例,引擎分别为:InnoDB和X-Engine,其余配置均相同。详细参数见下图2。

图2

3.2 压缩比测试

使用Sysbench构建测试数据,分别对两个不同引擎的实例都构建30个表、每个表2000万数据。

语句如下:

#InnoDB preparesysbench /usr/share/sysbench/oltp_update_index.lua \--mysql-host= \--mysql-user= \--mysql-password= \--mysql-port=3306 \--mysql-db=test \--threads=32 \--tables=30 \--table_size=20000000\--mysql-storage_engine=INNODB \prepare
#X-Engine preparesysbench /usr/share/sysbench/oltp_update_index.lua \--mysql-host= \--mysql-user= \--mysql-password= \--mysql-port=\--mysql-db=test \--threads=32 \--tables=30 \--table_size=20000000\--mysql-storage_engine= XENGINE \prepare

InnoDB引擎使用145G存储(仅数据),X-Engine使用71G存储(仅数据),存储使用率仅为InnoDB的48%。见图3。

图3

3.3 性能测试

此次测试,选取只读、只插入、混合读写的场景(一般归档库很少使用更新和删除操作),

其中threads在不同场景下值均为1000,该线程使不同场景下,服务端数据库实例的CPU使用率都接近100%。其他tables、table_size等参数均保持一致,详细测试命令见下文。

3.3.1只读场景

#Xengine & InnoDB runsysbench /usr/share/sysbench/oltp_read_only.lua \--mysql-host= \--mysql-user= \--mysql-password= \--mysql-port= \--time=600 \--mysql-db=test_hj_01 \--threads=1000 \--tables=30 \--table_size=10000000 \--rand-type=uniform \--report-interval=10 \run

测试结果见图4:

图4

3.3.2只插入场景

#Xengine & InnoDB runsysbench /usr/share/sysbench/oltp_insert.lua \--mysql-host= \--mysql-user= \--mysql-password= \--mysql-port= \--time=600 \--mysql-db=test_hj_01 \--threads=1000 \--tables=30 \--table_size=10000000 \--rand-type=uniform \--report-interval=10 \run

测试结果见图5:

图5

3.3.3读写混合场景

#Xengine & InnoDB runsysbench /usr/share/sysbench/oltp_read_write.lua \--mysql-host= \--mysql-user= \--mysql-password= \--mysql-port= \--time=600 \--mysql-db=test_hj_01 \--threads=1000 \--tables=30 \--table_size=10000000 \--rand-type=uniform \--report-interval=10 \run

测试结果见图6:

图6

4、分析总结

通过以上数据,发现阿里云 RDS MySQL X-Engine相对于MySQL InnoDB引擎,提高了大约一倍的数据存储能力,同时有20%左右的写入性能提升,只读和读写混合场景性能略差,同时完全兼容MySQL数据。这些特性,对一些以MySQL数据库为重度用户的企业,在面对海量数据存储和使用时,阿里云 RDS MySQL X-Engine是一个不错的选择。

另外,阿里云的PolarDB也支持X-Engine,也有高压缩率、更大存储、更强的性能表现、完全兼容MySQL的特点,PolarDB X-Engine将在未来的文章介绍。

5、参考

  • 自研内核AliSQL @阿里云数据库文档

  • Sysbench使用介绍 @Sysbench Github Documentation

该内容首次发布于微信公众号:云数据库技术,欢迎订阅。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值