激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - 利用Sharding-Jdbc組件實現分表

利用Sharding-Jdbc組件實現分表

2021-05-20 14:12huangheng_01 Java教程

這篇文章主要為大家詳細介紹了利用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

利用Sharding-Jdbc組件實現分表

測試實現過程

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

1、修改pom.xml增加dependency

?
1
2
3
4
5
6
7
8
9
10
<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文件,實現分庫分表的配置

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
<?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)

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
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、配置完成,可以實現增刪改查測試。

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

原文鏈接:https://www.cnblogs.com/huangheng01/p/9366325.html

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 亚洲视频网| 国产精品啪一品二区三区粉嫩 | 黄色免费播放网站 | 激情综合网俺也去 | 轻点插视频 | 一级黄色免费观看视频 | 欧美18videos性处按摩 | 免费毛片在线 | 精品黑人一区二区三区国语馆 | 日本在线视频免费观看 | 99视频网址 | 久久91久久| 又黄又爽免费无遮挡在线观看 | 成人免费视频视频在线观看 免费 | 日韩视频区 | 亚洲免费网站 | 美女扒开胸罩给男生看视频 | 欧美成人午夜一区二区三区 | 国产羞羞视频免费在线观看 | 久久久久久亚洲国产精品 | 精品三级内地国产在线观看 | 国产午夜精品久久久久 | 成人毛片一区二区三区 | aa国产视频一区二区 | 青青青在线免费 | 国产成人综合在线视频 | 天天夜碰日日摸日日澡性色av | 久久网页| 91成人午夜性a一级毛片 | 99影视在线视频免费观看 | 国内精品一级毛片免费看 | 国产日韩在线观看视频 | 欧美成人一级片 | 蜜桃传媒视频麻豆第一区免费观看 | 新久草在线视频 | h视频免费看 | 久久人人爽人人爽人人片av高清 | 97中文字幕第一一一页 | 在线中文字幕亚洲 | 九九视屏 | 国产成年人在线观看 |