基于Sharding-JDBC的MySQL分库分表技术预研
Posted 我们的开心
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了基于Sharding-JDBC的MySQL分库分表技术预研相关的知识,希望对你有一定的参考价值。
文/杨赟
在新一代支付结算系统的技术研究工作中,我们发现支付引擎系统和大小额支付系统并发量大(峰值800万笔/天),如果使用mysql数据库的话,单库难以支撑,需要分库。同时,由于历史库需要保存3个月的数据,所以单表数据量太大,一定程度上影响了SQL执行性能(体现在查询速度慢),需要分表。
一、Sharding-JDBC介绍
针对上述问题,我们想用Sharding-JDBC对数据库进行分库分表,从而提高系统TPS和查询速度。Sharding-JDBC是一个轻量级的分库分表中间件,在项目中可以以jar包引入,它的特性主要有数据分片、分布式事务和数据库治理。
# 数据分片:分库&分表、读写分离、分布式主键
#分布式事务:强一致性事务、柔性事务
#数据库治理:配置动态化、降级、熔断、限流、弹性伸缩
二、Sharding-JDBC分库实验
首先,我在本地电脑上开了三台虚拟机,1台可以操作数据库的应用服务器(4C/4G/20G),2台安装MySQL 5.7的数据库服务器(2C/2G/20G),并使用Jmeter在本地电脑进行压力测试。将最大用户并发数设置为100,启动时间设置为10秒,随着用户并发数的增大,分别监测JDBC单库单表、Sharding-JDBC单库单表以及Sharding-JDBC双库单表情况下的TPS大小。参数设置如表1所示,实验环境如图1所示。
通过实验一和实验二,可以计算在单库时,Sharding-JDBC相比JDBC的性能损耗。通过实验一和实验三,可以对比使用Sharding-JDBC分库前后的性能提升。实验结果如下。
从实验结果可以看出,在单库时,Sharding-JDBC与JDBC相比,会降低一点性能,这是由于Sharding-JDBC做了额外的一些操作,例如通过雪花算法生成分布式主键。但是,在使用Sharding-JDBC分库后,系统最大TPS提升了72.96%,证明了在面对高并发时,使用Sharding-JDBC进行分库的可行性。
轮值总编:闵佳
责任编辑:王咪咪
美 编:李沫
技术支持:陈文建
我们的开心 · 总编辑部
(e 语)
■欢迎来稿:请按“作品名-作者-部门”命名,发送到abckx@abchina.com
以上是关于基于Sharding-JDBC的MySQL分库分表技术预研的主要内容,如果未能解决你的问题,请参考以下文章
mysql分库分表方案之sharding-jdbc使用(非demo示例)