sharding源碼解析之api分析

說在前面算法

本文轉自「天河聊技術」微信公衆號spring

 

昨天發出的上篇配置解析的文章,沒有介紹sharding-jdbc提供的分片的api和與spring集成的配置文件,可能直接看配置源碼解析不太直觀,今天把這兩塊補上,這個也是收到了芋頭小鈍的建議,感謝芋頭小鈍。sql

 

sharding的分片api介紹數據庫

sharding-jdbc提供的分片有兩種方式,一種就是inline表達式,底層是groovy經過解析你配置的閉包實現的,一種是指定分片策略的實現類,分片算法支持三種,=、in、between。api

 

inline分片方式微信

sharding-jdbc集成spring的配置文件中這樣配置閉包

上圖中的配置是指定了一種表的分片策略,這種表的邏輯表名是demo,能夠看到demo_${create_time.toString("yyyyMM")}這裏是用demo_做爲物理表的前綴和具體的後綴拼接起來就成了具體的物理表,toString() 方法就是sharding-jdbc的提供的inline表達式支持的其中一個閉包,${create_time.toString("yyyyMM")}這個部分就是inline表達式,這個inline表達式的意思就是把分片字段值按照這個時間格式格式化成字符串拼接到demo_的後面,sharding-columns="create_time"這裏制定了按照分片字段,總體解釋下,邏輯表是demo,create_time分片字段值是「20170801 00:00:00「,這裏的時間是Date類型,那麼具體路由到的表就是demo_201708 這張物理表,一句話歸納就是demo這張表是按月分表的。app

 

inline分片表達式內部實現網站

 

具體實現是上圖標註的幾個類,還有InlineParser inline表達式解析器類,底層是經過groovy解析閉包的方式進行實現的,值得介紹的是下面的這個類xml

com.dangdang.ddframe.rdb.sharding.config.common.internal.algorithm.ShardingValueWrapper 這個類是sharding-jdbc默認提供的哪些inline表達式,若是須要能夠對其進行擴展。

 

普通的分片實現方式

 

分片策略接口和默認實現總體類圖

 

ShardingAlgorithm 頂層分片策略接口

TableShardingAlgorithm 表分片策略接口

MultipleKeysShardingAlgorithm 多個key分片策略接口,這個接口只有一個分片抽象方法,doSharding() 方法

DatabaseShardingAlgorithm 數據庫分片策略接口

SingleKeyShardingAlgorithm 單個key分片策略接口,支持三種運算符的分片策略,以下圖

這種分片策略也是用的最多的,咱們的項目美利財務平臺中分片策略也是用的這種分片策略。

NoneKeyShardingAlgorithm 無分片值策略接口,數據量小的表不考慮分片就會走這個分片策略。

上圖中這一層接口是第二層接口的組合實現,開發中只須要實現這層接口實現本身具體的分片策略便可,也能夠實現第二層接口,那就須要實現多個接口,建議實現第三層接口。

 

這些是sharding-jdbc的默認分片實現

能夠參考這些實現實現本身個性化分片實現

 

這裏是分片的引擎實現,在sql路由的時候會詳細介紹

 

sharding-jdbc集成spring的xml配置文件

 

說到最後

本篇文章主要介紹了sharding-jdbc提供了inline表達式分片方式,配置方便,還有提供了實現分片接口的方式,能夠靈活擴展,和spring集成的配置能夠參考最後一張圖或者參考sharding-jdbc官方網站的文檔,相信你們對這些瞭解以後,再看上篇文章sharding-jdbc集成spring配置文件解析的內容應該會容易一些,以上內容僅供參考,下篇文章將接着對上篇文章集成spring配置文件解析的剩餘部分進行講解。

相關文章
相關標籤/搜索