欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

java開發(fā)ShardingSphere的路由引擎類型示例詳解

 更新時(shí)間:2022年08月03日 14:10:16   作者:周杰倫本人  
這篇文章主要為大家介紹了java開發(fā)ShardingSphere的路由引擎類型示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

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)文章

  • Java基礎(chǔ)之ClassLoader詳解

    Java基礎(chǔ)之ClassLoader詳解

    這篇文章主要介紹了Java基礎(chǔ)之ClassLoader詳解,文中對(duì)ClassLoader有非常詳細(xì)的解說,對(duì)正在學(xué)習(xí)java基礎(chǔ)的小伙伴們有非常好的幫助,需要的朋友可以參考下
    2021-04-04
  • 最新評(píng)論