MySQL:可以不会 ,不能不知的SpringBoot+Sharding-JDBC分库分表项目实战


MySQL:可以不会 ,不能不知的SpringBoot+Sharding-JDBC分库分表项目实战
本文插图
引言
微服务、分布式大行其道也是当下 , 中、高JAVA高级工程师面试的高频词汇 , 这些知识不了解面试通过率不会太高 。 你可以不会用 , 但你不能不知道 , 就是这么一种现状 。 技术名词大多晦涩难懂 , 不要死记硬背理解最重要 , 当你捅破那层窗户纸 , 发现其实它也就那么回事 。
什么是Sharding-JDBC
在介绍Sharding-JDBC之前 , 我们需要先说明下Sharding-Sphere 。
Sharding-Sphere是一套开源的分布式数据库中间件解决方案组成的生态圈 , 它由Sharding-JDBC、Sharding-Proxy和Sharding-Sidecar(计划中)这3款相互独立的产品组成 。 他们均提供标准化的数据分片、分布式事务和数据库治理功能 , 可适用于如Java同构、异构语言、容器、云原生等各种多样化的应用场景 。
一、Sharding-JDBC
Sharding-JDBC是一个开源的分布式数据库中间件 , 它无需额外部署和依赖 , 旧代码迁移成本几乎为零 。 Sharding-JDBC 作为面向开发的微服务云原生基础类库 , 完整地实现了分库分表、读写分离和分布式主键功能 , 并初步实现柔性事务 。
它使用客户端直连数据库 , 以jar包形式提供服务 , 无需额外部署和依赖 , 可理解为增强版的JDBC驱动 , 完全兼容JDBC和各种ORM框架 。
(1)适用于任何基于Java的ORM框架 , 如:JPA, Hibernate, Mybatis, Spring JDBC Template或直接使用JDBC 。
(2)基于任何第三方的数据库连接池 , 如:DBCP, C3P0, BoneCP, Druid, HikariCP等 。
(3)支持任意实现JDBC规范的数据库 。 目前支持MySQL , Oracle , SQLServer和PostgreSQL 。
二、Sharding-Proxy
Sharding-Proxy定位为透明化的数据库代理端 , 提供封装了数据库二进制协议的服务端版本 , 用于完成对异构语言的支持 。 目前先提供MySQL版本 , 它可以使用任何兼容MySQL协议的访问客户端(如:MySQL Command Client, MySQL Workbench等)操作数据 , 对DBA更加友好 。
画外音:分布式数据库中间件可以归结为Client模式和Proxy模式 。
MySQL:可以不会 ,不能不知的SpringBoot+Sharding-JDBC分库分表项目实战
本文插图
三、常用Client模式和Proxy模式
Client模式属于客户端直连方案 。 此方案的优势在于轻便、兼容性、性能以及对DBA影响小 。
Proxy模式属于中间层方案 , 在应用程序和MySQL之间搭建一层Proxy 。 中间层介于应用程序与数据库间 , 需要做一次转发 , 而基于JDBC协议并无额外转发 , 直接由应用程序连接数据库 , 性能上有些许优势 。 这里并非说明中间层一定不如客户端直连 , 除了性能 , 需要考虑的因素还有很多 , 中间层更便于实现监控、数据迁移、连接管理等功能 。
Client模式:阿里的TDDL、当当网的sharding-jdbc、Cobar-Client
Proxy模式:阿里的cobar、民间组织的MyCAT、MySQL-Proxy、Amoeba for MySQL、Atlas(360)、MaxScale
【MySQL:可以不会 ,不能不知的SpringBoot+Sharding-JDBC分库分表项目实战】面试常问的几个问题
一、为什么要分库分表
关系型数据库以MySQL为例 , 单机的存储能力、连接数是有限的 , 它自身就很容易会成为系统的瓶颈 。 当单表数据量在百万以里时 , 我们还可以通过添加从库、优化索引提升性能 。 一旦数据量朝着千万以上趋势增长 , 再怎么优化数据库 , 很多操作性能仍下降严重 。 为了减少数据库的负担 , 提升数据库响应速度 , 缩短查询时间 , 这时候就需要进行分库分表 。
二、如何分库分表
分库分表就是要将大量数据分散到多个数据库中 , 使每个数据库中数据量小响应速度快 , 以此来提升数