基於Sharding-Jdbc實現讀寫分離
基於Sharding-Jdbc實現分表分庫
Sharding-Jdbc源碼分析
數據庫集群自動增長id,Sharding-Jdbc 雪花算法
Sharding-Jdbc介紹
Sharding-Jdbc在3.0后改名為Shardingsphere它由Sharding-JDBC、Sharding-Proxy和Sharding-Sidecar(計划中)這3款相互獨立的產品組成。他們均提供標准化的數據分片、分布式事務和數據庫治理功能,可適用於如Java同構、異構語言、容器、雲原生等各種多樣化的應用場景。
Sharding-Sphere定位為關系型數據庫中間件,旨在充分合理地在分布式的場景下利用關系型數據庫的計算和存儲能力,而並非實現一個全新的關系型數據庫。它通過關注不變,進而抓住事物本質。關系型數據庫當今依然占有巨大市場,是各個公司核心業務的基石,未來也難於撼動,我們目前階段更加關注在原有基礎上的增量,而非顛覆。
應用場景:
數據庫讀寫分離
數據庫分表分庫
相關資料:
Sharding-Jdbc官方網址: http://shardingsphere.io/index_zh.html
改名新聞: https://www.oschina.net/news/95889/sharding-jdbc-change-to-sphere
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區別。
如圖所示:
MyCat屬於服務器端的
Sharding-Jdbc屬於本底的
類似於Nginx和Rabbon
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
需要在配置文件配置讀寫分離jdbc連接全部交給 全部交給Sharding-Jdbc
主數據庫和從數據庫 主的數據庫與從的數據庫采用二進制文件實現數據同步
Sharding-Jdbc 會自動判斷sql語句類型 (DML或者DQL),如果是DML語句的話 會獲取主的jdbc連接配置進行發送請求,如果是DQL語句的話,
它沒有實現主從同步,只是單純實現DML語句或者SQL語句