精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

DIY 三種分庫(kù)分表分片算法,自己寫(xiě)的輪子才吊!

數(shù)據(jù)庫(kù) 其他數(shù)據(jù)庫(kù)
本文介紹了 STANDARD、COMPLEX 和 HINT 三種自定義分片算法的實(shí)現(xiàn),和使用過(guò)程中一些要注意的事項(xiàng)。ShardingSphere 內(nèi)置的十幾種算法,其實(shí)已經(jīng)可以滿足我們絕大部分的業(yè)務(wù)場(chǎng)景,不過(guò),如果考慮到后續(xù)的性能優(yōu)化和擴(kuò)展性,定制分片算法是個(gè)不錯(cuò)的選擇。

前言

本文是《ShardingSphere5.x分庫(kù)分表原理與實(shí)戰(zhàn)》系列的第六篇,書(shū)接上文實(shí)現(xiàn)三種自定義分片算法。通過(guò)自定義算法,可以根據(jù)特定業(yè)務(wù)需求定制分片策略,以滿足不同場(chǎng)景下的性能、擴(kuò)展性或數(shù)據(jù)處理需求。同時(shí),可以優(yōu)化分片算法以提升系統(tǒng)性能,規(guī)避數(shù)據(jù)傾斜等問(wèn)題。

在這里,自定義分片算法的類型(Type)統(tǒng)一為CLASS_BASED,包含兩個(gè)屬性:strategy 表示分片策略類型,目前支持三種:STANDARD、COMPLEX、HINT;algorithmClassName 表示自定義分片算法的實(shí)現(xiàn)類路徑。此外,還可以向算法類內(nèi)傳入自定義屬性。

圖片圖片

自定義 STANDARD 算法

要實(shí)現(xiàn)自定義 STANDARD 標(biāo)準(zhǔn)算法,需要實(shí)現(xiàn)StandardShardingAlgorithm<T>接口( T 代表接收的分片健值類型),并重寫(xiě)接口中的四個(gè)方法。其中,有兩個(gè) doSharding() 方法為處理分片的核心邏輯;getProps() 方法用于獲取分片算法的配置信息;init() 方法則用于初始化分片算法的配置信息,支持動(dòng)態(tài)修改。

5.X 以后的版本,實(shí)現(xiàn)自定義標(biāo)準(zhǔn)算法的精準(zhǔn)分片和范圍分片,不在需要實(shí)現(xiàn)多個(gè)接口。只用實(shí)現(xiàn) StandardShardingAlgorithm 標(biāo)準(zhǔn)算法接口,重寫(xiě)兩個(gè) doSharding() 方法。doSharding(availableTargetNames,rangeShardingValue) 處理含有 >、<、between and 等操作符的 SQL,doSharding(availableTargetNames,preciseShardingValue) 處理含有 = 、in 等操作符的 SQL。

精準(zhǔn)分片

精準(zhǔn)分片用于SQL中包含 in、= 等操作符的場(chǎng)景,支持單一分片健。

重寫(xiě)方法 doSharding(Collection availableTargetNames, PreciseShardingValue preciseShardingValue),該方法返回單一的分片數(shù)據(jù)源或分片表數(shù)據(jù)。有兩個(gè)參數(shù):一個(gè)是可用目標(biāo)分庫(kù)、分表的集合,另一個(gè)是精準(zhǔn)分片屬性對(duì)象。

圖片圖片

PreciseShardingValue 對(duì)象屬性數(shù)據(jù)格式如下:

{
  "columnName": "order_id", // 分片健
  "dataNodeInfo": {  
    "paddingChar": "0",
    "prefix": "db",   // 數(shù)據(jù)節(jié)點(diǎn)信息前綴,例如:分庫(kù)時(shí)為db,分表時(shí)為分片表t_order_
    "suffixMinLength": 1
  },
  "logicTableName": "t_order", // 邏輯表
  "value": 1 // 分片健值
}

范圍分片

范圍分片用于 SQL中包含 >、< 等范圍操作符的場(chǎng)景,支持單一分片健。

重寫(xiě)方法 doSharding(Collection availableTargetNames, RangeShardingValue rangeShardingValue),該方法可以返回多個(gè)分片數(shù)據(jù)源或分片表數(shù)據(jù)。有兩個(gè)參數(shù):一個(gè)是可用目標(biāo)分庫(kù)、分表的集合,另一個(gè)是精準(zhǔn)分片屬性對(duì)象。

圖片圖片

RangeShardingValue 對(duì)象屬性數(shù)據(jù)格式如下:

{
  "columnName": "order_id", // 分片健
  "dataNodeInfo": {
    "paddingChar": "0",
    "prefix": "db",  // 數(shù)據(jù)節(jié)點(diǎn)前綴,分庫(kù)時(shí)為數(shù)據(jù)源,分表時(shí)為分片表t_order_
    "suffixMinLength": 1
  },
  "logicTableName": "t_order", // 邏輯表
  "valueRange": [0,∞]  // 分片健值的范圍數(shù)據(jù)
}

精準(zhǔn)分片算法的 doSharding() 執(zhí)行流程:從PreciseShardingValue.getValue()中獲取分片鍵值,然后經(jīng)過(guò)計(jì)算得出相應(yīng)編號(hào),最終在availableTargetNames可用目標(biāo)分庫(kù)、分片表集合中選擇以一個(gè)符合的返回。

范圍分片算法的 doSharding() 執(zhí)行流程:從RangeShardingValue.getValueRange()方法獲取分片鍵的數(shù)值范圍,然后經(jīng)過(guò)計(jì)算得出相應(yīng)編號(hào),最終在availableTargetNames可用目標(biāo)分庫(kù)、分片表集合中選擇多個(gè)符合的返回。

下面是具體實(shí)現(xiàn)分片的邏輯:

/**
 * 自定義標(biāo)準(zhǔn)分片算法
 *
 * @author 公眾號(hào):程序員小富
 * @date 2024/03/22 11:02
 */
@Slf4j
public class OrderStandardCustomAlgorithm implements StandardShardingAlgorithm<Long> {

    /**
     * 精準(zhǔn)分片進(jìn)入 sql中有 = 和 in 等操作符會(huì)執(zhí)行
     *
     * @param availableTargetNames 所有分片表的集合
     * @param shardingValue        分片健的值,SQL中解析出來(lái)的分片值
     */
    @Override
    public String doSharding(Collection<String> availableTargetNames,
                             PreciseShardingValue<Long> shardingValue) {
        /**
         * 分庫(kù)策略使用時(shí):availableTargetNames 參數(shù)數(shù)據(jù)為分片庫(kù)的集合 ["db0","db1"]
         * 分表策略使用時(shí):availableTargetNames 參數(shù)數(shù)據(jù)為分片庫(kù)的集合 ["t_order_0","t_order_1","t_order_2"]
         */
        log.info("進(jìn)入精準(zhǔn)分片 precise availableTargetNames:{}", JSON.toJSONString(availableTargetNames));

        /**
         * 分庫(kù)策略使用時(shí):shardingValue 參數(shù)數(shù)據(jù):{"columnName":"order_id","dataNodeInfo":{"paddingChar":"0","prefix":"db","suffixMinLength":1},"logicTableName":"t_order","value":1}
         * 分表策略使用時(shí):shardingValue 參數(shù)數(shù)據(jù):{"columnName":"order_id","dataNodeInfo":{"paddingChar":"0","prefix":"t_order_","suffixMinLength":1},"logicTableName":"t_order","value":1}
         */
        log.info("進(jìn)入精準(zhǔn)分片 preciseShardingValue:{}", JSON.toJSONString(shardingValue));
        int tableSize = availableTargetNames.size();
        // 真實(shí)表的前綴
        String tablePrefix = shardingValue.getDataNodeInfo().getPrefix();
        // 分片健的值
        long orderId = shardingValue.getValue();
        // 對(duì)分片健取模后確定位置
        long mod = orderId % tableSize;
        return tablePrefix + mod;
    }

    /**
     * 范圍分片進(jìn)入 sql中有 between 和  < > 等操作符會(huì)執(zhí)行
     *
     * @param availableTargetNames 所有分片表的集合
     * @param shardingValue        分片健的值,SQL中解析出來(lái)的分片值
     * @return
     */
    @Override
    public Collection<String> doSharding(Collection<String> availableTargetNames,
                                         RangeShardingValue<Long> shardingValue) {
        /**
         * 分庫(kù)策略使用時(shí):availableTargetNames 參數(shù)數(shù)據(jù)為分片庫(kù)的集合 ["db0","db1"]
         * 分表策略使用時(shí):availableTargetNames 參數(shù)數(shù)據(jù)為分片庫(kù)的集合 ["t_order_0","t_order_1","t_order_2"]
         */
        log.info("進(jìn)入范圍分片:range availableTargetNames:{}", JSON.toJSONString(availableTargetNames));


        /**
         * 分庫(kù)策略使用時(shí) shardingValue 參數(shù)數(shù)據(jù):{"columnName":"order_id","dataNodeInfo":{"paddingChar":"0","prefix":"db","suffixMinLength":1},"logicTableName":"t_order","valueRange":{"empty":false}}
         * 分表策略使用時(shí) shardingValue 參數(shù)數(shù)據(jù):{"columnName":"order_id","dataNodeInfo":{"paddingChar":"0","prefix":"t_order_","suffixMinLength":1},"logicTableName":"t_order","valueRange":{"empty":false}}
         */
        log.info("進(jìn)入范圍分片:rangeShardingValue:{}", JSON.toJSONString(shardingValue));
        // 分片健值的下邊界
        Range<Long> valueRange = shardingValue.getValueRange();
        Long lower = valueRange.lowerEndpoint();
        // 分片健值的上邊界
        Long upper = valueRange.upperEndpoint();
        // 真實(shí)表的前綴
        String tablePrefix = shardingValue.getDataNodeInfo().getPrefix();
        if (lower != null && upper != null) {
            // 分片健的值
            long orderId = upper - lower;
            // 對(duì)分片健取模后確定位置
            long mod = orderId % availableTargetNames.size();
            return Arrays.asList(tablePrefix + mod);
        }
        //
        return Collections.singletonList("t_order_0");
    }

    @Override
    public Properties getProps() {
        return null;
    }

    /**
     * 初始化配置
     *
     * @param properties
     */
    @Override
    public void init(Properties properties) {
        Object prop = properties.get("prop");
        log.info("配置信息:{}", JSON.toJSONString(prop));
    }
}

配置算法

在實(shí)現(xiàn)了自定義分片算法的兩個(gè) doSharding() 核心邏輯之后,接著配置并使用定義的算法。配置屬性包括strategy分片策略類型設(shè)置成standard,algorithmClassName自定義標(biāo)準(zhǔn)算法的實(shí)現(xiàn)類全路徑。需要注意的是:策略和算法類型必須保持一致,否則會(huì)導(dǎo)致錯(cuò)誤。

spring:
  shardingsphere:
    rules:
      sharding:
        # 分片算法定義
        sharding-algorithms:
          t_order_database_mod:
            type: MOD
            props:
              sharding-count: 2 # 指定分片數(shù)量
          # 12、自定義 STANDARD 標(biāo)準(zhǔn)算法
          t_order_standard_custom_algorithm:
            type: CLASS_BASED
            props:
              # 分片策略
              strategy: standard
              # 分片算法類
              algorithmClassName: com.shardingsphere_101.algorithm.OrderStandardCustomAlgorithm
              # 自定義屬性
              prop:
                aaaaaa: 123456
                bbbbbb: 654321
        tables:
          # 邏輯表名稱
          t_order:
            # 數(shù)據(jù)節(jié)點(diǎn):數(shù)據(jù)庫(kù).分片表
            actual-data-nodes: db$->{0..1}.t_order_${0..2}
            # 分庫(kù)策略
            database-strategy:
              standard:
                sharding-column: order_id
                sharding-algorithm-name: t_order_database_mod
            # 分表策略
            table-strategy:
              standard:
                sharding-column: order_id
                sharding-algorithm-name: t_order_standard_custom_algorithm

測(cè)試算法

在插入測(cè)試數(shù)據(jù)時(shí),默認(rèn)會(huì)自動(dòng)進(jìn)入精確分片的 doSharding() 方法內(nèi),看到該方法會(huì)獲取分片鍵的數(shù)值,根據(jù)我們的計(jì)算規(guī)則確定返回一個(gè)目標(biāo)分片表用于路由。

圖片圖片

接著執(zhí)行一個(gè)范圍查詢的 SQL,此時(shí)將進(jìn)入范圍分片的 doSharding() 方法。通過(guò)觀察 shardingValue.getValueRange() 方法中分片鍵的數(shù)值范圍,可以發(fā)現(xiàn)這些數(shù)值范圍是從SQL查詢中解析得到的。

select * from t_order where order_id > 1 and order_id < 10

圖片圖片

自定義 COMPLEX 算法

復(fù)合分片算法支持包含 >,>=, <=,<,=,IN 和 BETWEEN AND 等操作符的SQL,支持多分片健。

自定義COMPLEX復(fù)合分片算法,需要我們實(shí)現(xiàn) ComplexKeysShardingAlgorithm<T> 接口(其中 T 代表接收的分片鍵值類型),并重寫(xiě)該接口內(nèi)部的 3 個(gè)方法。其中,主要關(guān)注用于處理核心分片邏輯的 doSharding()方法,可以返回多個(gè)分片數(shù)據(jù)源或分片表數(shù)據(jù);其他兩個(gè)配置方法與上述類似,這里不再贅述。

重寫(xiě)復(fù)合分片方法 doSharding(Collection availableTargetNames, ComplexKeysShardingValue shardingValues) 實(shí)現(xiàn)定制的多分片健邏輯,該方法有兩個(gè)參數(shù):一個(gè)是可用目標(biāo)分庫(kù)、分表的集合;另一個(gè)是多分片健屬性對(duì)象。

圖片圖片

logicTableName為邏輯表名,columnNameAndShardingValuesMap用于存儲(chǔ)多個(gè)分片鍵和對(duì)應(yīng)的鍵值,columnNameAndRangeValuesMap用于存儲(chǔ)多個(gè)分片鍵和對(duì)應(yīng)的鍵值范圍。

ComplexKeysShardingValue數(shù)據(jù)結(jié)構(gòu)如下:

public final class ComplexKeysShardingValue<T extends Comparable<?>> implements ShardingValue {
    // 邏輯表
    private final String logicTableName;
    // 多分片健及其數(shù)值
    private final Map<String, Collection<T>> columnNameAndShardingValuesMap;
    // 多分片健及其范圍數(shù)值
    private final Map<String, Range<T>> columnNameAndRangeValuesMap;
}

核心流程:通過(guò)循環(huán) Map 得到多個(gè)分片健值進(jìn)行計(jì)算,從 availableTargetNames 可用目標(biāo)分庫(kù)、分片表集合中選擇多個(gè)符合條件的返回。

/**
 * 自定義復(fù)合分片算法
 *
 * @author 公眾號(hào):程序員小富
 * @date 2024/03/22 11:02
 */
@Slf4j
public class OrderComplexCustomAlgorithm implements ComplexKeysShardingAlgorithm<Long> {

    /**
     * 復(fù)合分片算法進(jìn)入,支持>,>=, <=,<,=,IN 和 BETWEEN AND 等操作符
     *
     * @param availableTargetNames 所有分片表的集合
     * @param complexKeysShardingValue        多個(gè)分片健的值,并SQL中解析出來(lái)的分片值
     */
    @Override
    public Collection<String> doSharding(Collection<String> availableTargetNames,
                                         ComplexKeysShardingValue<Long> complexKeysShardingValue) {

        /**
         * 分庫(kù)策略使用時(shí):availableTargetNames 參數(shù)數(shù)據(jù)為分片庫(kù)的集合 ["db0","db1"]
         * 分表策略使用時(shí):availableTargetNames 參數(shù)數(shù)據(jù)為分片庫(kù)的集合 ["t_order_0","t_order_1","t_order_2"]
         */
        log.info("進(jìn)入復(fù)合分片:complex availableTargetNames:{}", JSON.toJSONString(availableTargetNames));

        // 多分片健和其對(duì)應(yīng)的分片健范圍值
        Map<String, Range<Long>> columnNameAndRangeValuesMap = complexKeysShardingValue.getColumnNameAndRangeValuesMap();
        log.info("進(jìn)入復(fù)合分片:columnNameAndRangeValuesMap:{}", JSON.toJSONString(columnNameAndRangeValuesMap));

        columnNameAndRangeValuesMap.forEach((columnName, range) -> {
            // 分片健
            log.info("進(jìn)入復(fù)合分片:columnName:{}", columnName);
            // 分片健范圍值
            log.info("進(jìn)入復(fù)合分片:range:{}", JSON.toJSONString(range));
        });

        // 多分片健和其對(duì)應(yīng)的分片健值
        Map<String, Collection<Long>> columnNameAndShardingValuesMap = complexKeysShardingValue.getColumnNameAndShardingValuesMap();
        log.info("進(jìn)入復(fù)合分片:columnNameAndShardingValuesMap:{}", JSON.toJSONString(columnNameAndShardingValuesMap));
        columnNameAndShardingValuesMap.forEach((columnName, shardingValues) -> {
            // 分片健
            log.info("進(jìn)入復(fù)合分片:columnName:{}", columnName);
            // 分片健值
            log.info("進(jìn)入復(fù)合分片:shardingValues:{}", JSON.toJSONString(shardingValues));
        });

        return null;
    }
}

配置算法

處理完復(fù)合分片算法的doSharding()核心邏輯,接著配置使用定義的算法,配置屬性包括strategy分片策略類型設(shè)置成complex,algorithmClassName自定義算法的實(shí)現(xiàn)類全路徑。

需要注意:配置分片鍵時(shí),一定要使用 sharding-columns 表示復(fù)數(shù)形式,很容易出錯(cuò)。

spring:
  shardingsphere:
    rules:
      sharding:
        sharding-algorithms:
          t_order_database_mod:
            type: MOD
            props:
              sharding-count: 2 # 指定分片數(shù)量
          # 13、自定義 complex 標(biāo)準(zhǔn)算法
          t_order_complex_custom_algorithm:
            type: CLASS_BASED
            props:
              # 分片策略
              strategy: complex
              # 分片算法類
              algorithmClassName: com.shardingsphere_101.algorithm.OrderComplexCustomAlgorithm
              # 自定義屬性
              aaaaaa: aaaaaa
        tables:
          # 邏輯表名稱
          t_order:
            # 數(shù)據(jù)節(jié)點(diǎn):數(shù)據(jù)庫(kù).分片表
            actual-data-nodes: db$->{0..1}.t_order_${0..2}
            # 分庫(kù)策略
            database-strategy:
              standard:
                sharding-column: order_id
                sharding-algorithm-name: t_order_database_mod
            # 分表策略
            table-strategy:
              complex:
                sharding-columns: order_id , user_id
                sharding-algorithm-name: t_order_complex_custom_algorithm

測(cè)試算法

插入測(cè)試數(shù)據(jù),debug 進(jìn)入 doSharding() 方法,看到columnNameAndShardingValuesMap內(nèi)獲取到了 user_id 、order_id 兩個(gè)分片鍵及健值。

圖片圖片

當(dāng)執(zhí)行范圍查詢的SQL,columnNameAndRangeValuesMap屬性內(nèi)獲取到了 user_id、order_id 兩個(gè)分片鍵及健值范圍,通過(guò)range.upperEndpoint()、lowerEndpoint()得到上下界值。

select * from t_order where order_id > 1 and user_id > 1;

圖片圖片

自定義 HINT 算法

要實(shí)現(xiàn)自定義HINT強(qiáng)制路由分片算法,需要實(shí)現(xiàn) HintShardingAlgorithm<T> 接口( T 代表接收的分片鍵值類型)。在實(shí)現(xiàn)過(guò)程中,需要重寫(xiě)接口中的3個(gè)方法。其中,核心的分片邏輯在 doSharding() 方法中處理,可以支持返回多個(gè)分片數(shù)據(jù)源或分片表數(shù)據(jù)。另外,其他兩個(gè)prop配置方法的使用方式與上述相同,這里不贅述。

重寫(xiě) HINT 核心分片方法 doSharding(Collection availableTargetNames, HintShardingValue shardingValue),以實(shí)現(xiàn)我們的定制邏輯。該方法接受兩個(gè)參數(shù):一個(gè)是可用目標(biāo)分庫(kù)、分表的集合,另一個(gè)是 Hint 分片屬性對(duì)象。

圖片圖片

方法內(nèi)執(zhí)行流程:我們首先獲取 HintManager API 設(shè)置的分庫(kù)或分表的分片值,經(jīng)過(guò)計(jì)算后得到合適的分片數(shù)據(jù)源或分片表集合,然后直接路由到目標(biāo)位置,無(wú)需再關(guān)注SQL本身的條件信息。

/**
 * 自定義強(qiáng)制路由分片算法
 *
 * @author 公眾號(hào):程序員小富
 * @date 2024/03/22 11:02
 */
@Slf4j
public class OrderHintCustomAlgorithm implements HintShardingAlgorithm<Long> {

    @Override
    public Collection<String> doSharding(Collection<String> availableTargetNames, HintShardingValue<Long> hintShardingValue) {

        /**
         * 獲取到設(shè)置的分表或者分庫(kù)的分片值
         * 指定分表時(shí)的分片值  hintManager.addTableShardingValue("t_order",2L);
         * 指定分庫(kù)時(shí)的分片值  hintManager.addDatabaseShardingValue("t_order", 100L);
         */
        Collection<Long> values = hintShardingValue.getValues();
        Collection<String> result = new ArrayList<>();
        // 從所有分片表中得到合適的分片表
        for (String each : availableTargetNames) {
            for (Long value : values) {
                Long mod = value % availableTargetNames.size();
                if (each.endsWith(String.valueOf(mod))) {
                    result.add(each);
                }
            }
        }
        return result;
    }
}

配置算法

配置自定義Hint算法,配置屬性包括strategy分片策略類型設(shè)置成hint,algorithmClassName自定義Hint算法的實(shí)現(xiàn)類全路徑。使用該算法時(shí)無(wú)需指定分片健!

spring:
  shardingsphere:
    # 具體規(guī)則配置
    rules:
      sharding:
        # 分片算法定義
        sharding-algorithms:
          t_order_database_mod:
            type: MOD
            props:
              sharding-count: 2 # 指定分片數(shù)量
          # 14、自定義 hint 標(biāo)準(zhǔn)算法
          t_order_hint_custom_algorithm:
            type: CLASS_BASED
            props:
              # 分片策略
              strategy: hint
              # 分片算法類
              algorithmClassName: com.shardingsphere_101.algorithm.OrderHintCustomAlgorithm
              # 自定義屬性
              bbbbbb: bbbbbb
        tables:
          # 邏輯表名稱
          t_order:
            # 數(shù)據(jù)節(jié)點(diǎn):數(shù)據(jù)庫(kù).分片表
            actual-data-nodes: db$->{0..1}.t_order_${0..2}
            # 分庫(kù)策略
            database-strategy:
              hint:
                sharding-algorithm-name: t_order_database_mod
            # 分表策略
            table-strategy:
              hint:
                sharding-algorithm-name: t_order_hint_custom_algorithm

測(cè)試算法

在執(zhí)行SQL操作之前,使用 HintManager API 的 addDatabaseShardingValue和 addTableShardingValue方法來(lái)指定分庫(kù)或分表的分片值,這樣算法內(nèi)通過(guò) HintShardingValue 可以獲取到分片值。注意:如果在執(zhí)行 SQL 時(shí)沒(méi)有使用 HintManager 指定分片值,那么執(zhí)行SQL將會(huì)執(zhí)行全庫(kù)表路由。

@DisplayName("Hint 自動(dòng)義分片算法-范圍查詢")
@Test
public void queryHintTableTest() {

    HintManager hintManager = HintManager.getInstance();
    // 指定分表時(shí)的分片值
    hintManager.addTableShardingValue("t_order",2L);
    // 指定分庫(kù)時(shí)的分片值
    hintManager.addDatabaseShardingValue("t_order", 100L);

    QueryWrapper<OrderPo> queryWrapper = new QueryWrapper<OrderPo>()
            .eq("user_id", 20).eq("order_id", 10);
    List<OrderPo> orderPos = orderMapper.selectList(queryWrapper);
    log.info("查詢結(jié)果:{}", JSON.toJSONString(orderPos));
}

圖片圖片

到這關(guān)于 shardingsphere-jdbc 的 3種自定義分片算法實(shí)現(xiàn)就全部結(jié)束了。

總結(jié)

本文介紹了 STANDARD、COMPLEX 和 HINT 三種自定義分片算法的實(shí)現(xiàn),和使用過(guò)程中一些要注意的事項(xiàng)。ShardingSphere 內(nèi)置的十幾種算法,其實(shí)已經(jīng)可以滿足我們絕大部分的業(yè)務(wù)場(chǎng)景,不過(guò),如果考慮到后續(xù)的性能優(yōu)化和擴(kuò)展性,定制分片算法是個(gè)不錯(cuò)的選擇。

責(zé)任編輯:武曉燕 來(lái)源: 程序員小富
相關(guān)推薦

2024-06-26 00:34:12

2024-03-26 09:42:27

分片算法應(yīng)用

2023-03-28 07:46:46

go語(yǔ)言kubernetes

2023-08-26 20:08:15

分庫(kù)分表Spring

2024-02-26 08:39:39

分庫(kù)分表數(shù)量

2022-12-09 09:21:10

分庫(kù)分表算法

2020-07-30 17:59:34

分庫(kù)分表SQL數(shù)據(jù)庫(kù)

2024-04-01 08:00:00

MySQL關(guān)聯(lián)設(shè)計(jì)數(shù)據(jù)庫(kù)

2019-11-12 09:54:20

分庫(kù)分表數(shù)據(jù)

2009-08-26 18:14:11

C#排序算法

2009-12-10 15:46:22

動(dòng)態(tài)路由協(xié)議

2024-07-26 00:16:11

2021-08-10 15:44:37

PostgreSQL表分區(qū)分區(qū)表

2011-01-18 15:35:59

jQueryJavaScriptweb

2022-07-11 08:16:47

NewSQL關(guān)系數(shù)據(jù)庫(kù)系統(tǒng)

2010-09-30 11:20:35

DB2表靜默狀態(tài)

2021-08-31 20:21:11

VitessMySQL分庫(kù)

2020-05-25 09:39:10

Elasticsear查詢分庫(kù)分表

2023-08-11 08:59:49

分庫(kù)分表數(shù)據(jù)數(shù)據(jù)庫(kù)

2020-11-18 09:39:02

MySQL數(shù)據(jù)庫(kù)SQL
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

国产黄色一级网站| 欧美日韩国产片| 精品一区二区国产| 久久久久久久久久久久久av| 国产欧美一区二区三区精品观看| 在线观看不卡视频| 强开小嫩苞一区二区三区网站 | 色婷婷在线影院| 日韩美女在线| 亚洲h精品动漫在线观看| 日本10禁啪啪无遮挡免费一区二区| 中文字幕+乱码+中文乱码www| 欧美淫片网站| 国产亚洲欧美另类中文| 日本黄色www| 国产精品字幕| 亚洲成av人片一区二区梦乃| 先锋影音亚洲资源| 天堂v在线观看| 国内外成人在线| 日本欧美精品在线| 九九九免费视频| 久久人人88| 国产视频久久网| 永久免费看片在线观看| 日韩国产网站| 欧美日韩国内自拍| 蜜臀在线免费观看| av播放在线| 91丝袜美腿高跟国产极品老师| 国产一区二区在线免费| 日韩精品在线观看免费| 国产一区二区中文| 久久国内精品一国内精品| 中文字幕在线看高清电影| 日韩欧美一级| 在线观看91精品国产麻豆| 一本久道中文无码字幕av| av免费不卡| 亚洲欧美成人一区二区三区| 亚洲精品白虎| 电影午夜精品一区二区三区| 日本欧美www| 午夜亚洲福利在线老司机| 久久久综合av| 欧美成人精品激情在线视频| 亚洲第一天堂| 中文字幕亚洲无线码在线一区| 九色porny自拍视频| 色橹橹欧美在线观看视频高清 | 国内揄拍国内精品少妇国语| 久热这里有精品| 伊人色**天天综合婷婷| 精品国产一区av| 日韩欧美视频免费观看| 欧美日韩老妇| 在线观看日韩专区| 69精品无码成人久久久久久| 国产亚洲一区二区三区不卡| 亚洲日韩欧美视频一区| 免费观看av网站| 精品在线91| 中文字幕亚洲情99在线| 天堂av网手机版| 婷婷综合激情| 欧美成人激情视频免费观看| 欧美日韩免费一区二区| 精品99视频| 久久久久久国产精品三级玉女聊斋| 麻豆亚洲av熟女国产一区二| 亚洲激情网址| 欧美性受xxxx白人性爽| 无码人妻精品一区二| 免费av成人在线| 91麻豆国产精品| 懂色av成人一区二区三区| 白白色 亚洲乱淫| 欧美日产一区二区三区在线观看| 国产一级在线观看| 亚洲视频在线观看三级| 91看片淫黄大片91| а√在线天堂官网| 91久久精品一区二区三区| www.99av.com| 亚洲精品aⅴ| 精品无人国产偷自产在线| 欧美大片欧美激情性色a∨久久| 女人扒开腿免费视频app| h视频久久久| 精品视频中文字幕| 亚洲AV成人无码网站天堂久久| 亚洲精品成人| 亚洲2020天天堂在线观看| 91青青草视频| 国产精品1024| 欧美日韩精品中文字幕一区二区| 自拍视频在线免费观看| 亚洲一区二区三区四区在线观看| 国模无码视频一区二区三区| 午夜精品久久久久久毛片| 亚洲第一色中文字幕| 人人人妻人人澡人人爽欧美一区| 久久久国产精品| 91av在线国产| 国产片在线播放| 久久久久99精品一区| 韩国黄色一级大片| 日韩国产激情| 日韩免费高清视频| 国产精品久久久久久久av| 欧美久久成人| 国产精品一二三视频| 日本人妻丰满熟妇久久久久久| 欧美激情一区二区三区四区| av在线观看地址| 人人精品久久| 亚洲欧美在线x视频| 久青草视频在线观看| 免费成人在线视频观看| 久久日韩精品| 欧美人与禽猛交乱配| 欧美欧美欧美欧美首页| 欧美亚一区二区三区| 欧美在线黄色| 成人国产精品久久久| 国模吧精品人体gogo| 五月开心婷婷久久| 伊人av在线播放| 欧美好骚综合网| 55夜色66夜色国产精品视频| 国产77777| 一区二区三区精品视频在线| 午夜剧场高清版免费观看 | 国产精品第5页| 国产成人精品免费网站| 亚洲一区二区高清视频| 亚洲黄色免费看| 亚洲第一精品夜夜躁人人躁| 免费一级黄色大片| 精品一区二区日韩| 色噜噜一区二区| 成人看片在线观看| 亚洲欧美激情一区| 国产微拍精品一区| 99视频一区二区| 被灌满精子的波多野结衣| 91成人app| 久久精品这里热有精品| 一区二区小视频| 国产精品国产三级国产有无不卡 | 北条麻妃国产九九精品视频| 男人天堂手机在线视频| 99这里只有精品视频| 欧美激情18p| 亚洲高清视频网站| 亚洲国产三级在线| 一级黄色电影片| 黄色一区二区三区四区| 国产伦精品一区二区三区免费视频| 大片免费在线观看| 日韩亚洲欧美在线观看| 免费三片在线播放| www.日韩大片| 欧美精品一区免费| 精品国产精品久久一区免费式| 国产精品av在线播放| 3d成人动漫在线| 91精品久久久久久久91蜜桃| 日韩一区二区三区四区在线| 国产aⅴ综合色| 免费国产a级片| 精品国内自产拍在线观看视频 | 一区二区在线视频观看| 欧美精品videos另类日本| 日韩在线观看视频一区| 色综合天天天天做夜夜夜夜做| 一区二区三区在线观看免费视频| 久久国产精品第一页| 久久男人资源站| 亚洲精品456| 亚洲经典视频在线观看| 国产成人综合一区二区三区| √天堂资源地址在线官网| 91精品国产综合久久福利| 国产乡下妇女做爰视频| 国产午夜精品久久久久久免费视 | 成人交换视频| 久久99久久99精品中文字幕 | 亚洲视屏在线观看| 亚洲欧美日韩系列| 五十路六十路七十路熟婆| 日韩高清中文字幕一区| 妞干网这里只有精品| 欧美美女黄色| 国产在线视频不卡| av成人福利| 日韩中文有码在线视频| 欧美一区二区黄片| 欧美日韩黄色影视| 久久高清免费视频| 中文字幕亚洲电影| 亚洲熟女乱综合一区二区三区| 麻豆成人综合网| 亚洲国产精品无码av| 97精品国产| 欧美激情国产日韩| 国产亚洲观看| 国产精品久久久久91| 毛片在线导航| 久久久精品在线| 日本天堂影院在线视频| 日韩三级在线观看| 亚洲视频中文字幕在线观看| 亚洲成a人片在线不卡一二三区| www.4hu95.com四虎| 99国产欧美久久久精品| 爱情岛论坛亚洲自拍| 男女男精品网站| 看av免费毛片手机播放| 激情六月综合| 欧美 另类 交| 成人久久一区| 欧美成人一区二区在线| 国产精品巨作av| 51国偷自产一区二区三区| 日本黄色一区| 日本免费在线精品| 女人让男人操自己视频在线观看 | 四虎成人精品一区二区免费网站| 男人的天堂亚洲在线| 92看片淫黄大片欧美看国产片| 黑人精品一区| 538国产精品一区二区免费视频| 综合久久2019| 美女少妇精品视频| 在线国产91| 在线精品国产欧美| 国产视频网站在线| 亚洲色图色老头| 欧美伦理影视网| 亚洲精品suv精品一区二区| 亚洲va天堂va欧美ⅴa在线| 91精品国产综合久久久久久 | 日韩欧美电影一区二区| 亚洲女娇小黑人粗硬| 精品麻豆av| 色婷婷av一区二区三区丝袜美腿| 国产伦精品一区二区三区照片91| 99re8这里有精品热视频8在线| 91在线直播亚洲| 欧美一区在线观看视频| 97自拍视频| 亚洲精品国产九九九| 成人av免费看| 国产成人高清精品免费5388| 国产精品久久久久久久久久直播 | 99久免费精品视频在线观看| 中文字幕在线视频播放| www.66久久| 中文字幕人妻一区二区| 欧美激情一区三区| 日本中文在线视频| 亚洲免费观看视频| 精品午夜福利在线观看| 偷窥少妇高潮呻吟av久久免费| 亚洲欧美精品一区二区三区| 色8久久精品久久久久久蜜| 自拍偷拍福利视频| 欧美日本国产一区| 午夜精品久久久久久久99热黄桃| 亚洲风情亚aⅴ在线发布| 亚洲av片一区二区三区| 国产一级揄自揄精品视频| 青青影院在线观看| 九九热精品在线| 麻豆网站免费在线观看| 国产精品黄视频| 日本一区二区三区视频在线看| 高清国产在线一区| 日韩精选在线| 亚洲女同精品视频| xxxxx99| 亚洲特黄一级片| 国产午夜免费视频| 91黄视频在线观看| www.成人在线观看| 亚洲精品小视频| av在线免费观看国产| 欧美日韩a v| 欧美视频第二页| av中文在线观看| 亚洲免费av网址| 1区2区在线观看| 欧洲亚洲女同hd| 亚洲在线资源| 久久久综合香蕉尹人综合网| 国产韩国精品一区二区三区| 给我免费播放片在线观看| 日韩avvvv在线播放| 乱码一区二区三区| 国产免费观看久久| 精品一级少妇久久久久久久| 欧美午夜在线一二页| 国产成人三级在线观看视频| 亚洲午夜未满十八勿入免费观看全集| jizz性欧美| 国产精品中文字幕在线观看| 日韩大片在线免费观看| 强伦女教师2:伦理在线观看| 久久国产直播| 日本精品一二三区| 国产精品伦理一区二区| 六月丁香在线视频| 欧美一区二区三区色| aiai在线| 国产成人精品视频在线| 国产精品极品国产中出| 一本—道久久a久久精品蜜桃| 亚洲影音先锋| 亚洲色图欧美另类| 亚洲欧美另类在线| 在线免费观看av片| 亚洲欧美日韩中文在线制服| 久草免费在线视频| 国产精品福利视频| 亚洲成av人电影| 中文字幕免费高清在线| 国产偷v国产偷v亚洲高清| 91av在线免费视频| 欧美哺乳videos| 手机电影在线观看| 97久久精品午夜一区二区| 欧美电影一二区| www.精品在线| 国产欧美日韩精品一区| 激情视频网站在线观看| 精品视频在线播放免| 无遮挡在线观看| 国产在线精品一区二区中文| 亚洲日本久久| 久久人人妻人人人人妻性色av| 亚洲电影中文字幕在线观看| 好吊色一区二区| 97在线看福利| 天堂成人娱乐在线视频免费播放网站| 九色自拍视频在线观看| 波多野结衣在线aⅴ中文字幕不卡| 九九视频在线免费观看| 日韩免费在线观看| 成人超碰在线| 国产精品v欧美精品v日韩| 亚洲激情av| wwwwxxxx国产| 欧美在线播放高清精品| aiai在线| 147欧美人体大胆444| 午夜久久黄色| a级片在线观看视频| 午夜欧美大尺度福利影院在线看| 无码国产精品一区二区色情男同| 69久久夜色精品国产7777 | 亚洲国产精品yw在线观看 | 久久精品蜜桃| 国产精品久久久久久久av电影| 日韩在线欧美| 原创真实夫妻啪啪av| 亚洲成人中文在线| 国产在线视频网| 国产精品永久在线| 欧美成人69| 毛片网站免费观看| 欧美色大人视频| gogo在线观看| 久久久久天天天天| 免费人成在线不卡| 免费中文字幕在线观看| 亚洲精品99久久久久中文字幕| 写真福利精品福利在线观看| 中文字幕一区二区三区有限公司 | 国产日韩精品中文字无码| 91麻豆精品国产91久久久久 | www.黄色网| 色综合视频一区二区三区高清| 中文日本在线观看| 波多野结衣久草一区| 久久国产精品毛片| 久艹在线观看视频| 亚洲国产另类久久精品| 日韩欧美一区二区三区在线观看 | 亚洲国产美女视频| 日韩二区三区在线| 日本黄色成人| 香港三级韩国三级日本三级| 中文文精品字幕一区二区| 亚洲AV无码精品国产| 国产精品1234| 亚洲第一区色| 欧美一级特黄高清视频| 精品亚洲精品福利线在观看| 99视频有精品高清视频|