mysql分表组件_利用Sharding-Jdbc组件实现分表
看到了當當開源的Sharding-JDBC組件,它可以在幾乎不修改代碼的情況下完成分庫分表的實現。摘抄其中一段介紹:
Sharding-JDBC直接封裝JDBC API,可以理解為增強版的JDBC驅動,舊代碼遷移成本幾乎為零:
可適用于任何基于java的ORM框架,如:JPA, Hibernate, Mybatis, Spring JDBC Template或直接使用JDBC。
可基于任何第三方的數據庫連接池,如:DBCP, C3P0, BoneCP, Druid等。
理論上可支持任意實現JDBC規范的數據庫。雖然目前僅支持MySQL,但已有支持Oracle,SQLServer,DB2等數據庫的計劃。
先做一個最簡單的試用,不做分庫,僅做分表。選擇數據表bead_information,首先復制成三個表:bead_information_0、bead_information_1、bead_information_2
測試實現過程
前提:已經實現srping+mybatis對單庫單表做增刪改查的項目。
1、修改pom.xml增加dependency
com.dangdang
sharding-jdbc-core
1.4.2
com.dangdang
sharding-jdbc-config-spring
1.4.0
2、新建一個sharding-jdbc.xml文件,實現分庫分表的配置
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:rdb="http://www.dangdang.com/schema/ddframe/rdb"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.dangdang.com/schema/ddframe/rdb
http://www.dangdang.com/schema/ddframe/rdb/rdb.xsd">
3、將文件引入spring配置文件中。
需要修改幾個地方,把sqlSessionFactory和transactionManager原來關聯的dataSource統一修改為shardingDataSource(這一步作用就是把數據源全部托管給sharding去管理)
4、實現分表(分庫)邏輯,我們的分表邏輯類需要實現SingleKeyTableShardingAlgorithm接口的三個方法doBetweenSharding、doEqualSharding、doInSharding
(取模除數需要按照自己需求改變,我這里分3個表,所以除以3)
import java.util.Collection;
import java.util.LinkedHashSet;
import com.dangdang.ddframe.rdb.sharding.api.ShardingValue;
import com.dangdang.ddframe.rdb.sharding.api.strategy.table.SingleKeyTableShardingAlgorithm;
import com.google.common.collect.Range;
public class MemberSingleKeyTableShardingAlgorithm implements SingleKeyTableShardingAlgorithm {
@Override
public Collection doBetweenSharding(Collection tableNames, ShardingValue shardingValue) {
Collection result = new LinkedHashSet(tableNames.size());
Range range = (Range) shardingValue.getValueRange();
for (Integer i = range.lowerEndpoint(); i <= range.upperEndpoint(); i++) {
Integer modValue = i % 3;
String modStr = modValue < 3 ? "" + modValue : modValue.toString();
for (String each : tableNames) {
if (each.endsWith(modStr)) {
result.add(each);
}
}
}
return result;
}
@Override
public String doEqualSharding(Collection tableNames, ShardingValue shardingValue) {
Integer modValue = shardingValue.getValue() % 3;
String modStr = modValue < 3 ? "" + modValue : modValue.toString();
for (String each : tableNames) {
if (each.endsWith(modStr)) {
return each;
}
}
throw new IllegalArgumentException();
}
@Override
public Collection doInSharding(Collection tableNames, ShardingValue shardingValue) {
Collection result = new LinkedHashSet(tableNames.size());
for (Integer value : shardingValue.getValues()) {
Integer modValue = value % 3;
String modStr = modValue < 3 ? "" + modValue : modValue.toString();
for (String tableName : tableNames) {
if (tableName.endsWith(modStr)) {
result.add(tableName);
}
}
}
return result;
}
}
5、配置完成,可以實現增刪改查測試。
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
總結
以上是生活随笔為你收集整理的mysql分表组件_利用Sharding-Jdbc组件实现分表的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python mysql链接安全_Pyt
- 下一篇: linux cmake编译源码,linu