栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

利用Sharding-Jdbc组件实现分表

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

利用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文件,实现分库分表的配置



 
 
 
 
 
 
 
 
 
   
 
 
 
 
  
  
  
 
 
 
 
 
 

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、配置完成,可以实现增删改查测试。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持考高分网。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/140334.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号