Skip to content

Commit 0e3fea0

Browse files
committed
四种分片策略
1 parent 378cdd8 commit 0e3fea0

15 files changed

+195
-124
lines changed

springboot-sharding-jdbc/pom.xml

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,13 +77,28 @@
7777
<artifactId>fastjson</artifactId>
7878
<version>1.2.49</version>
7979
</dependency>
80+
81+
<!-- devtools热部署依赖 -->
82+
<dependency>
83+
<groupId>org.springframework.boot</groupId>
84+
<artifactId>spring-boot-devtools</artifactId>
85+
<!-- 防止将依赖传递到其他模块中 -->
86+
<optional>true</optional>
87+
<!-- 只在运行时起作用,打包时不打进去(防止线上执行打包后的程序,启动文件监听线程File Watcher,耗费大量的内存资源) -->
88+
<scope>runtime</scope>
89+
</dependency>
90+
8091
</dependencies>
8192

8293
<build>
8394
<plugins>
8495
<plugin>
8596
<groupId>org.springframework.boot</groupId>
8697
<artifactId>spring-boot-maven-plugin</artifactId>
98+
<configuration>
99+
<!-- devtools依赖此配置(否则,devtools不生效)。 -->
100+
<fork>true</fork>
101+
</configuration>
87102
</plugin>
88103

89104
<plugin>

springboot-sharding-jdbc/src/main/java/com/xiaofu/sharding/algorithm/MyPreciseShardingAlgorithm.java

Lines changed: 0 additions & 24 deletions
This file was deleted.
Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package com.xiaofu.sharding.algorithm;
1+
package com.xiaofu.sharding.algorithm.dbAlgorithm;
22

33

44
import org.apache.shardingsphere.api.sharding.complex.ComplexKeysShardingAlgorithm;
@@ -7,7 +7,7 @@
77
import java.util.Collection;
88

99

10-
public class MyComplexKeysShardingAlgorithm implements ComplexKeysShardingAlgorithm<Long> {
10+
public class MyDBComplexKeysShardingAlgorithm implements ComplexKeysShardingAlgorithm<Long> {
1111

1212
@Override
1313
public Collection<String> doSharding(Collection<String> collection, ComplexKeysShardingValue<Long> complexKeysShardingValue) {

springboot-sharding-jdbc/src/main/java/com/xiaofu/sharding/algorithm/MyHintShardingAlgorithm.java renamed to springboot-sharding-jdbc/src/main/java/com/xiaofu/sharding/algorithm/dbAlgorithm/MyDBHintShardingAlgorithm.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package com.xiaofu.sharding.algorithm;
1+
package com.xiaofu.sharding.algorithm.dbAlgorithm;
22

33

44
import org.apache.shardingsphere.api.sharding.hint.HintShardingAlgorithm;
@@ -9,7 +9,7 @@
99
import java.util.List;
1010

1111

12-
public class MyHintShardingAlgorithm implements HintShardingAlgorithm {
12+
public class MyDBHintShardingAlgorithm implements HintShardingAlgorithm {
1313

1414
@Override
1515
public Collection<String> doSharding(Collection tableNames, HintShardingValue hintShardingValue) {
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
package com.xiaofu.sharding.algorithm.dbAlgorithm;
2+
3+
4+
import org.apache.shardingsphere.api.sharding.standard.PreciseShardingAlgorithm;
5+
import org.apache.shardingsphere.api.sharding.standard.PreciseShardingValue;
6+
7+
import java.util.Collection;
8+
9+
/**
10+
* @author xiaofu 公众号【程序员内点事】
11+
* @description 自定义标准分库策略
12+
* @date 2020/10/30 13:48
13+
*/
14+
public class MyDBPreciseShardingAlgorithm implements PreciseShardingAlgorithm<Long> {
15+
16+
@Override
17+
public String doSharding(Collection<String> databaseNames, PreciseShardingValue<Long> shardingValue) {
18+
19+
/**
20+
* databaseNames 所有分片库的集合
21+
* shardingValue 为分片属性,其中 logicTableName 为逻辑表,columnName 分片健(字段),value 为从 SQL 中解析出的分片健的值
22+
*/
23+
for (String databaseName : databaseNames) {
24+
String value = shardingValue.getValue() % databaseNames.size() + "";
25+
if (databaseName.endsWith(value)) {
26+
return databaseName;
27+
}
28+
}
29+
throw new IllegalArgumentException();
30+
}
31+
}
32+
33+
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
package com.xiaofu.sharding.algorithm.dbAlgorithm;
2+
3+
4+
import com.google.common.collect.Range;
5+
import org.apache.shardingsphere.api.sharding.standard.RangeShardingAlgorithm;
6+
import org.apache.shardingsphere.api.sharding.standard.RangeShardingValue;
7+
8+
import java.util.Collection;
9+
import java.util.LinkedHashSet;
10+
import java.util.Set;
11+
12+
13+
public class MyDBRangeShardingAlgorithm implements RangeShardingAlgorithm<Integer> {
14+
15+
16+
@Override
17+
public Collection<String> doSharding(Collection<String> databaseNames, RangeShardingValue<Integer> rangeShardingValue) {
18+
Set<String> result = new LinkedHashSet<>();
19+
20+
if (Range.closed(1000000000, 2000000000).encloses(rangeShardingValue.getValueRange())) {
21+
for (String databaseName : databaseNames) {
22+
if (databaseName.endsWith("0")) {
23+
result.add(databaseName);
24+
}
25+
}
26+
}
27+
return result;
28+
}
29+
30+
}
31+
32+
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
package com.xiaofu.sharding.algorithm.tableAlgorithm;
2+
3+
4+
import org.apache.shardingsphere.api.sharding.complex.ComplexKeysShardingAlgorithm;
5+
import org.apache.shardingsphere.api.sharding.complex.ComplexKeysShardingValue;
6+
7+
import java.util.Collection;
8+
9+
10+
public class MyTableComplexKeysShardingAlgorithm implements ComplexKeysShardingAlgorithm<Long> {
11+
12+
@Override
13+
public Collection<String> doSharding(Collection<String> collection, ComplexKeysShardingValue<Long> complexKeysShardingValue) {
14+
15+
// Collection<Integer> ids = getShardingValue(shardingValues, "id");
16+
// Collection<Integer> usernames = getShardingValue(shardingValues, "username");
17+
return null;
18+
}
19+
}
20+
21+
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
package com.xiaofu.sharding.algorithm.tableAlgorithm;
2+
3+
4+
import org.apache.shardingsphere.api.sharding.hint.HintShardingAlgorithm;
5+
import org.apache.shardingsphere.api.sharding.hint.HintShardingValue;
6+
7+
import java.util.ArrayList;
8+
import java.util.Collection;
9+
import java.util.List;
10+
11+
12+
public class MyTableHintShardingAlgorithm implements HintShardingAlgorithm {
13+
14+
@Override
15+
public Collection<String> doSharding(Collection tableNames, HintShardingValue hintShardingValue) {
16+
List<String> shardingResult = new ArrayList<>();
17+
for (Object targetName : tableNames) {
18+
19+
}
20+
return shardingResult;
21+
}
22+
}
23+
24+
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
package com.xiaofu.sharding.algorithm.tableAlgorithm;
2+
3+
4+
import org.apache.shardingsphere.api.sharding.standard.PreciseShardingAlgorithm;
5+
import org.apache.shardingsphere.api.sharding.standard.PreciseShardingValue;
6+
7+
import java.util.Collection;
8+
9+
/**
10+
* @author xiaofu 公众号【程序员内点事】
11+
* @description 自定义标准分表策略
12+
* @date 2020/10/30 13:48
13+
*/
14+
public class MyTablePreciseShardingAlgorithm implements PreciseShardingAlgorithm<Long> {
15+
16+
@Override
17+
public String doSharding(Collection<String> tableNames, PreciseShardingValue<Long> shardingValue) {
18+
19+
/**
20+
* tableNames 对应分片库中所有分片表的集合
21+
* shardingValue 为分片属性,其中 logicTableName 为逻辑表,columnName 分片健(字段),value 为从 SQL 中解析出的分片健的值
22+
*/
23+
for (String tableName : tableNames) {
24+
/**
25+
* 取模算法,分片健 % 表数量
26+
*/
27+
String value = shardingValue.getValue() % tableNames.size() + "";
28+
if (tableName.endsWith(value)) {
29+
return tableName;
30+
}
31+
}
32+
throw new IllegalArgumentException();
33+
}
34+
}
35+
36+

springboot-sharding-jdbc/src/main/java/com/xiaofu/sharding/algorithm/MyRangeShardingAlgorithm.java renamed to springboot-sharding-jdbc/src/main/java/com/xiaofu/sharding/algorithm/tableAlgorithm/MyTableRangeShardingAlgorithm.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package com.xiaofu.sharding.algorithm;
1+
package com.xiaofu.sharding.algorithm.tableAlgorithm;
22

33

44
import com.google.common.collect.Range;
@@ -10,7 +10,7 @@
1010
import java.util.Set;
1111

1212

13-
public class MyRangeShardingAlgorithm implements RangeShardingAlgorithm<Integer> {
13+
public class MyTableRangeShardingAlgorithm implements RangeShardingAlgorithm<Integer> {
1414

1515
@Override
1616
public Collection<String> doSharding(Collection<String> tableNames, RangeShardingValue<Integer> rangeShardingValue) {

0 commit comments

Comments
 (0)