Sharding-Jdbc 插件應用


 

Sharding-Jdbc介紹

Sharding-Jdbc在3.0后改名為Shardingsphere它由Sharding-JDBCSharding-ProxySharding-Sidecar(計划中)這3款相互獨立的產品組成。他們均提供標准化的數據分片分布式事務數據庫治理功能,可適用於如Java同構、異構語言、容器、雲原生等各種多樣化的應用場景。

Sharding-Sphere定位為關系型數據庫中間件,旨在充分合理地在分布式的場景下利用關系型數據庫的計算和存儲能力,而並非實現一個全新的關系型數據庫。它通過關注不變,進而抓住事物本質。關系型數據庫當今依然占有巨大市場,是各個公司核心業務的基石,未來也難於撼動,我們目前階段更加關注在原有基礎上的增量,而非顛覆。 應用場景: 數據庫讀寫分離 數據庫分表分庫

相關資料:

Sharding-Jdbc官方網址: https://shardingsphere.apache.org/

 

Sharding-Jdbc與MyCat區別

MyCat是一個基於第三方應用中間件數據庫代理框架,客戶端所有的jdbc請求都必須要先交給MyCat,再有MyCat轉發到具體的真實服務器中

Sharding-Jdbc是一個Jar形式,在本地應用層重寫Jdbc原生的方法,實現數據庫分片形式。 MyCat屬於服務器端數據庫中間件,而Sharding-Jdbc是一個本地數據庫中間件框架

從設計理念上看確實有一定的相似性。主要流程都是SQL 解析 -> SQL 路由 -> SQL 改寫 -> SQL 執行 -> 結果歸並。但架構設計上是不同的。Mycat 是基於 Proxy,它復寫了 MySQL 協議,將 Mycat Server 偽裝成一個 MySQL 數據庫,而 Sharding-JDBC 是基於 JDBC 的擴展,是以 jar 包的形式提供輕量級服務的。

類似於在微服務中的SpringCloud Ribbon與Nginx區別。

 

 

 

 

 Sharding-Jdbc實現讀寫分離

Sharding-Jdbc實現讀寫分離原理,非常容易。只需要在項目中集成主和從的數據源,Sharding-Jdbc自動根據DML和DQL 語句類型連接主或者從數據源。

注意: Sharding-Jdbc只是實現連接主或者從數據源,不會實現主從復制功能,需要自己配置數據庫自帶主從復制方式。

查看MasterSlaveDataSource即可查看該類getDataSource方法獲取當前數據源名稱

DML:數據查詢語言DQL基本結構是由SELECT子句,FROM子句,WHERE 子句組成的查詢塊: SELECT <字段名表> FROM <表或視圖名> WHERE <查詢條件>

DQL:數據操縱語言DML主要有三種形式: 1) 插入:INSERT 2) 更新:UPDATE 3) 刪除:DELETE

實現讀寫分離原理:

1.需要在配置文件中配置讀寫分離jdbc連接全部都交給Sharding-jdbc,配置主數據和從數據庫。主數據庫與從數據庫是通過二進制文件進行數據同步的。

2.Sharding-jdbc 會自動判斷sql 語句類型(DML或者DQL),如果是DML語句的話 會獲取主數據庫的jdbc連接配置進行發送請求。如果是DQL語句的話,獲取從數據庫的配置文件進行發送請求。

 Sharding-Jdbc分表分庫

LogicTable

數據分片的邏輯表,對於水平拆分的數據庫(表),同一類表的總稱。

訂單信息表拆分為2張表,分別是t_order_0、t_order_1,他們的邏輯表名為t_order。

ActualTable

在分片的數據庫中真實存在的物理表。即上個示例中的t_order_0、t_order_1。

DataNode

數據分片的最小單元。由數據源名稱和數據表組成,例:test_msg0.t_order_0。配置時默認各個分片數據庫的表結構均相同,直接配置邏輯表和真實表對應關系即可。

ShardingColumn

分片字段。用於將數據庫(表)水平拆分的關鍵字段。SQL中如果無分片字段,將執行全路由,性能較差。Sharding-JDBC支持多分片字段。

ShardingAlgorithm

分片算法。Sharding-JDBC通過分片算法將數據分片,支持通過等號、BETWEEN和IN分片。分片算法目前需要業務方開發者自行實現,可實現的靈活度非常高。未來Sharding-JDBC也將會實現常用分片算法,如range,hash和tag等。

 

SpringBoot整合Sharding-Jdbc分為兩種方式

第一種為原生配置方式,自己需要實現接口。 1.分庫算法類需要實現SingleKeyDatabaseShardingAlgorithm<T>接口 2.分表算法類需要實現SingleKeyTableShardingAlgorithm<T>接口

第二種通過配置文件形式配置。 案例比如:t_order 拆分程t_order_0 t_order _1

Sharding-Jdbc日志分析與原理圖

1.Sharding-JDBC中的路由結果是通過分片字段和分片方法來確定的,如果查詢條件中有 id 字段的情況還好,查詢將會落到某個具體的分片。

2.如果查詢沒有分片的字段,會向所有的db或者是表都會查詢一遍,讓后封裝結果級給客戶端。 Sharding-Jdbc和MyCat查詢原理大致相同。

 

源碼地址:https://gitee.com/MingTian-NiHao/springbootZhengHemysql/tree/dev-sharding-jdbc/

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM