亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

利用Sharding-Jdbc組件實現分表

發布時間:2020-10-07 18:52:43 來源:腳本之家 閱讀:145 作者:huangheng_01 欄目:編程語言

看到了當當開源的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

利用Sharding-Jdbc組件實現分表

測試實現過程

前提:已經實現srping+mybatis對單庫單表做增刪改查的項目。

1、修改pom.xml增加dependency

<dependency>
  <groupId>com.dangdang</groupId>
  <artifactId>sharding-jdbc-core</artifactId>
  <version>1.4.2</version>
 </dependency>
 <dependency>
  <groupId>com.dangdang</groupId>
  <artifactId>sharding-jdbc-config-spring</artifactId>
  <version>1.4.0</version>
</dependency> 

2、新建一個sharding-jdbc.xml文件,實現分庫分表的配置

<?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: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">
 
 
 
 <!-- 配置數據源 -->
 <bean name="dataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close">
 <property name="url" value="jdbc:mysql://localhost:3306/beadhouse" />
 <property name="username" value="root" />
 <property name="password" value="123456" />
 </bean>
   
 <rdb:strategy id="tableShardingStrategy" sharding-columns="id" algorithm-class="com.springdemo.utill.MemberSingleKeyTableShardingAlgorithm"/>
 
 <rdb:data-source id="shardingDataSource">
 <rdb:sharding-rule data-sources="dataSource">
  <rdb:table-rules>
  <rdb:table-rule logic-table="bead_information" actual-tables="bead_information_${0..2}" table-strategy="tableShardingStrategy"/>
  </rdb:table-rules>
 </rdb:sharding-rule>
 </rdb:data-source>
 
 <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
 <property name="dataSource" ref="shardingDataSource" />
 </bean>
</beans>

3、將文件引入spring配置文件中。

需要修改幾個地方,把sqlSessionFactory和transactionManager原來關聯的dataSource統一修改為shardingDataSource(這一步作用就是把數據源全部托管給sharding去管理)

利用Sharding-Jdbc組件實現分表

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<Integer> {

 @Override
 public Collection<String> doBetweenSharding(Collection<String> tableNames, ShardingValue<Integer> shardingValue) {
 Collection<String> result = new LinkedHashSet<String>(tableNames.size());
 Range<Integer> range = (Range<Integer>) 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<String> tableNames, ShardingValue<Integer> 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<String> doInSharding(Collection<String> tableNames, ShardingValue<Integer> shardingValue) {
 Collection<String> result = new LinkedHashSet<String>(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、配置完成,可以實現增刪改查測試。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持億速云。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

阿拉尔市| 芜湖县| 长丰县| 阜南县| 高邮市| 雅安市| 石狮市| 大邑县| 潞西市| 万山特区| 绿春县| 清涧县| 峨眉山市| 灵山县| 阳信县| 宜黄县| 博客| 贵州省| 万载县| 海淀区| 乡城县| 郎溪县| 甘泉县| 广饶县| 泌阳县| 会泽县| 阜新市| 福建省| 江油市| 柞水县| 洛川县| 拜泉县| 闽侯县| 襄城县| 浦县| 水城县| 四川省| 澄迈县| 镇沅| 临夏市| 萨迦县|