ShardingJdbc2.X学习总结系列(十):源码解析—读写分离(主从)

本文深入探讨了ShardingJdbc的读写分离功能,包括其配置、工作原理和适用场景。在非事务操作中,所有查询默认走从库;事务中,首次写操作后读操作转为主库。通过MasterSlaveDataSource和MasterSlaveConnection实现连接管理,使用负载均衡算法决定读库。不处理数据同步和延迟问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

        前面9篇文章主要是介绍了,shardingJdbc的介绍,使用,包括分库分表的源码解读,我们知道shardingJdbc不仅仅只有做分库分表的功能,还可以读写分离,并且可以支持分库分表+读写分离联合使用,这篇的话我们就来了解一下简单的读写分离是怎么实现的。

shardingJdbc读写分离支持 

1、提供了一主多从的读写分离配置,可独立使用,也可配合分库分表使用。

2、同一线程且同一数据库连接内,如有写入操作,以后的读操作均从主库读取,用于保证数据一致性。

3、Spring命名空间。

4、基于Hint的强制主库路由

不支持

1、主库和从库的数据同步。

2、主库和从库的数据同步延迟导致的数据不一致。

3、主库双写或多写。

具体什么情况下走master,什么情况下走slave

      1、如果不是事务方法,那么所有的查询都一定会走slave库

      2、如果是事务方法,那么第一个insert/update/delete语句之前的查询都会走slave库,之后的所有sql语句都会走master库

      3、通过HintManager配置,强制走主库

       这里的实现主要还是封装了connection(MasterSlaveConnection),dataSource(MasterSlaveDataSource),Statement(MasterSlavePreparedStatement)。

  我们会在配置中通过 MasterSlaveDataSourceFactory创建dataSource(MasterSlaveDataSource

public static DataSource createDataSource(final Map<String, DataSource> dataSourceMap, final MasterSlaveRuleConfiguration masterSlaveRuleConfig, 
                                              final Map<String, Object> configMap) throws SQLException {
        return new MasterSlaveDataSource(masterSlaveRuleConfig.build(dataSourceMap), configMap);
    }

然后会根据dataSource(MasterSlaveDataSource获取connection(MasterSlave

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值