這篇文章給大家分享的是有關(guān)ShardingSphere中配置體系是如何設(shè)計(jì)的的內(nèi)容。小編覺得挺實(shí)用的,因此分享給大家做個(gè)參考,一起跟隨小編過來看看吧。
創(chuàng)新互聯(lián)長(zhǎng)期為上千家客戶提供的網(wǎng)站建設(shè)服務(wù),團(tuán)隊(duì)從業(yè)經(jīng)驗(yàn)10年,關(guān)注不同地域、不同群體,并針對(duì)不同對(duì)象提供差異化的產(chǎn)品和服務(wù);打造開放共贏平臺(tái),與合作伙伴共同營(yíng)造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為響水企業(yè)提供專業(yè)的成都做網(wǎng)站、網(wǎng)站建設(shè),響水網(wǎng)站改版等技術(shù)服務(wù)。擁有10多年豐富建站經(jīng)驗(yàn)和眾多成功案例,為您定制開發(fā)。
行表達(dá)式是 ShardingSphere 中用于實(shí)現(xiàn)簡(jiǎn)化和統(tǒng)一配置信息的一種工具,在日常開發(fā)過程中應(yīng)用得非常廣泛。它的使用方式非常直觀,只需要在配置中使用 ${expression} 或 $->{expression} 表達(dá)式即可。
基于行表達(dá)式語法,${begin..end} 表示的是一個(gè)從"begin"到"end"的范圍區(qū)間,而多個(gè) ${expression} 之間可以用"."符號(hào)進(jìn)行連接,代表多個(gè)表達(dá)式數(shù)值之間的一種笛卡爾積關(guān)系。
類似場(chǎng)景也可以使用枚舉的方式來列舉所有可能值。行表達(dá)式也提供了 ${[enum1, enum2,…, enumx]} 語法來表示枚舉值,所以"ds${0..1}.user${0..1}"的效果等同于"ds${[0,1]}.user${[0,1]}"。
由于 ${expression} 與 Spring 本身的屬性文件占位符沖突,而 Spring 又是目前主流的開發(fā)框架,因此在正式環(huán)境中建議你使用 $->{expression} 來進(jìn)行配置。
對(duì)于分庫分表、讀寫分離操作而言,配置的主要任務(wù)是完成各種規(guī)則的創(chuàng)建和初始化。配置是整個(gè)ShardingSphere的核心,也是我們?nèi)粘i_發(fā)過程中的抓藥工作??梢哉f,只要我們掌握了ShardingSphere的核心配置項(xiàng),就相當(dāng)于掌握了這個(gè)框架的使用方法。那么,ShardingSphere 有哪些核心配置呢?這里以分片引擎為例介紹最常用的幾個(gè)配置項(xiàng),而與讀寫分離、數(shù)據(jù)脫敏、編排治理相關(guān)的配置項(xiàng)我們會(huì)在介紹具體的應(yīng)用場(chǎng)景時(shí)再做展開。
ShardingRuleConfiguration
DataSource是我們使用ShardingSphere的入口,創(chuàng)建DataSource的過程中使用到了一個(gè)ShardingDataSourceFactory類,這個(gè)工廠類的構(gòu)造函數(shù)中需要傳入一個(gè)ShardingRuleConfiguration對(duì)象。顯然,從命名上看,這個(gè)ShardingRuleConfiguration就是用于分片規(guī)則的配置入口。
ShardingRuleConfiguration中所需要配置的規(guī)則比較多,下面通過一張圖例來進(jìn)行簡(jiǎn)單說明
事實(shí)上,對(duì)于ShardingRuleConfiguration而言,必須要設(shè)置的只有一個(gè)配置項(xiàng),即TableRuleConfiguration。
TableRuleConfiguration
從命名上看,TableRuleConfiguration是表分片規(guī)則配置,但事實(shí)上,這個(gè)類同時(shí)包含了對(duì)分庫和分表兩種場(chǎng)景的設(shè)置,TableRuleConfiguration包含很多重要的配置項(xiàng):
actualDataNodes:代表真實(shí)的數(shù)據(jù)節(jié)點(diǎn),由數(shù)據(jù)源名+表名組成,支持行表達(dá)式。例如:ds${0..1}.user${0..1}
databaseShardingStrategyConfig:代表分表策略,如果不設(shè)置也會(huì)使用默認(rèn)分表策略,這里的默認(rèn)分表策略同樣來自ShardingRuleConfiguration中的defaultTableShardingStrategyConfig配置
keyGeneratorConfig:代表分布式環(huán)境下的自增列生成器配置,ShardingSphere中集成了雪花算法等分布式ID的生成器實(shí)現(xiàn)。
ShardingStrategyConfiguration
dataBaseShardingStrategyConfig和tableShardingStrategyConfig的類型都是一個(gè)ShardingStrategyConfiguration對(duì)象。在ShardingSphere中,ShardingStrategyConfiguration實(shí)際上是一個(gè)空接口,存在一系列的實(shí)現(xiàn)類,其中的每個(gè)實(shí)現(xiàn)類都代表一種分片策略:
在這些具體的分片策略中,通常需要指定一個(gè)分片列 shardingColumn 以及一個(gè)或多個(gè)分片算法 ShardingAlgorithm。
KeyGeneratorConfiguration
可以想象,對(duì)于一個(gè)自增列而言,KeyGeneratorConfiguration 中首先需要指定一個(gè)列名 column。同時(shí),因?yàn)?ShardingSphere 中內(nèi)置了一批自增列的實(shí)現(xiàn)機(jī)制(例如雪花算法 SNOWFLAKE 以及通用唯一識(shí)別碼 UUID),所以需要通過一個(gè) type 配置項(xiàng)進(jìn)行指定
ShardingSphere提供了4種配置方式。用于不同的使用場(chǎng)景:
Java代碼配置
Yaml配置
Spring命名空間配置
Spring Boot配置
[詳細(xì)配置看官網(wǎng)](https://shardingsphere.apache.org/document/legacy/4.x/document/cn/manual/sharding-jdbc/configuration/ "詳細(xì)配置看官網(wǎng)")
ShardingRuleConfiguration配置體系
對(duì)于ShardingSphere而言,配置體系的作用本質(zhì)上就是用來初始化DataSource等JDBC對(duì)象。例如,ShardingDataSourceFactory就是基于傳入的數(shù)據(jù)源Map、ShardingRuleConfiguration以及Properties來創(chuàng)建一個(gè)ShardingDataSource對(duì)象:
public final class ShardingDataSourceFactory { public static DataSource createDataSource( final Map<String, DataSource> dataSourceMap, final ShardingRuleConfiguration shardingRuleConfig, final Properties props) throws SQLException { return new ShardingDataSource(dataSourceMap, new ShardingRule(shardingRuleConfig, dataSourceMap.keySet()), props); } }
在 ShardingSphere 中,所有規(guī)則配置類都實(shí)現(xiàn)了一個(gè)頂層接口 RuleConfiguration。RuleConfiguration 是一個(gè)空接口,ShardingRuleConfiguration 就是這個(gè)接口的實(shí)現(xiàn)類之一,專門用來處理分片引擎的應(yīng)用場(chǎng)景。下面這段代碼就是 ShardingRuleConfiguration 類的實(shí)現(xiàn)過程:
public final class ShardingRuleConfiguration implements RuleConfiguration { //表分片規(guī)則列表 private Collection<TableRuleConfiguration> tableRuleConfigs = new LinkedList<>(); //綁定表規(guī)則列表 private Collection<String> bindingTableGroups = new LinkedList<>(); //廣播表規(guī)則列表 private Collection<String> broadcastTables = new LinkedList<>(); //默認(rèn)數(shù)據(jù)源 private String defaultDataSourceName; //默認(rèn)分庫策略 private ShardingStrategyConfiguration defaultDatabaseShardingStrategyConfig; //默認(rèn)分表策略 private ShardingStrategyConfiguration defaultTableShardingStrategyConfig; //默認(rèn)自增列值生成器 private KeyGeneratorConfiguration defaultKeyGeneratorConfig; //讀寫分離規(guī)則 private Collection<MasterSlaveRuleConfiguration> masterSlaveRuleConfigs = new LinkedList<>(); //數(shù)據(jù)脫敏規(guī)則 private EncryptRuleConfiguration encryptRuleConfig; }
可以看到,ShardingRuleConfiguration 中包含的就是一系列的配置類定義,通過前面的內(nèi)容介紹,我們已經(jīng)明白了這些配置類的作用和使用方法。其中,核心的 TableRuleConfiguration 定義也比較簡(jiǎn)單,主要包含了邏輯表、真實(shí)數(shù)據(jù)節(jié)點(diǎn)以及分庫策略和分表策略的定義:
public final class TableRuleConfiguration { //邏輯表 private final String logicTable; //真實(shí)數(shù)據(jù)節(jié)點(diǎn) private final String actualDataNodes; //分庫策略 private ShardingStrategyConfiguration databaseShardingStrategyConfig; //分表策略 private ShardingStrategyConfiguration tableShardingStrategyConfig; //自增列生成器 private KeyGeneratorConfiguration keyGeneratorConfig; public TableRuleConfiguration(final String logicTable) { this(logicTable, null); } public TableRuleConfiguration(final String logicTable, final String actualDataNodes) { Preconditions.checkArgument(!Strings.isNullOrEmpty(logicTable), "LogicTable is required."); this.logicTable = logicTable; this.actualDataNodes = actualDataNodes; } }
無論采用哪種配置方式,所有的配置項(xiàng)都是在這些核心配置類的基礎(chǔ)之上進(jìn)行封裝和轉(zhuǎn)換。最終生成ShardingRuleConfiguration,然后通過ShardingDataSourceFatory生成ShardingDataSource獲取連接。
感謝各位的閱讀!關(guān)于“ShardingSphere中配置體系是如何設(shè)計(jì)的”這篇文章就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,讓大家可以學(xué)到更多知識(shí),如果覺得文章不錯(cuò),可以把它分享出去讓更多的人看到吧!
文章題目:ShardingSphere中配置體系是如何設(shè)計(jì)的
轉(zhuǎn)載注明:http://bm7419.com/article26/pcisjg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站策劃、Google、企業(yè)網(wǎng)站制作、網(wǎng)站設(shè)計(jì)、網(wǎng)站制作、ChatGPT
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)
營(yíng)銷型網(wǎng)站建設(shè)知識(shí)