一,什么是Sharding-JDBC
Sharding-JDBC是当当网研发的开源分布式数据库中间件,从3.0开始Sharding-JDBC被包含在Sharding-Sphere中,4.0版本之后的版本为Apache版本。
ShardingSphere是一套开源的分布式数据库中间件解决方案组成的生态圈,它由Sharding-JDBC、Sharding-Proxy和Sharding-Sidecar这三款相互独立的产品组成,他们均提供标准化的数据分片、分布式事务和数据库治理能力。
Sharding-JDBC,它定位为轻量级Java框架,在Java的JDBC层提供额外服务,它使用客户端直连数据库,以JAR包形式提供服务,无需额外部署和依赖,可理解为增强版的JDBC驱动,完全兼容JDBC和各种ORM框架。
Sharding-JDBC的核心功能为数据分片和读写分离,通过Sharding-JDBC,应用可以透明的使用JDBC访问已经分库分表、读写分离的各个数据源,而不用关心数据源的数量以及数据如何分布。
二、分库分表
分库分表主要是为了解决互联网应用的大数据量存储问题,分表通常分为:垂直划分、水平划分;垂直划分
通常是根据业务场景将一个多字段大表拆分成多个多个少字段小表,水平划分
就是数据的离散存储根据某个分片策略将同一个表的数据分开存到多个相同结构表中。
三,sharding提供的分片算法有哪些?
`StandardShardingStrategy` 标准分片策略。
`InlineShardingStrategy` Inline表达式分片策略。使用Groovy的Inline表达式。
`HintShardingStrategy` 通过Hint而非SQL解析的方式分片的策略。
`NoneShardingStrategy` 不分片的策略。
四,如何使用sharding-jdbc对数据离散存储呢?
InlineShardingStrategy 分片策列的使用;
第一步:引入相关pom依赖
<dependency>
<groupId>io.shardingsphere</groupId>
<artifactId>sharding-jdbc-spring-boot-starter</artifactId>
<version>3.1.0</version>
</dependency>
<dependency>
<groupId>io.shardingsphere</groupId>
<artifactId>sharding-jdbc-spring-namespace</artifactId>
<version>3.1.0</version>
</dependency>
第二步,准备两个数据库,db0和db1下面各有两张表,他们的结构是一样的只是名字不一样
第三步,配置yml文件,在yml文件sharding. jdbc.datasource
:下配置连接两个库数据源,如果分库分了更多个,那么配置的连接也可以增加 ,然后sharding.default-database-strategy
: 下配置分库分表的策略,这里分库分表的策列是采用的Groovy 行表达式,Inline表达式分片策略。使用Groovy的Inline表达式,提供对SQL语句中的=和IN的分片操作支持
app:
id: zt-frank-shardingSphere-service-9960
name: zt-frank-shardingSphere-service-9960
server:
port: 9960
spring:
application:
name: zt-frank-shardingSphere-service-9960 #Ribbon 做负载均衡 需要7001 7002,7003的spring.application.name 的名称一致
main:
allow-bean-definition-overriding: true #允许Bean重复注入,后者覆盖前者
#开始配置连接数据库
sharding:
jdbc:
datasource:
names: db0,db1
db0:
type: com.zaxxer.hikari.HikariDataSource
driver-class-name: com.mysql.cj.jdbc.Driver
jdbc-url: jdbc:mysql: