前面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