最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

ShardingSphere jdbc實現(xiàn)分庫分表核心概念詳解

 更新時間:2022年12月11日 17:17:39   作者:刨紅薯的小羊竿爾  
這篇文章主要為大家介紹了ShardingSphere jdbc實現(xiàn)分庫分表核心概念詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪

ShardingSphere

ShardingSphere是一套開源的分布式數(shù)據(jù)庫中間件解決方案組成的生態(tài)圈,它由Sharding-JDBC、Sharding-Proxy和Sharding-Sidecar(計劃中)這3款相互獨立的產(chǎn)品組成。他們均提供標準化的數(shù)據(jù)分片、分布式事務和數(shù)據(jù)庫治理功能。

Sharding-JDBC

定位為輕量級Java框架,在Java的JDBC層提供的額外服務。 它使用客戶端直連數(shù)據(jù)庫,以jar包形式提供服務,無需額外部署和依賴,可理解為增強版的JDBC驅動,完全兼容JDBC和各種ORM框架。

1)適用于任何基于Java的ORM框架,如:JPA, Hibernate, Mybatis, Spring JDBC Template或直接使用JDBC。

2)基于任何第三方的數(shù)據(jù)庫連接池,如:DBCP, C3P0, BoneCP, Druid, HikariCP等。

3)支持任意實現(xiàn)JDBC規(guī)范的數(shù)據(jù)庫。目前支持MySQL,Oracle,SQLServer和PostgreSQL。

Sharding-JDBC包含的一些核心概念

1)邏輯表-LogicTable

數(shù)據(jù)分片的邏輯表,對于水平拆分的數(shù)據(jù)庫(表),同一類表的總稱。例:訂單數(shù)據(jù)根據(jù)主鍵尾數(shù)拆分為10張表,分別是t_order_0到t_order_9,他們的邏輯表名為t_order。

2)實際表-ActualTable

在分片的數(shù)據(jù)庫中真實存在的物理表。即上個示例中的t_order_0到t_order_9。

3)數(shù)據(jù)節(jié)點-DataNode

數(shù)據(jù)分片的最小單元。由數(shù)據(jù)源名稱和數(shù)據(jù)表組成,例:ds_1.t_order_0。配置時默認各個分片數(shù)據(jù)庫的表結構均相同,直接配置邏輯表和真實表對應關系即可。如果各數(shù)據(jù)庫的表結果不同,可使用ds.actual_table配置。

4)動態(tài)表-DynamicTable

邏輯表和真實表不一定需要在配置規(guī)則中靜態(tài)配置。比如按照日期分片的場景,真實表的名稱隨著時間的推移會產(chǎn)生變化。此類需求Sharding-JDBC是支持的,不過目前配置并不友好,會在新版本中提升。

5)綁定表-BindingTable

指在任何場景下分片規(guī)則均一致的主表和子表。例:訂單表和訂單項表,均按照訂單ID分片,則此兩張表互為BindingTable關系。BindingTable關系的多表關聯(lián)查詢不會出現(xiàn)笛卡爾積關聯(lián),關聯(lián)查詢效率將大大提升。

6)分片鍵-ShardingColumn

分片字段。用于將數(shù)據(jù)庫(表)水平拆分的關鍵字段。例:訂單表訂單ID分片尾數(shù)取模分片,則訂單ID為分片字段。SQL中如果無分片字段,將執(zhí)行全路由,性能較差。Sharding-JDBC支持多分片字段。

7)分片算法-ShardingAlgorithm

分片算法。Sharding-JDBC通過分片算法將數(shù)據(jù)分片,支持通過等號、BETWEEN和IN分片。分片算法目前需要業(yè)務方開發(fā)者自行實現(xiàn),可實現(xiàn)的靈活度非常高。未來Sharding-JDBC也將會實現(xiàn)常用分片算法,如range,hash和tag等。

8)SQL Hint

對于分片字段非SQL決定,而由其他外置條件決定的場景,可使用SQL Hint靈活的注入分片字段。例:內(nèi)部系統(tǒng),按照員工登錄ID分庫,而數(shù)據(jù)庫中并無此字段。SQL Hint支持通過ThreadLocal和SQL注釋(待實現(xiàn))兩種方式使用。

9)廣播表broadcastTable

所有的分?數(shù)據(jù)源中都存在的表,表結構和表中的數(shù)據(jù)在每個數(shù)據(jù)庫中均完全?致,例如:數(shù)據(jù)字典表,公共配置表。

10)分布式主鍵生成策略

Sharding-JDBC 內(nèi)部支持UUID和Snowflake生成分布式主鍵。

分片策略算法

ShardingSphere-JDBC在分片策略上分別引入了分片算法、分片策略兩個概念,當然在分片的過程中分片鍵也是一個核心的概念;在此可以簡單的理解分片策略 = 分片算法 + 分片鍵

分片算法

提供了抽象分片算法類:ShardingAlgorithm,根據(jù)類型又分為:精確分片算法、區(qū)間分片算法、復合分片算法以及Hint分片算法;

  • 精確分片算法:對應PreciseShardingAlgorithm類,主要用于處理 = 和 IN的分片;
public class PreciseDBShardingAlgorithm implements PreciseShardingAlgorithm<Long> {
    @Override
    public String doSharding(Collection<String> availableTargetNames, PreciseShardingValue<Long> shardingValue) {
        //todo
    }
}
  • 區(qū)間分片算法:對應RangeShardingAlgorithm類,主要用于處理 BETWEEN AND><>=<= 分片;
public class RangeShardingDBAlgorithm implements RangeShardingAlgorithm<Long> {
    @Override
    public String doSharding(Collection<String> availableTargetNames, PreciseShardingValue<Long> shardingValue) {
        //todo
    }
}
  • 復合分片算法:對應ComplexKeysShardingAlgorithm類,用于處理使用多鍵作為分片鍵進行分片的場景;
public class ComplexKeysShardingDBAlgorithm implements ComplexKeysShardingAlgorithm<Long> {
    @Override
    public String doSharding(Collection<String> availableTargetNames, PreciseShardingValue<Long> shardingValue) {
        //todo
    }
}
  • Hint分片算法:對應HintShardingAlgorithm類,用于處理使用 Hint 行分片的場景;
public class HintShardingDBAlgorithm implements HintShardingAlgorithm<Long> {
    @Override
    public String doSharding(Collection<String> availableTargetNames, PreciseShardingValue<Long> shardingValue) {
        //todo
    }
}

以上所有的算法類都是接口類,具體實現(xiàn)交給開發(fā)者自己。

分片策略

分片策略基本和上面的分片算法對應,包括:標準分片策略、復合分片策略、Hint分片策略、內(nèi)聯(lián)分片策略、不分片策略;

  • 標準分片策略:對應StandardShardingStrategy類,提供PreciseShardingAlgorithmRangeShardingAlgorithm兩個分片算法,PreciseShardingAlgorithm是必須的,RangeShardingAlgorithm可選的;
public final class StandardShardingStrategy implements ShardingStrategy {
    private final String shardingColumn;
    private final PreciseShardingAlgorithm preciseShardingAlgorithm;
    private final RangeShardingAlgorithm rangeShardingAlgorithm;
}
  • 復合分片策略:對應ComplexShardingStrategy類,提供ComplexKeysShardingAlgorithm分片算法;可以發(fā)現(xiàn)支持多個分片鍵;
public final class ComplexShardingStrategy implements ShardingStrategy {
    @Getter
    private final Collection<String> shardingColumns;
    private final ComplexKeysShardingAlgorithm shardingAlgorithm;
}
  • Hint分片策略:對應HintShardingStrategy類,通過 Hint 指定分片值而非從 SQL 中提取分片值的方式進行分片的策略;提供HintShardingAlgorithm分片算法;
public final class HintShardingStrategy implements ShardingStrategy {
    @Getter
    private final Collection<String> shardingColumns;
    private final HintShardingAlgorithm shardingAlgorithm;
}
  • 內(nèi)聯(lián)分片策略:對應InlineShardingStrategy類,沒有提供分片算法,路由規(guī)則通過表達式來實現(xiàn);
  • 不分片策略:對應NoneShardingStrategy類,不分片策略;

分片策略配置類

在使用中我們并沒有直接使用上面的分片策略類,ShardingSphere-JDBC分別提供了對應策略的配置類包括:

StandardShardingStrategyConfiguration

ComplexShardingStrategyConfiguration

HintShardingStrategyConfiguration

InlineShardingStrategyConfiguration

NoneShardingStrategyConfiguration

以上就是ShardingSphere jdbc實現(xiàn)分庫分表核心概念詳解的詳細內(nèi)容,更多關于ShardingSphere jdbc分庫分表的資料請關注腳本之家其它相關文章!

相關文章

  • SpringBoot結合Ajax實現(xiàn)登錄頁面實例

    SpringBoot結合Ajax實現(xiàn)登錄頁面實例

    大家好,本篇文章主要講的是SpringBoot結合Ajax實現(xiàn)登錄頁面實例,感興趣的同學趕快來看一看,對你有幫助的話記得收藏一下
    2022-02-02
  • Java面向對象之什么是異常

    Java面向對象之什么是異常

    Java 把異常當作對象來處理,并定義一個基類,java.lang.Throwable 作為所有異常的超類。今天通過本文給大家分享Java面向對象之什么是異常,感興趣的朋友一起看看吧
    2021-07-07
  • java中Map集合的常用方法總結大全

    java中Map集合的常用方法總結大全

    開發(fā)中最常用的就是List集合和Map集合,Map集合是基于java核心類java.util中的,下面這篇文章主要給大家總結介紹了關于java中Map集合的一些常用方法,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2024-01-01
  • SpringBoot項目防止反編譯的方案

    SpringBoot項目防止反編譯的方案

    最近項目要求部署到其他公司的服務器上,但是又不想將源碼泄露出去,要求對正式環(huán)境的啟動包進行安全性處理,防止客戶直接通過反編譯工具將代碼反編譯出來,所以本文給大家介紹了SpringBoot項目如何防止反編譯,需要的朋友可以參考下
    2024-01-01
  • Java生成含字母和數(shù)字的6位隨機字符串

    Java生成含字母和數(shù)字的6位隨機字符串

    這篇文章主要為大家詳細介紹了Java生成含字母和數(shù)字的6位隨機字符串的相關資料,供大家參考,感興趣的朋友可以參考一下
    2016-05-05
  • jpa?EntityManager?復雜查詢實例

    jpa?EntityManager?復雜查詢實例

    這篇文章主要介紹了jpa?EntityManager?復雜查詢實例,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • idea中如何查看類中所有方法列表

    idea中如何查看類中所有方法列表

    這篇文章主要介紹了idea中如何查看類中所有方法列表問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-03-03
  • Spring配置文件中密碼明文改為密文處理的通用方式

    Spring配置文件中密碼明文改為密文處理的通用方式

    SpringBoot和SpringCloud中涉及多個配置文件,配置文件中對于密碼默認是明文方式,這種方式在生產(chǎn)環(huán)境一般是不被允許的,為避免配置文件中出現(xiàn)明文,應當在配置文件中配置為密文,然后在啟動時在程序內(nèi)部完成解密,本文提供了通用的處理方式,需要的朋友可以參考下
    2025-01-01
  • Java中的RocketMQ消費冪等詳解

    Java中的RocketMQ消費冪等詳解

    這篇文章主要介紹了Java中的RocketMQ消費冪等詳解,當出現(xiàn)消費者對某條消息重復消費的情況時,重復消費的結果與消費一次的結果是相同的,并且多次消費并未對業(yè)務系統(tǒng)業(yè)務產(chǎn)生任何負面影響,那么這個消費過程就是消息冪等,需要的朋友可以參考下
    2023-10-10
  • SpringBoot攔截器使用精講

    SpringBoot攔截器使用精講

    攔截器可以根據(jù) URL 對請求進行攔截,主要應用于登陸校驗、權限驗證、亂碼解決、性能監(jiān)控和異常處理等功能上。SpringBoot同樣提供了攔截器功能。 本文將為大家詳細介紹一下
    2021-12-12

最新評論

阿瓦提县| 平陆县| 九江市| 凯里市| 大渡口区| 章丘市| 苍溪县| 西盟| 清水河县| 靖州| 大埔区| 泌阳县| 军事| 昌图县| 平陆县| 当雄县| 金山区| 博客| 石首市| 昔阳县| 固原市| 西平县| 二手房| 呼伦贝尔市| 顺平县| 深圳市| 大连市| 南丹县| 延长县| 虹口区| 长岛县| 塔河县| 天祝| 邻水| 青海省| 普格县| 壤塘县| 霍山县| 克拉玛依市| 灌云县| 南岸区|