java開發(fā)ShardingSphere的路由引擎類型示例詳解
ShardingSphere的路由引擎類型
本篇文章源碼基于4.0.1版本
上篇文章我們了解到了ShardingSphere在路由流程過程中,根據(jù)不同類型的SQL會(huì)現(xiàn)在不同的路由引擎,而ShardingSphere支持的路由規(guī)則也很多了,包括廣播(broadcast)路由、混合(complex)路由、默認(rèn)數(shù)據(jù)庫(defaultdb)路由、無效(ignore)路由、標(biāo)準(zhǔn)(standard)路由以及單播(unicast)路由等等,那么具體這些路由規(guī)則對(duì)應(yīng)的是什么路由引擎呢?今天我們就聊聊這個(gè)。
路由引擎類型
RoutingEngineFactory 用來創(chuàng)建路由引擎的實(shí)例,對(duì)應(yīng)的是它的newInstance()方法,根據(jù)Sql語句SQLStatement對(duì)象的類型選擇不同的路由引擎,有
全庫廣播路由引擎DatabaseBroadcastRoutingEngine、
全庫表廣播路由引擎TableBroadcastRoutingEngine、
無效路由引擎IgnoreRoutingEngine、
默認(rèn)數(shù)據(jù)庫路由引擎DefaultDatabaseRoutingEngine(對(duì)默認(rèn)的數(shù)據(jù)庫進(jìn)行路由)、
單播路由引擎UnicastRoutingEngine(單播路由只需要在任何數(shù)據(jù)庫的任何表中獲取就可以,相當(dāng)于獲取表中公有信息)、
數(shù)據(jù)源組的廣播路由引擎DataSourceGroupBroadcastRoutingEngine、
數(shù)據(jù)庫主庫實(shí)例的廣播路由引擎MasterInstanceBroadcastRoutingEngine(這個(gè)就是針對(duì)主庫進(jìn)行的操作,比如一些授權(quán)的SQL語句)
笛卡爾路由引擎CartesianRoutingEngine、
混合路由引擎ComplexRoutingEngine、
標(biāo)準(zhǔn)路由引擎StandardRoutingEngine
標(biāo)準(zhǔn)路由
標(biāo)準(zhǔn)路由是ShardingSphere推薦使用的一種分片路由策略,在進(jìn)行分片表只有一個(gè)或者分片表是綁定關(guān)系,這個(gè)綁定關(guān)系是在配置文件中定義的,比如如下配置:
shardingRule: bindingTables: table1,table2
這個(gè)配置文件會(huì)解析成BindingTableRule集合,在進(jìn)行判斷綁定關(guān)系的時(shí)候根據(jù)邏輯表名獲取BindingTableRule對(duì)象,判斷是否在集合中,如果有就表明存在綁定關(guān)系
路由邏輯
路由邏輯在StandardRoutingEngine的route()中體現(xiàn),具體邏輯是分兩步走,先獲取數(shù)據(jù)節(jié)點(diǎn),在生成路由結(jié)果,獲取路由接點(diǎn)對(duì)應(yīng)StandardRoutingEngine的getDataNodes()方法:
private Collection<DataNode> getDataNodes(final TableRule tableRule) { if (isRoutingByHint(tableRule)) { return routeByHint(tableRule); } if (isRoutingByShardingConditions(tableRule)) { return routeByShardingConditions(tableRule); } return routeByMixedConditions(tableRule); }
- 如果是基于Hint的路由,具體就判斷分片策略是否為HintShardingStrategy對(duì)象,調(diào)用routeByHint()方法
- 如果是分片條件的路由,調(diào)用isRoutingByShardingConditions()方法
- 否則就調(diào)用復(fù)合條件的路由
這三種情況都會(huì)調(diào)用route0()方法,先進(jìn)行數(shù)據(jù)源的路由,再進(jìn)行表的路由,生成數(shù)據(jù)節(jié)點(diǎn)
總結(jié)
這篇文章我們介紹了RoutingEngineFactory的newInstance()方法的具體邏輯,主要功能就是根據(jù)不同的SQL語句來創(chuàng)建不同的路由引擎,我們羅列一下ShardingSphere支持哪些路由引擎,并介紹了這些路由引擎的應(yīng)用場景,其中對(duì)標(biāo)準(zhǔn)路由進(jìn)行詳細(xì),介紹,先是根據(jù)路由規(guī)則獲取數(shù)據(jù)節(jié)點(diǎn),然后生成路由結(jié)果,具體路由策略在ShardingStrategy的實(shí)現(xiàn)類中體現(xiàn)。
以上就是java開發(fā)ShardingSphere的路由引擎類型示例詳解的詳細(xì)內(nèi)容,更多關(guān)于java ShardingSphere路由引擎的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Mybatis 動(dòng)態(tài)表名+Map參數(shù)傳遞+批量操作詳解
這篇文章主要介紹了Mybatis 動(dòng)態(tài)表名+Map參數(shù)傳遞+批量操作詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-12-12Mybatis特殊字符轉(zhuǎn)義查詢實(shí)現(xiàn)
本文主要介紹了Mybatis特殊字符轉(zhuǎn)義查詢實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-02-02基于Springboot+Mybatis對(duì)數(shù)據(jù)訪問層進(jìn)行單元測試的方式分享
本文將介紹一種快高效、可復(fù)用的解決測試方案——對(duì)數(shù)據(jù)訪問層做單元測試,文章通過代碼示例介紹的非常詳細(xì),具有一定的參考價(jià)值,需要的朋友可以參考下2023-07-07Java基于線程實(shí)現(xiàn)帶有滾動(dòng)效果的Label標(biāo)簽實(shí)例
這篇文章主要介紹了Java基于線程實(shí)現(xiàn)帶有滾動(dòng)效果的Label標(biāo)簽,實(shí)例分析了java線程的使用技巧及l(fā)abel標(biāo)簽的實(shí)現(xiàn)方法,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-07-07