1. Sharding-Jdbc介绍
Sharding-Jdbc在3.0后改名为Shardingsphere
,它由Sharding-JDBC
、Sharding-Proxy
和Sharding-Sidecar
(计划中)这3款相互独立的产品组成。它们均提供标准化的数据分片、分布式事务和数据库治理功能,可适用于如Java同构、异构语言、容器、云原生等各种多样化的应用场景。
Sharding-Sphere(音标: [sfɪə(r)]
)定位为关系型数据库中间件,旨在充分合理地在分布式的场景下利用关系型数据库的计算和存储能力,而并非实现一个全新的关系型数据库。它通过关注不变,进而抓住事物本质。
关系型数据库当今依然占有巨大市场,是各个公司核心业务的基石,未来也难于撼动,我们目前阶段更加关注在原有基础上的增量,而非颠覆。
应用场景:
- 数据库读写分离
- 数据库分表分库
相关资料:
- Sharding-Jdbc官方网址: http://shardingsphere.io/index_zh.html
2. Sharding-Jdbc与MyCat区别
SJdbc与MyCat的区别如下:
- MyCat是一个基于第三方应用中间件数据库代理框架,客户端所有的jdbc请求都必须要先交给MyCat,再有MyCat转发到具体的真实服务器中。
- Sharding-Jdbc是一个Jar形式,在本地应用层重写Jdbc原生的方法,实现数据库分片形式。
- MyCat属于服务器端数据库中间件,而Sharding-Jdbc是一个本地数据库中间件框架。
从设计理念上看确实有一定的相似性:
- 主要流程都是SQL 解析 => SQL 路由 => SQL 改写 => SQL 执行 => 结果归并。
- 但架构设计上是不同的:Mycat 是基于 Proxy,它复写了 MySQL 协议,将 Mycat Server 伪装成一个 MySQL 数据库,而 Sharding-JDBC 是基于 JDBC 的扩展,是以 jar 包的形式提供轻量级服务的(类似于SpringCloud Ribbon与Nginx区别)。
3. Sharding-Jdbc实现读写分离
Sharding-Jdbc实现读写分离原理,非常容易,只需要在项目中集成主和从的数据源,Sharding-Jdbc自动根据DML和DQL 语句类型连接主或者从数据源。
注意: Sharding-Jdbc只是实现连接主或者从数据源,不会实现主从复制功能,需要自己配置数据库自带主从复制方式。
实际开发场景中,配置内容如下:
server: port: 9002 mybatis-plus: # mapper-locations: classpath*:/mapper/*.xml global-config: db-config: column-underline: true #shardingjdbc配置 sharding: jdbc: data-sources: ###配置第一个从数据库 ds_slave_0: password: root jdbc-url: jdbc:mysql://192.168.212.203:3306/test?useUnicode=true&characterEncoding=utf-8&useSSL=true driver-class-name: com.mysql.jdbc.Driver username: root ###主数据库配置 ds_master: password: root jdbc-url: jdbc:mysql://192.168.212.202:3306/test?useUnicode=true&characterEncoding=utf-8&useSSL=true driver-class-name: com.mysql.jdbc.Driver username: root ###配置读写分离 master-slave-rule: ###配置从库选择策略,提供轮询与随机,这里选择用轮询 load-balance-algorithm-type: round_robin ####指定从数据库 slave-data-source-names: ds_slave_0 name: ds_ms ####指定主数据库 master-data-source-name: ds_master