sharding jdbc初探
sharding jdbc初探
与其他中间件对比

Sharding-JDBC的整体架构图


SQL支持详细列表
JDBC未支持列表
简单分表实例:
maven 引用
<dependency>
<groupId>io.shardingjdbc</groupId>
<artifactId>sharding-jdbc-core</artifactId>
<version>2.0.0.M3</version>
</dependency>
<dependency>
<groupId>io.shardingjdbc</groupId>
<artifactId>sharding-jdbc-spring-namespace</artifactId>
<version>2.0.0.M3</version>
分库分表见:
http://shardingsphere.io/document/legacy/2.x/cn/02-guide/sharding/
实现了按某个字段所带的日期进行分表,供参考,后台的表半年一个,例如XXX_2018_1_6,XXX_2018_7_12
public final class PreciseModuloTableShardingAlgorithm implements PreciseShardingAlgorithm<String> {
@Override
public String doSharding(final Collection<String> availableTargetNames, final PreciseShardingValue<String> shardingValue) {
int year, month;
if (null != shardingValue && null != shardingValue.getValue()) {
String value = shardingValue.getValue();
year = Integer.valueOf(value.substring(0, 4));
month = Integer.valueOf(value.substring(4, 6));
} else {
LocalDate today = LocalDate.now();
year = today.getYear();
month = today.getMonthValue();
}
for (String each : availableTargetNames) {
//获取后缀
String[] split1 = each.split("_");
if (Integer.valueOf(split1[split1.length - 3]).equals(year)) {
if (Integer.valueOf(split1[split1.length - 2]) <= month && month <= Integer.valueOf(split1[split1.length - 1])) {
return each;
}
}
}
throw new UnsupportedOperationException();
}
}
源码分析参考:
- 《Sharding-JDBC 源码分析 —— SQL 解析(一)之词法解析》
- 《Sharding-JDBC 源码分析 —— SQL 解析(二)之SQL解析》
- 《Sharding-JDBC 源码分析 —— SQL 解析(三)之查询SQL》
- 《Sharding-JDBC 源码分析 —— SQL 解析(四)之插入SQL》
- 《Sharding-JDBC 源码分析 —— SQL 解析(五)之更新SQL》
- 《Sharding-JDBC 源码分析 —— SQL 解析(六)之删除SQL》
- 《Sharding-JDBC 源码分析 —— SQL 路由(一)之分库分表配置》
- 《Sharding-JDBC 源码分析 —— SQL 路由(二)之分库分表路由》
- 《Sharding-JDBC 源码分析 —— SQL 改写》
- 《Sharding-JDBC 源码分析 —— 分布式主键》
- 《Sharding-JDBC 源码分析 —— SQL 执行》
- 《Sharding-JDBC 源码分析 —— 结果归并》
- 《Sharding-JDBC 源码分析 —— JDBC实现与读写分离》
- 《Sharding-JDBC 源码分析 —— 分布式事务(一)之最大努力型》