命名空間說(shuō)明
sharding-jdbc在公司項(xiàng)目里主要采用xml文件配置,即命名空間的配置方式發(fā)現(xiàn)項(xiàng)目中有2種標(biāo)簽.
- rdb標(biāo)簽
- sharding標(biāo)簽
經(jīng)過(guò)查閱資料,rdb主要是sharding-jdbc 早期1.x版本采用的方式.目前主流采用sharding標(biāo)簽
目前官網(wǎng)對(duì)應(yīng)的是sharding標(biāo)簽方式. https://shardingsphere.apache.org/document/legacy/3.x/document/cn/manual/sharding-jdbc/configuration/config-spring-namespace/
案例如下:
rdb標(biāo)簽
<!--配置分庫(kù)策略-->
<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"/>
<!--構(gòu)建shardingDataSource-->
<rdb:data-source id="shardingDataSource">
<!--設(shè)置數(shù)據(jù)源-->
<rdb:sharding-rule data-sources="ds_0, ds_1">
<!--設(shè)置分表規(guī)則叫胖,邏輯表和真實(shí)表的對(duì)應(yīng)關(guān)系以及分庫(kù)分表的策略-->
<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標(biāo)簽
<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種方式不同點(diǎn)說(shuō)明
- maven依賴不同和引用xsd不同
rdb標(biāo)簽
<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標(biāo)簽
<dependency>
<groupId>org.apache.shardingsphere</groupId>
<artifactId>sharding-jdbc-spring-namespace</artifactId>
<version>4.0.0-RC3</version>
</dependency>
直接查看官網(wǎng)即可
-
分片分庫(kù)接口不同
rdb標(biāo)簽
image.png
public interface SingleKeyShardingAlgorithm<T extends Comparable<?>> extends ShardingAlgorithm {
/**
* 根據(jù)分片值和SQL的=運(yùn)算符計(jì)算分片結(jié)果名稱集合.
*
* @param availableTargetNames 所有的可用目標(biāo)名稱集合, 一般是數(shù)據(jù)源或表名稱
* @param shardingValue 分片值
* @return 分片后指向的目標(biāo)名稱, 一般是數(shù)據(jù)源或表名稱
*/
String doEqualSharding(Collection<String> availableTargetNames, ShardingValue<T> shardingValue);
/**
* 根據(jù)分片值和SQL的IN運(yùn)算符計(jì)算分片結(jié)果名稱集合.
*
* @param availableTargetNames 所有的可用目標(biāo)名稱集合, 一般是數(shù)據(jù)源或表名稱
* @param shardingValue 分片值
* @return 分片后指向的目標(biāo)名稱集合, 一般是數(shù)據(jù)源或表名稱
*/
Collection<String> doInSharding(Collection<String> availableTargetNames, ShardingValue<T> shardingValue);
/**
* 根據(jù)分片值和SQL的BETWEEN運(yùn)算符計(jì)算分片結(jié)果名稱集合.
*
* @param availableTargetNames 所有的可用目標(biāo)名稱集合, 一般是數(shù)據(jù)源或表名稱
* @param shardingValue 分片值
* @return 分片后指向的目標(biāo)名稱集合, 一般是數(shù)據(jù)源或表名稱
*/
Collection<String> doBetweenSharding(Collection<String> availableTargetNames, ShardingValue<T> shardingValue);
}
sharding標(biāo)簽
image.png
public interface PreciseShardingAlgorithm<T extends Comparable<?>> extends ShardingAlgorithm {
String doSharding(Collection<String> var1, PreciseShardingValue<T> var2);
}