java開發(fā)ShardingSphere的路由引擎類型示例詳解
ShardingSphere的路由引擎類型
本篇文章源碼基于4.0.1版本
上篇文章我們了解到了ShardingSphere在路由流程過程中,根據(jù)不同類型的SQL會現(xiàn)在不同的路由引擎,而ShardingSphere支持的路由規(guī)則也很多了,包括廣播(broadcast)路由、混合(complex)路由、默認(rèn)數(shù)據(jù)庫(defaultdb)路由、無效(ignore)路由、標(biāo)準(zhǔn)(standard)路由以及單播(unicast)路由等等,那么具體這些路由規(guī)則對應(yīng)的是什么路由引擎呢?今天我們就聊聊這個。
路由引擎類型
RoutingEngineFactory 用來創(chuàng)建路由引擎的實例,對應(yīng)的是它的newInstance()方法,根據(jù)Sql語句SQLStatement對象的類型選擇不同的路由引擎,有
全庫廣播路由引擎DatabaseBroadcastRoutingEngine、
全庫表廣播路由引擎TableBroadcastRoutingEngine、
無效路由引擎IgnoreRoutingEngine、
默認(rèn)數(shù)據(jù)庫路由引擎DefaultDatabaseRoutingEngine(對默認(rèn)的數(shù)據(jù)庫進行路由)、
單播路由引擎UnicastRoutingEngine(單播路由只需要在任何數(shù)據(jù)庫的任何表中獲取就可以,相當(dāng)于獲取表中公有信息)、
數(shù)據(jù)源組的廣播路由引擎DataSourceGroupBroadcastRoutingEngine、
數(shù)據(jù)庫主庫實例的廣播路由引擎MasterInstanceBroadcastRoutingEngine(這個就是針對主庫進行的操作,比如一些授權(quán)的SQL語句)
笛卡爾路由引擎CartesianRoutingEngine、
混合路由引擎ComplexRoutingEngine、
標(biāo)準(zhǔn)路由引擎StandardRoutingEngine
標(biāo)準(zhǔn)路由
標(biāo)準(zhǔn)路由是ShardingSphere推薦使用的一種分片路由策略,在進行分片表只有一個或者分片表是綁定關(guān)系,這個綁定關(guān)系是在配置文件中定義的,比如如下配置:
shardingRule:
bindingTables:
table1,table2
這個配置文件會解析成BindingTableRule集合,在進行判斷綁定關(guān)系的時候根據(jù)邏輯表名獲取BindingTableRule對象,判斷是否在集合中,如果有就表明存在綁定關(guān)系
路由邏輯
路由邏輯在StandardRoutingEngine的route()中體現(xiàn),具體邏輯是分兩步走,先獲取數(shù)據(jù)節(jié)點,在生成路由結(jié)果,獲取路由接點對應(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對象,調(diào)用routeByHint()方法
- 如果是分片條件的路由,調(diào)用isRoutingByShardingConditions()方法
- 否則就調(diào)用復(fù)合條件的路由
這三種情況都會調(diào)用route0()方法,先進行數(shù)據(jù)源的路由,再進行表的路由,生成數(shù)據(jù)節(jié)點
總結(jié)
這篇文章我們介紹了RoutingEngineFactory的newInstance()方法的具體邏輯,主要功能就是根據(jù)不同的SQL語句來創(chuàng)建不同的路由引擎,我們羅列一下ShardingSphere支持哪些路由引擎,并介紹了這些路由引擎的應(yīng)用場景,其中對標(biāo)準(zhǔn)路由進行詳細,介紹,先是根據(jù)路由規(guī)則獲取數(shù)據(jù)節(jié)點,然后生成路由結(jié)果,具體路由策略在ShardingStrategy的實現(xiàn)類中體現(xiàn)。
以上就是java開發(fā)ShardingSphere的路由引擎類型示例詳解的詳細內(nèi)容,更多關(guān)于java ShardingSphere路由引擎的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
部署springboot打包不打包配置文件,配置文件為外部配置文件使用詳解
在Spring Boot項目中,將配置文件排除在jar包之外,通過外部配置文件來管理不同環(huán)境的配置,可以實現(xiàn)靈活的配置管理,在pom.xml文件中添加相關(guān)配置,打包時忽略指定文件,運行時在jar包同級目錄下創(chuàng)建config文件夾,將配置文件放入其中即可2025-02-02
SpringBoot配置文件bootstrap和application區(qū)別及說明
這篇文章主要介紹了SpringBoot配置文件bootstrap和application區(qū)別及說明,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-06-06
idea項目結(jié)構(gòu)中不顯示out文件夾的解決
本文通過圖片的方式詳細解釋操作步驟,使讀者能夠更直觀更方便地理解和執(zhí)行操作,同時,文章末尾祝福讀者步步高升,一帆風(fēng)順,展現(xiàn)了作者的人情味和親和力,整體來說,這是一篇簡單易懂、實用性強的操作指南2024-10-10
SpringBoot多數(shù)據(jù)源解決方案:dynamic-datasource-spring-boot-starter
本文主要介紹了SpringBoot多數(shù)據(jù)源解決方案,使用dynamic-datasource-spring-boot-starter實現(xiàn),具有一定的參考價值,感興趣的可以了解一下2025-03-03
MyBatis-Plus實現(xiàn)對查詢結(jié)果進行分頁的基本步驟
MyBatis-Plus 是一個 MyBatis 的增強工具,在 MyBatis 的基礎(chǔ)上只做增強不做改變,為簡化開發(fā)、提高效率而生,MyBatis-Plus 支持多種數(shù)據(jù)庫的分頁查詢,其分頁功能是通過 Page 類實現(xiàn)的,本文介紹了使用 MyBatis-Plus 實現(xiàn)分頁查詢的基本步驟,需要的朋友可以參考下2024-08-08

