sharding jdbc 概述

 

官网:https://shardingsphere.apache.org/

 

*********************************************************

简  介

 

                        sharding jdbc 概述

基本特性:sharding jdbc定位为轻量级的java框架,以jar包形式提供服务,不需要额外部署,可理解为增强版的jdbc,完全兼容jdbc和各种orm框架,提供分库分表、读写分离、分布式事务、动态配置等功能

兼容各种orm框架,如:jpa、mybatis、jdbcTemplate等

使用任何三方数据库连接池,如:DBCP, C3P0, BoneCP, Druid, HikariCP等

支持多种数据库,目前支持MySQL,Oracle,SQLServer和PostgreSQL

 

 

***************************************************

分库分表

 

垂直分片:将表按业务类型划分,分散存储在多个数据库中,分摊单个数据库的压力,如果单表的数据量很大,还需结合水评分表将表中的数据进行拆分

水平分片:将表中的数据按照表的一个或多个字段进行拆分,每个分片仅有原来表的部分数据

                             sharding jdbc 概述     

                            sharding jdbc 概述

 

分库分表不可避免引来跨库事务,在实际处理中,应尽量使用同库不同表,用本地事务; 在不可避免的跨库和高并发场景中,可使用最终一致性的柔性事务确保业务的一致性(sharding jdbc提供了分布式事务功能saga、seata)

 

相关概念

逻辑表:未拆分前的数据表的名称

真实表:拆分后实际存储数据的表,如原表user为逻辑表,user_0,user_1等就为真实表

数据节点:真实的数据库名称+表的名称,如ds_0.user_0

绑定表:按照相同字段进行拆分的两张表,如order、order_item都使用同一order_id进行拆分,则order、order_item就为绑定表

 

分片键:拆分表的字段,如user根据id拆分,则id就为user标的分片键

 

分片算法:支持= 、between、in分片,根据业务场景,使用相关接口自行实现

精确分片算法:PreciseShardingAlgorithm,使用一个字段进行分片,支持=、in

范围分片算法:RangeShardingAlgorithm,使用一个字段进行分片键,支持between

复合分片算法:使用多个字段进行分片

hint分片算法:强制路由分片,需配合HintShardingStrategy使用

 

分片策略:分片键+分片算法

标准分片策略:提供PreciseShardingAlgorithm、RangeShardingAlgorithm两种算法,处理sql与语句中的=、in、between and,

PreciseShardingAlgorithm必选,用于处理=、in,RangeShardingAlgorithm可选,如不设置,处理between and时使用全表路由

复合分片策略:使用多分片建处理=、in、between and

行表达式分片策略:用Grooy表达式,直接在配置文件中进行分片配置,支持单分片对=、in进行处理

Hint分片策略:强制路由分片

不分片策略:不对数据库、表进行分片处理

 

数据库分片策略:DatabaseShardingStrategy,对数据库进行分片

表分片策略:TableShardingStrategy,对表进行分片

 

行表达式:$->{。。。。}

$->{1..3}:表示范围区间

$->{[a,b,c]}:表示枚举值

示例:ds$->{id%2}.user$->{id%2}表示ds0.user0,ds1.user0,ds1.user0,ds1.user1

 

***************************************************

读写分离:分散单台数据库的读压力

 

主库:插入、更新、删除使用主库,目前单独使用只支持单主库,可配合分库分表使用

从库:提供读服务,由于主从同步有一定的延时,会存在短暂的数据不一致

 

****************************************************

分布式事务

 

XA事务:两阶段事务,强一致性协议,无法满足高并发场景

saga柔性事务:将一个事务看成多个本地事务的组合,发生异常时,可选择向前重试,或者向后回滚

 

seata柔性事务:

TC(事务协调器):负责协调各事务的运行状态,需单独部署

TM(事务管理器):与TC建立长连接,负责事务的创建,并根据TC反馈的各分支事务的执行状态提交或者回滚全局事务

RM(全局事务参与者):与TC建立长连接,负责向TC汇报本地事务的执行状态,根据TC反馈信息提交或者回滚本地事务

                      sharding jdbc 概述

相关文章: