成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

Spring Boot中整合Sharding-JDBC單庫分表示例

rottengeek / 2728人閱讀

摘要:本文是采用方式配置第二篇,第一篇是讀寫分離講解,請參考中整合讀寫分離示例在我微服務(wù)全棧技術(shù)與案例解析書中都是通過方式配置。多個表以逗號分隔,支持表達(dá)式。提供對語句中的和的分片操作支持。是必選的,用于處理和的分片。

本文是Sharding-JDBC采用Spring Boot Starter方式配置第二篇,第一篇是讀寫分離講解,請參考:《Spring Boot中整合Sharding-JDBC讀寫分離示例》

在我《Spring Cloud微服務(wù)-全棧技術(shù)與案例解析》書中都是通過XML方式配置。今天給大家演示的是單庫中分表的操作,如果用XML方式配置,那么就是下面的配置:

  
    
        
        
        
        
    
    

    
    
    
    
        
            
                
            
            
        
    

我們將user表分成了4個,分別是user_0,user_1,user_2,user_3,通過id取模的方式?jīng)Q定數(shù)據(jù)落在哪張表上面。

如果用Spring Boot方式配置自然就簡單多了,如下:

sharding.jdbc.datasource.names=ds_master
# 數(shù)據(jù)源
sharding.jdbc.datasource.ds_master.type=com.alibaba.druid.pool.DruidDataSource
sharding.jdbc.datasource.ds_master.driver-class-name=com.mysql.jdbc.Driver
sharding.jdbc.datasource.ds_master.url=jdbc:mysql://localhost:3306/ds_0?characterEncoding=utf-8
sharding.jdbc.datasource.ds_master.username=root
sharding.jdbc.datasource.ds_master.password=123456
# 分表配置
sharding.jdbc.config.sharding.tables.user.actual-data-nodes=ds_master.user_${0..3}
sharding.jdbc.config.sharding.tables.user.table-strategy.inline.sharding-column=id
sharding.jdbc.config.sharding.tables.user.table-strategy.inline.algorithm-expression=user_${id.longValue() % 4}

actual-data-nodes:真實數(shù)據(jù)節(jié)點,由數(shù)據(jù)源名 + 表名組成,以小數(shù)點分隔。多個表以逗號分隔,支持inline表達(dá)式。

table-strategy.inline.sharding-column:分片字段配置

table-strategy.inline.algorithm-expression:分片算法表達(dá)式

自定義分片算法

在1.x版本中,單分片算法是通過實現(xiàn)SingleKeyTableShardingAlgorithm,示例代碼如下:

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 UserSingleKeyTableShardingAlgorithm implements SingleKeyTableShardingAlgorithm  {

    public String doEqualSharding(Collection availableTargetNames, ShardingValue shardingValue) {
        for (String each : availableTargetNames) {
            System.out.println(each+"	"+shardingValue.getValue()+"	"+shardingValue.getValue() % 4 );
            if (each.endsWith(shardingValue.getValue() % 4 + "")) {
                return each;
            }
        }
        throw new IllegalArgumentException();
    }

    public Collection doInSharding(Collection availableTargetNames, ShardingValue shardingValue) {
         Collection result = new LinkedHashSet<>(availableTargetNames.size());
            for (Long value : shardingValue.getValues()) {
                for (String tableName : availableTargetNames) {
                    if (tableName.endsWith(value % 4 + "")) {
                        result.add(tableName);
                    }
                }
            }
            return result;
    }

    public Collection doBetweenSharding(Collection availableTargetNames,
            ShardingValue shardingValue) {
        Collection result = new LinkedHashSet<>(availableTargetNames.size());
        Range range = (Range) shardingValue.getValueRange();
        for (Long i = range.lowerEndpoint(); i <= range.upperEndpoint(); i++) {
            for (String each : availableTargetNames) {
                if (each.endsWith(i % 4 + "")) {
                    result.add(each);
                }
            }
        }
        return result;
    }

}

我們這邊引入的Spring Boot Starter包是2.x的版本,在這個版本中,分片算法的接口有調(diào)整,我們需要用到標(biāo)準(zhǔn)分片策略StandardShardingStrategy。提供對SQL語句中的=, IN和BETWEEN AND的分片操作支持。StandardShardingStrategy只支持單分片鍵,提供PreciseShardingAlgorithm和RangeShardingAlgorithm兩個分片算法。PreciseShardingAlgorithm是必選的,用于處理=和IN的分片。RangeShardingAlgorithm是可選的,用于處理BETWEEN AND分片,如果不配置RangeShardingAlgorithm,SQL中的BETWEEN AND將按照全庫路由處理。

自定義一個單分片算法

import java.util.Collection;
import io.shardingjdbc.core.api.algorithm.sharding.PreciseShardingValue;
import io.shardingjdbc.core.api.algorithm.sharding.standard.PreciseShardingAlgorithm;
/**
 * 自定義分片算法
 * 
 * @author yinjihuan
 *
 */
public class MyPreciseShardingAlgorithm implements PreciseShardingAlgorithm {

    @Override
    public String doSharding(Collection availableTargetNames, PreciseShardingValue shardingValue) {
        for (String tableName : availableTargetNames) {
            if (tableName.endsWith(shardingValue.getValue() % 4 + "")) {
                return tableName;
            }
        }
        throw new IllegalArgumentException();
    }

}

使用需要修改我們之前的配置

sharding.jdbc.config.sharding.tables.user.actual-data-nodes=ds_master.user_${0..3}
sharding.jdbc.config.sharding.tables.user.table-strategy.standard.sharding-column=id
sharding.jdbc.config.sharding.tables.user.table-strategy.standard.precise-algorithm-class-name=com.fangjia.sharding.MyPreciseShardingAlgorithm

源碼參考:
https://github.com/yinjihuan/...

參考代碼中測試的代碼也寫好了,在Controller中,啟動后通過調(diào)用接口的方式測試數(shù)據(jù)的添加和查詢。

另外Sharding-Sphere 3.0.0.M3也發(fā)布了,新版本看點:
1.XA分布式事務(wù)
2.數(shù)據(jù)庫治理模塊增強
3.API部分調(diào)整
4.修復(fù)M2Bug

項目地址:
https://github.com/sharding-s...
https://gitee.com/sharding-sp...

一個這么優(yōu)秀的框架,這么靠譜的研發(fā)團(tuán)隊,大家趕緊學(xué)起來呀!

歡迎加入我的知識星球,一起交流技術(shù),免費學(xué)習(xí)猿天地的課程(http://cxytiandi.com/course)

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/73596.html

相關(guān)文章

  • Spring Boot整合Sharding-JDBC讀寫分離示例

    摘要:今天就給大家介紹下方式的使用,主要講解讀寫分離的配置,其余的后面再介紹。主要還是用提供的,配置如下配置內(nèi)容如下主數(shù)據(jù)源從數(shù)據(jù)源讀寫分離配置查詢時的負(fù)載均衡算法,目前有種算法,輪詢和隨機(jī),算法接口是。 在我《Spring Cloud微服務(wù)-全棧技術(shù)與案例解析》書中,第18章節(jié)分庫分表解決方案里有對Sharding-JDBC的使用進(jìn)行詳細(xì)的講解。 之前是通過XML方式來配置數(shù)據(jù)源,讀寫分離...

    kbyyd24 評論0 收藏0
  • springboot實踐筆記之一:springboot+sharding-jdbc+mybatis全

    摘要:現(xiàn)在的分片策略是上海深圳分別建庫,每個庫都存各自交易所的兩支股票的,且按照月分表。五配置分片策略數(shù)據(jù)庫分片策略在這個實例中,數(shù)據(jù)庫的分庫就是根據(jù)上海和深圳來分的,在中是單鍵分片。 由于當(dāng)當(dāng)發(fā)布了最新的Sharding-Sphere,所以本文已經(jīng)過時,不日將推出新的版本 項目中遇到了分庫分表的問題,找到了shrding-jdbc,于是就搞了一個springboot+sharding-jd...

    Snailclimb 評論0 收藏0
  • Sharding-Jdbc實現(xiàn)mysql分庫分表

    摘要:實現(xiàn)數(shù)據(jù)庫分庫分表可以自己實現(xiàn),也可以使用和實現(xiàn)。分布式數(shù)據(jù)庫的自增不是自增的。分布式數(shù)據(jù)庫分頁查詢需要使用插入時間實現(xiàn)。包含分庫分片和讀寫分離功能。 Sharding-Jdbc實現(xiàn)mysql分庫分表 簡單介紹 數(shù)據(jù)庫分庫分表和讀寫分離區(qū)別,分庫分表是在多個庫建相同的表和同一個庫建不同的表,根據(jù)隨機(jī)或者哈希等方式查找實現(xiàn)。讀寫分離是為了解決數(shù)據(jù)庫的讀寫性能不足,使用主庫master進(jìn)行...

    go4it 評論0 收藏0
  • Apollo:微服務(wù)架構(gòu)下的配置管理

    摘要:比如使用的時候指定使用哪個環(huán)境的配置在微服務(wù)架構(gòu)下,服務(wù)的數(shù)量會比之前的單體應(yīng)用多,部署的節(jié)點數(shù)量也會很多。今天主要是講下在中如何對接進(jìn)行配置管理。 問題背景 在實際工作中,我們的開發(fā)環(huán)境,測試環(huán)境,生產(chǎn)環(huán)境對應(yīng)的 Mysql 數(shù)據(jù)庫,Redis 這些信息都不一樣,每個環(huán)境都有對應(yīng)的一套配置,在 Spring Boot 中我們通常會編寫多個配置文件,也就是每個環(huán)境一個配置文件。 比如:...

    cloud 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<