最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java中sharding-jdbc 綁定表的實現(xiàn)

 更新時間:2026年03月18日 10:20:49   作者:_Jimmy_  
綁定表是 ShardingSphere-JDBC 解決跨庫表關(guān)聯(lián)查詢的核心機制,通過強制分片鍵和算法一致的表路由到同一物理庫,實現(xiàn)高效本地關(guān)聯(lián),適用于大表之間的關(guān)聯(lián)場景,避免了全局表的存儲冗余,下面就來詳細的介紹一下如何使用,感興趣的可以了解一下

在 ShardingSphere-JDBC 中,綁定表(Binding Table) 是解決跨庫表關(guān)聯(lián)查詢的核心機制之一,主要用于優(yōu)化分片鍵相同、分片規(guī)則一致的表之間的關(guān)聯(lián)查詢性能。通過綁定表,ShardingSphere 可以將關(guān)聯(lián)的兩張表路由到同一個物理庫,實現(xiàn)本地關(guān)聯(lián),避免跨庫查詢的開銷。

一、綁定表的定義與核心作用

1. 定義

綁定表是指分片鍵相同、分片算法一致的兩張或多張表。ShardingSphere 會基于分片鍵的路由結(jié)果,將這兩張表映射到同一個物理庫的本地表,確保關(guān)聯(lián)查詢可以在本地完成。

2. 核心作用

  • 避免跨庫關(guān)聯(lián):關(guān)聯(lián)表路由到同一物理庫,無需跨庫網(wǎng)絡(luò)傳輸。
  • 提升查詢性能:本地關(guān)聯(lián)效率遠高于跨庫關(guān)聯(lián)(尤其對大表)。
  • 簡化分片規(guī)則:無需將關(guān)聯(lián)表配置為全局表(避免存儲冗余)。

二、綁定表的典型場景

最常見的是主子表關(guān)聯(lián)(如訂單表與訂單項表),兩者通常以相同字段(如 order_id)作為分片鍵,且分片規(guī)則一致。例如:

  • 訂單表 t_order(分片鍵:order_id,按 order_id % 4 分片到 db_order_0~3)。
  • 訂單項表 t_order_item(分片鍵:order_id,按 order_id % 4 分片到 db_order_item_0~3)。

此時,若直接關(guān)聯(lián)查詢 t_order 和 t_order_item,ShardingSphere 可能將它們路由到不同庫(如 t_order 到 db_order_0,t_order_item 到 db_order_item_1),導致跨庫關(guān)聯(lián)。通過綁定表,可強制兩者路由到同一庫(如 db_order_0 和 db_order_item_0)。

三、綁定表的配置步驟

以下以 Spring Boot 配置為例,演示訂單表 t_order 與訂單項表 t_order_item 的綁定表配置。

1. 場景說明

  • 邏輯表t_order(訂單表)、t_order_item(訂單項表)。
  • 分片鍵:兩者均以 order_id 為分片鍵。
  • 分片算法:均按 order_id % 4 分片到 4 個庫(order_db_0~3)和本地表(t_order_0~3、t_order_item_0~3)。

2. 配置文件(application.yml)

spring:
  shardingsphere:
    datasource:
      names: order_db_0, order_db_1, order_db_2, order_db_3  # 訂單庫的物理庫
      # 省略具體數(shù)據(jù)源連接配置(每個物理庫需單獨配置)

    rules:
      sharding:
        tables:
          # 訂單表 t_order(邏輯表)
          t_order:
            actual-data-nodes: order_db_${0..3}.t_order_${0..3}  # 路由到 order_db 的 0~3 庫,每個庫有 t_order_0~3 表
            database-strategy:
              standard:
                sharding-column: order_id
                sharding-algorithm-name: db_order_inline
            table-strategy:
              standard:
                sharding-column: order_id
                sharding-algorithm-name: table_order_inline

          # 訂單項表 t_order_item(邏輯表,與 t_order 綁定)
          t_order_item:
            actual-data-nodes: order_db_${0..3}.t_order_item_${0..3}  # 與 t_order 相同的庫和表分片規(guī)則
            database-strategy:
              standard:
                sharding-column: order_id
                sharding-algorithm-name: db_order_inline  # 與 t_order 的庫分片算法一致
            table-strategy:
              standard:
                sharding-column: order_id
                sharding-algorithm-name: table_order_inline  # 與 t_order 的表分片算法一致

        # 分片算法(庫級和表級)
        sharding-algorithms:
          # 庫分片算法:order_id % 4 決定庫索引
          db_order_inline:
            type: INLINE
            props:
              algorithm-expression: order_db_${order_id % 4}
          # 表分片算法:order_id % 4 決定表索引(每個庫內(nèi)有 4 張本地表)
          table_order_inline:
            type: INLINE
            props:
              algorithm-expression: t_order_${order_id % 4}

        # 綁定表配置(關(guān)鍵!)
        binding-tables:
          - t_order, t_order_item  # 聲明 t_order 和 t_order_item 為綁定表

3. 關(guān)鍵配置說明

  • binding-tables:顯式聲明綁定表列表,ShardingSphere 會基于此處理關(guān)聯(lián)查詢的路由。
  • 分片策略一致:t_order 和 t_order_item 的庫分片算法(db_order_inline)和表分片算法(table_order_inline)完全一致,確保它們路由到同一物理庫的同一索引位置(如 order_id=100 時,均路由到 order_db_2 庫的 t_order_2 和 t_order_item_2 表)。

四、綁定表的關(guān)聯(lián)查詢驗證

配置完成后,執(zhí)行關(guān)聯(lián)查詢 SQL,驗證是否路由到同一物理庫。

示例 SQL

SELECT o.order_id, o.amount, i.item_id, i.product_name 
FROM t_order o 
JOIN t_order_item i ON o.order_id = i.order_id 
WHERE o.order_id = 100;  -- 包含分片鍵條件

路由邏輯

  1. ShardingSphere 解析 SQL,提取分片鍵 order_id=100。
  2. 根據(jù)綁定表配置,t_order 和 t_order_item 均按 order_id % 4 路由:
    • 庫路由:order_id % 4 = 100 % 4 = 2 → 庫名為 order_db_2。
    • 表路由:order_id % 4 = 2 → 表名為 t_order_2 和 t_order_item_2。
  3. 最終在 order_db_2 庫中執(zhí)行本地關(guān)聯(lián)查詢(t_order_2 和 t_order_item_2),無需跨庫。

五、綁定表 vs 全局表

特性綁定表全局表
數(shù)據(jù)存儲分片存儲(每個庫僅存部分數(shù)據(jù))全量存儲(每個庫存完整數(shù)據(jù))
適用場景大表關(guān)聯(lián)(如訂單與訂單項)小表關(guān)聯(lián)(如用戶字典、配置表)
存儲冗余無冗余高冗余(所有庫存儲全量數(shù)據(jù))
路由規(guī)則分片鍵和算法一致,路由到同一庫無需分片,所有庫均有數(shù)據(jù)

六、注意事項

  1. 分片鍵與算法必須一致:綁定表的分片鍵(如 order_id)和分片算法(庫/表策略)必須完全相同,否則無法路由到同一庫。
  2. SQL 需包含分片鍵:關(guān)聯(lián)查詢的 WHERE 條件必須包含分片鍵(如 order_id),否則 ShardingSphere 無法確定路由目標,可能觸發(fā)全庫掃描。
  3. 多表綁定:支持多個表綁定(如 t_order、t_order_item、t_order_log 均綁定),但需確保所有表的分片規(guī)則一致。
  4. 結(jié)果合并:ShardingSphere 會自動合并跨庫結(jié)果,但復雜關(guān)聯(lián)(如多表排序、分頁)需測試驗證性能。

總結(jié)

綁定表是 ShardingSphere-JDBC 解決跨庫表關(guān)聯(lián)查詢的核心機制,通過強制分片鍵和算法一致的表路由到同一物理庫,實現(xiàn)高效本地關(guān)聯(lián)。適用于大表之間的關(guān)聯(lián)場景(如主子表),避免了全局表的存儲冗余,同時提升了查詢性能。配置時需確保分片規(guī)則一致,并在 SQL 中包含分片鍵條件。

到此這篇關(guān)于Java中sharding-jdbc 綁定表的實現(xiàn)的文章就介紹到這了,更多相關(guān)Java中sharding-jdbc 綁定表內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • java Long 與long之間的轉(zhuǎn)換流程

    java Long 與long之間的轉(zhuǎn)換流程

    Long類提供了一些方法,用于在long和其他數(shù)據(jù)類型(如String)之間進行轉(zhuǎn)換,本文將詳細介紹如何在Java中實現(xiàn)Long和long之間的轉(zhuǎn)換,感興趣的朋友一起看看吧
    2025-06-06
  • Java AQS(AbstractQueuedSynchronizer)源碼解析

    Java AQS(AbstractQueuedSynchronizer)源碼解析

    AbstractQueuedSynchronizer被稱為隊列同步器,簡稱為大家熟知的AQS,這個類可以稱作concurrent包的基礎(chǔ)。本文將通過剖析源碼來看看AQS是如何工作的,感興趣的可以了解一下
    2023-02-02
  • java 數(shù)值類型分秒時間格式化的實例代碼

    java 數(shù)值類型分秒時間格式化的實例代碼

    這篇文章主要介紹了java 數(shù)值類型分秒時間格式化的實例代碼的相關(guān)資料,將秒或分鐘的值轉(zhuǎn)換為xx天xx小時xx分鐘xx秒 如果 “xx” 為0 自動缺省,需要的朋友可以參考下
    2017-07-07
  • Spring集成事務代碼實例

    Spring集成事務代碼實例

    這篇文章主要介紹了Spring集成事務代碼實例,pring事務的本質(zhì)其實就是數(shù)據(jù)庫對事務的支持,使用JDBC的事務管理機制,就是利用java.sql.Connection對象完成對事務的提交,需要的朋友可以參考下
    2023-10-10
  • Java中的數(shù)組基礎(chǔ)知識學習教程

    Java中的數(shù)組基礎(chǔ)知識學習教程

    這篇文章主要介紹了Java中的數(shù)組基礎(chǔ)知識學習教程,文中同時也整理了Java對數(shù)字類型的支持狀況及Number類中的方法,需要的朋友可以參考下
    2016-02-02
  • Mybatis的核心配置文件使用方法

    Mybatis的核心配置文件使用方法

    Mybatis的核心配置文件有兩個,一個是全局配置文件,它包含了會深深影響Mybatis行為的設(shè)置和屬性信息;一個是映射文件,它很簡單,讓用戶能更專注于SQL代碼,本文主要介紹了Mybatis的核心配置文件使用方法,感興趣的可以了解一下
    2023-11-11
  • 基于Spring Security實現(xiàn)RBAC權(quán)限控制的完整步驟

    基于Spring Security實現(xiàn)RBAC權(quán)限控制的完整步驟

    文章主要講述了基于角色的訪問控制(RBAC)的基本概念、SpringSecurity的核心功能,以及實現(xiàn)RBAC的詳細步驟,包括定義用戶模型和角色、密碼加密、JWT工具類、讓SpringSecurity認識用戶的用戶模型、JWT認證過濾器以及安全配置規(guī)則等,需要的朋友可以參考下
    2026-04-04
  • java實現(xiàn)爬取知乎用戶基本信息

    java實現(xiàn)爬取知乎用戶基本信息

    這篇文章主要為大家介紹了一個基于JAVA的知乎爬蟲,抓取知乎用戶基本信息,感興趣的小伙伴們可以參考一下
    2016-05-05
  • JavaWeb簡單用戶登錄注冊實例代碼(有驗證碼)

    JavaWeb簡單用戶登錄注冊實例代碼(有驗證碼)

    這篇文章主要介紹了JavaWeb簡單用戶登錄注冊實例代碼,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-02-02
  • 使用MyBatisPlus自動生成代碼后tomcat運行報錯的問題及解決方法

    使用MyBatisPlus自動生成代碼后tomcat運行報錯的問題及解決方法

    這篇文章主要介紹了使用MyBatisPlus自動生成代碼后tomcat運行報錯的問題及解決方法,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-08-08

最新評論

扎囊县| 白沙| 汤阴县| 谢通门县| 罗源县| 阳春市| 伊宁县| 百色市| 桂阳县| 布拖县| 贵德县| 清水河县| 黎平县| 桃园市| 襄垣县| 红安县| 双牌县| 淄博市| 苍山县| 乃东县| 岫岩| 南澳县| 郯城县| 平定县| 厦门市| 东乌| 横峰县| 建德市| 贵州省| 海兴县| 济阳县| 青川县| 清水河县| 石屏县| 辽宁省| 左贡县| 陕西省| 中西区| 花莲市| 信宜市| 泗阳县|