ShardingSphere jdbc實現(xiàn)分庫分表核心概念詳解
ShardingSphere
ShardingSphere是一套開源的分布式數(shù)據(jù)庫中間件解決方案組成的生態(tài)圈,它由Sharding-JDBC、Sharding-Proxy和Sharding-Sidecar(計劃中)這3款相互獨立的產(chǎn)品組成。他們均提供標(biāo)準(zhǔn)化的數(shù)據(jù)分片、分布式事務(wù)和數(shù)據(jù)庫治理功能。
Sharding-JDBC
定位為輕量級Java框架,在Java的JDBC層提供的額外服務(wù)。 它使用客戶端直連數(shù)據(jù)庫,以jar包形式提供服務(wù),無需額外部署和依賴,可理解為增強(qiáng)版的JDBC驅(qū)動,完全兼容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。配置時默認(rèn)各個分片數(shù)據(jù)庫的表結(jié)構(gòu)均相同,直接配置邏輯表和真實表對應(yīng)關(guān)系即可。如果各數(shù)據(jù)庫的表結(jié)果不同,可使用ds.actual_table配置。
4)動態(tài)表-DynamicTable
邏輯表和真實表不一定需要在配置規(guī)則中靜態(tài)配置。比如按照日期分片的場景,真實表的名稱隨著時間的推移會產(chǎn)生變化。此類需求Sharding-JDBC是支持的,不過目前配置并不友好,會在新版本中提升。
5)綁定表-BindingTable
指在任何場景下分片規(guī)則均一致的主表和子表。例:訂單表和訂單項表,均按照訂單ID分片,則此兩張表互為BindingTable關(guān)系。BindingTable關(guān)系的多表關(guān)聯(lián)查詢不會出現(xiàn)笛卡爾積關(guān)聯(lián),關(guān)聯(lián)查詢效率將大大提升。
6)分片鍵-ShardingColumn
分片字段。用于將數(shù)據(jù)庫(表)水平拆分的關(guān)鍵字段。例:訂單表訂單ID分片尾數(shù)取模分片,則訂單ID為分片字段。SQL中如果無分片字段,將執(zhí)行全路由,性能較差。Sharding-JDBC支持多分片字段。
7)分片算法-ShardingAlgorithm
分片算法。Sharding-JDBC通過分片算法將數(shù)據(jù)分片,支持通過等號、BETWEEN和IN分片。分片算法目前需要業(yè)務(wù)方開發(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ù)源中都存在的表,表結(jié)構(gòu)和表中的數(shù)據(jù)在每個數(shù)據(jù)庫中均完全?致,例如:數(shù)據(jù)字典表,公共配置表。
10)分布式主鍵生成策略
Sharding-JDBC 內(nèi)部支持UUID和Snowflake生成分布式主鍵。
分片策略算法
ShardingSphere-JDBC在分片策略上分別引入了分片算法、分片策略兩個概念,當(dāng)然在分片的過程中分片鍵也是一個核心的概念;在此可以簡單的理解分片策略 = 分片算法 + 分片鍵
分片算法
提供了抽象分片算法類:ShardingAlgorithm
,根據(jù)類型又分為:精確分片算法、區(qū)間分片算法、復(fù)合分片算法以及Hint分片算法;
- 精確分片算法:對應(yīng)
PreciseShardingAlgorithm
類,主要用于處理=
和IN
的分片;
public class PreciseDBShardingAlgorithm implements PreciseShardingAlgorithm<Long> { @Override public String doSharding(Collection<String> availableTargetNames, PreciseShardingValue<Long> shardingValue) { //todo } }
- 區(qū)間分片算法:對應(yīng)
RangeShardingAlgorithm
類,主要用于處理BETWEEN AND
,>
,<
,>=
,<=
分片;
public class RangeShardingDBAlgorithm implements RangeShardingAlgorithm<Long> { @Override public String doSharding(Collection<String> availableTargetNames, PreciseShardingValue<Long> shardingValue) { //todo } }
- 復(fù)合分片算法:對應(yīng)
ComplexKeysShardingAlgorithm
類,用于處理使用多鍵作為分片鍵進(jìn)行分片的場景;
public class ComplexKeysShardingDBAlgorithm implements ComplexKeysShardingAlgorithm<Long> { @Override public String doSharding(Collection<String> availableTargetNames, PreciseShardingValue<Long> shardingValue) { //todo } }
- Hint分片算法:對應(yīng)
HintShardingAlgorithm
類,用于處理使用Hint
行分片的場景;
public class HintShardingDBAlgorithm implements HintShardingAlgorithm<Long> { @Override public String doSharding(Collection<String> availableTargetNames, PreciseShardingValue<Long> shardingValue) { //todo } }
以上所有的算法類都是接口類,具體實現(xiàn)交給開發(fā)者自己。
分片策略
分片策略基本和上面的分片算法對應(yīng),包括:標(biāo)準(zhǔn)分片策略、復(fù)合分片策略、Hint分片策略、內(nèi)聯(lián)分片策略、不分片策略;
- 標(biāo)準(zhǔn)分片策略:對應(yīng)
StandardShardingStrategy
類,提供PreciseShardingAlgorithm
和RangeShardingAlgorithm
兩個分片算法,PreciseShardingAlgorithm
是必須的,RangeShardingAlgorithm
可選的;
public final class StandardShardingStrategy implements ShardingStrategy { private final String shardingColumn; private final PreciseShardingAlgorithm preciseShardingAlgorithm; private final RangeShardingAlgorithm rangeShardingAlgorithm; }
- 復(fù)合分片策略:對應(yīng)
ComplexShardingStrategy
類,提供ComplexKeysShardingAlgorithm
分片算法;可以發(fā)現(xiàn)支持多個分片鍵;
public final class ComplexShardingStrategy implements ShardingStrategy { @Getter private final Collection<String> shardingColumns; private final ComplexKeysShardingAlgorithm shardingAlgorithm; }
- Hint分片策略:對應(yīng)
HintShardingStrategy
類,通過 Hint 指定分片值而非從 SQL 中提取分片值的方式進(jìn)行分片的策略;提供HintShardingAlgorithm
分片算法;
public final class HintShardingStrategy implements ShardingStrategy { @Getter private final Collection<String> shardingColumns; private final HintShardingAlgorithm shardingAlgorithm; }
- 內(nèi)聯(lián)分片策略:對應(yīng)
InlineShardingStrategy
類,沒有提供分片算法,路由規(guī)則通過表達(dá)式來實現(xiàn); - 不分片策略:對應(yīng)
NoneShardingStrategy
類,不分片策略;
分片策略配置類
在使用中我們并沒有直接使用上面的分片策略類,ShardingSphere-JDBC分別提供了對應(yīng)策略的配置類包括:
StandardShardingStrategyConfiguration
ComplexShardingStrategyConfiguration
HintShardingStrategyConfiguration
InlineShardingStrategyConfiguration
NoneShardingStrategyConfiguration
以上就是ShardingSphere jdbc實現(xiàn)分庫分表核心概念詳解的詳細(xì)內(nèi)容,更多關(guān)于ShardingSphere jdbc分庫分表的資料請關(guān)注腳本之家其它相關(guān)文章!
- Springboot2.x+ShardingSphere實現(xiàn)分庫分表的示例代碼
- Java中ShardingSphere分庫分表實戰(zhàn)
- 使用ShardingSphere-Proxy實現(xiàn)分表分庫
- Java基于ShardingSphere實現(xiàn)分庫分表的實例詳解
- SpringBoot3和ShardingSphere5框架實現(xiàn)數(shù)據(jù)分庫分表
- SpringBoot?整合?ShardingSphere4.1.1實現(xiàn)分庫分表功能
- SpringBoot+Mybatis-plus+shardingsphere實現(xiàn)分庫分表的方案
- ShardingSphere結(jié)合MySQL實現(xiàn)分庫分表的項目實踐
相關(guān)文章
Windows下使用Graalvm將Springboot應(yīng)用編譯成exe大大提高啟動和運行效率(推薦)
這篇文章主要介紹了Windows下使用Graalvm將Springboot應(yīng)用編譯成exe大大提高啟動和運行效率,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2023-02-02SpringCloud?hystrix斷路器與局部降級全面介紹
什么是服務(wù)降級?當(dāng)服務(wù)器壓力劇增的情況下,根據(jù)實際業(yè)務(wù)情況及流量,對一些服務(wù)和頁面有策略的不處理或換種簡單的方式處理,從而釋放服務(wù)器資源以保證核心交易正常運作或高效運作2022-10-10springboot整合JavaCV實現(xiàn)視頻截取第N幀并保存圖片
這篇文章主要為大家詳細(xì)介紹了springboot如何整合JavaCV實現(xiàn)視頻截取第N幀并保存為圖片,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起了解一下2023-08-08Retrofit+RxJava實現(xiàn)帶進(jìn)度下載文件
這篇文章主要為大家詳細(xì)介紹了Retrofit+RxJava實現(xiàn)帶進(jìn)度下載文件,具有一定的參考價值,感興趣的小伙伴們可以參考一下2018-05-05java使用ffmpeg命令來實現(xiàn)視頻編碼轉(zhuǎn)換的示例
本文主要介紹了java使用ffmpeg命令來實現(xiàn)視頻編碼轉(zhuǎn)換的示例,可以通過調(diào)用系統(tǒng)命令來執(zhí)行FFmpeg命令,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2024-07-07Hibernate三種狀態(tài)和Session常用的方法
本文主要介紹了Hibernate三種狀態(tài)和Session常用的方法,具有很好的參考價值,下面跟著小編一起來看下吧2017-03-03