命名空间说明
sharding-jdbc在公司项目里主要采用xml文件配置,即命名空间的配置方式发现项目中有2种标签.
- rdb标签
- sharding标签
经过查阅资料,rdb主要是sharding-jdbc 早期1.x版本采用的方式.目前主流采用sharding标签
目前官网对应的是sharding标签方式. https://shardingsphere.apache.org/document/legacy/3.x/document/cn/manual/sharding-jdbc/configuration/config-spring-namespace/
案例如下:
rdb标签
<!--配置分库策略-->
<rdb:strategy id="databaseShardingStrategy" sharding-columns="user_id" algorithm-class="com.dangdang.ddframe.rdb.sharding.example.jdbc.algorithm.SingleKeyModuloDatabaseShardingAlgorithm"/>
<!--配置分表策略-->
<rdb:strategy id="tableShardingStrategy" sharding-columns="order_id" algorithm-class="com.dangdang.ddframe.rdb.sharding.example.jdbc.algorithm.SingleKeyModuloTableShardingAlgorithm"/>
<!--构建shardingDataSource-->
<rdb:data-source id="shardingDataSource">
<!--设置数据源-->
<rdb:sharding-rule data-sources="ds_0, ds_1">
<!--设置分表规则,逻辑表和真实表的对应关系以及分库分表的策略-->
<rdb:table-rules>
<rdb:table-rule logic-table="t_order" actual-tables="t_order_${0..1}" database-strategy="databaseShardingStrategy" table-strategy="tableShardingStrategy">
<rdb:generate-key-column column-name="order_id"/>
</rdb:table-rule>
</rdb:table-rules>
</rdb:sharding-rule>
</rdb:data-source>
sharding标签
<sharding:inline-strategy id="databaseStrategy" sharding-column="user_id" algorithm-expression="ds_ms$->{user_id % 2}" />
<sharding:inline-strategy id="orderTableStrategy" sharding-column="order_id" algorithm-expression="t_order$->{order_id % 2}" />
<sharding:inline-strategy id="orderItemTableStrategy" sharding-column="order_id" algorithm-expression="t_order_item$->{order_id % 2}" />
<sharding:data-source id="shardingDataSource">
<sharding:sharding-rule data-source-names="ds_master0,ds_master0_slave0,ds_master0_slave1,ds_master1,ds_master1_slave0,ds_master1_slave1">
<sharding:master-slave-rules>
<sharding:master-slave-rule id="ds_ms0" master-data-source-name="ds_master0" slave-data-source-names="ds_master0_slave0, ds_master0_slave1" strategy-ref="randomStrategy" />
<sharding:master-slave-rule id="ds_ms1" master-data-source-name="ds_master1" slave-data-source-names="ds_master1_slave0, ds_master1_slave1" strategy-ref="randomStrategy" />
</sharding:master-slave-rules>
<sharding:table-rules>
<sharding:table-rule logic-table="t_order" actual-data-nodes="ds_ms$->{0..1}.t_order$->{0..1}" database-strategy-ref="databaseStrategy" table-strategy-ref="orderTableStrategy" generate-key-column-name="order_id" />
<sharding:table-rule logic-table="t_order_item" actual-data-nodes="ds_ms$->{0..1}.t_order_item$->{0..1}" database-strategy-ref="databaseStrategy" table-strategy-ref="orderItemTableStrategy" generate-key-column-name="order_item_id" />
</sharding:table-rules>
<sharding:binding-table-rules>
<sharding:binding-table-rule logic-tables="t_order, t_order_item" />
</sharding:binding-table-rules>
<sharding:broadcast-table-rules>
<sharding:broadcast-table-rule table="t_config" />
</sharding:broadcast-table-rules>
</sharding:sharding-rule>
</sharding:data-source>
2种方式不同点说明
- maven依赖不同和引用xsd不同
rdb标签
<dependency>
<groupId>com.dangdang</groupId>
<artifactId>sharding-jdbc-config-spring</artifactId>
<version>1.3.3</version>
</dependency>
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:rdb="http://www.dangdang.com/schema/ddframe/rdb"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-4.0.xsd
http://www.dangdang.com/schema/ddframe/rdb
http://www.dangdang.com/schema/ddframe/rdb/rdb.xsd
sharding标签
<dependency>
<groupId>org.apache.shardingsphere</groupId>
<artifactId>sharding-jdbc-spring-namespace</artifactId>
<version>4.0.0-RC3</version>
</dependency>
直接查看官网即可
-
分片分库接口不同
rdb标签
image.png
public interface SingleKeyShardingAlgorithm<T extends Comparable<?>> extends ShardingAlgorithm {
/**
* 根据分片值和SQL的=运算符计算分片结果名称集合.
*
* @param availableTargetNames 所有的可用目标名称集合, 一般是数据源或表名称
* @param shardingValue 分片值
* @return 分片后指向的目标名称, 一般是数据源或表名称
*/
String doEqualSharding(Collection<String> availableTargetNames, ShardingValue<T> shardingValue);
/**
* 根据分片值和SQL的IN运算符计算分片结果名称集合.
*
* @param availableTargetNames 所有的可用目标名称集合, 一般是数据源或表名称
* @param shardingValue 分片值
* @return 分片后指向的目标名称集合, 一般是数据源或表名称
*/
Collection<String> doInSharding(Collection<String> availableTargetNames, ShardingValue<T> shardingValue);
/**
* 根据分片值和SQL的BETWEEN运算符计算分片结果名称集合.
*
* @param availableTargetNames 所有的可用目标名称集合, 一般是数据源或表名称
* @param shardingValue 分片值
* @return 分片后指向的目标名称集合, 一般是数据源或表名称
*/
Collection<String> doBetweenSharding(Collection<String> availableTargetNames, ShardingValue<T> shardingValue);
}
sharding标签
image.png
public interface PreciseShardingAlgorithm<T extends Comparable<?>> extends ShardingAlgorithm {
String doSharding(Collection<String> var1, PreciseShardingValue<T> var2);
}