Apache ShardingSphere 作為 Apache 頂級項目,是數據庫領(lǐng)域最受歡迎的開(kāi)源項目之一。經(jīng)過(guò) 5 年多的發(fā)展,ShardingSphere 已獲得超 14K Stars 的關(guān)注,270+ 貢獻者,建立起了活躍的社區生態(tài)。
隨著(zhù)項目的蓬勃發(fā)展,版本的不斷更迭,Apache ShardingSphere 支持的特性逐漸增多,功能日益強大,配置規則也在不斷優(yōu)化。為了幫助用戶(hù)更好地理解各項特性和配置規則,方便用戶(hù)快速測試并運行相關(guān)功能組件,找到最佳實(shí)現,shardingsphere-example 項目應運而生。
shardingsphere-example 是一個(gè)獨立的 Maven 項目,位于 Apache ShardingSphere 項目的 examples 目錄下。
項目地址:
江龍滔
SphereEx 中間件研發(fā)工程師,Apache ShardingSphere contributor。目前專(zhuān)注于 ShardingSphere 數據庫中間件研發(fā)及開(kāi)源社區建設。
侯陽(yáng)
SphereEx 中間件研發(fā)工程師,目前從事 ShardingSphere 數據庫中間件研發(fā),熱愛(ài)開(kāi)源,希望同大家一起建設更好的社區。
模塊詳解
shardingsphere-example 項目包含多個(gè)模塊,將為用戶(hù)帶來(lái)水平拆分、讀寫(xiě)分離、分布式治理、分布式事務(wù)、數據加密、強制路由、影子庫等功能的使用及配置樣例,覆蓋 Java API、YAML、Spring Boot、Spring Namespace 等多種業(yè)務(wù)常用的接入形態(tài)。除了 ShardingSphere-JDBC,shardingsphere-example 中還增加了 ShardingSphere-Proxy 和 ShardingSphere-Parser 的使用案例。
所有涉及到 Apache ShardingSphere 的功能特性、接入場(chǎng)景以及各種靈活的配置方式,都可以在官方的 repo 里找到樣例,方便用戶(hù)查詢(xún)和參考。下表展示了 shardingsphere-example 的模塊分布情況: shardingsphere-example
1. example-core
example 核心模塊,包含實(shí)體、接口定義和其他公用代碼。
ShardingSphere-JDBC 示例模塊,展示 ShardingSphere-JDBC 的功能特性和各種使用方式。
展示如何使用 ShardingSphere-JDBC 進(jìn)行數據分片,包含分庫、分表、分庫+分表、讀寫(xiě)分離、讀寫(xiě)分離+分庫分表的應用場(chǎng)景。在 ORM 集成方面,本模塊也貼心的為用戶(hù)提供了 MyBatis 和 JPA 的集成樣例。
展示 ShardingSphere-JDBC 在分布式治理方面的應用,包含了分庫分表、讀寫(xiě)分離、數據加密、影子庫等特性與分布式治理相結合的應用場(chǎng)景。
注意:
分布式治理 example 依賴(lài) Apache ZooKeeper,請自行部署。
展示 ShardingSphere-JDBC 支持的多種分布式事務(wù)管理方式,用戶(hù)可以根據應用場(chǎng)景選擇適合的分布式事務(wù)管理器進(jìn)行使用。鑒于分布式事務(wù)的特殊性,本模塊的示例都是基于分庫、分表或分庫+分表的場(chǎng)景設計的。
注意:
Seata 事務(wù)管理器需要自行部署。
ShardingSphere-JDBC 其他功能特性的示例,目前包含了 encrypt(數據加密)、hint(強制路由)、shadow(影子庫)幾種類(lèi)型。
數據加密功能示例,同樣包含了 Java API、YAML、Spring Boot、Spring Namespace 等幾種接入方式的樣例。
強制路由功能示例,目前只提供了 YAML 配置方式的案例,更多場(chǎng)景歡迎補充。
影子庫功能示例,包含了影子庫特性與數據加密、分庫分表、讀寫(xiě)分離等特性結合的應用樣例。
本模塊展示 ShardingSphere-JDBC 的自定義擴展能力,用戶(hù)可以通過(guò) SPI 或 ShardingSphere 提供的其他方式進(jìn)行功能擴展。
展示了如何通過(guò) 'CLASS_BASED' 方式進(jìn)行自定義分片算法的擴展。
SQLParserEngine
是 Apache ShardingSphere 定制的 SQL 解析引擎,也是 ShardingSphere-JDBC 和 ShardingSphere-Proxy 的能力基礎。用戶(hù)輸入的 SQL 文本
通過(guò)
SQLParserEngine
解析成可以識別的語(yǔ)法對象,之后才能進(jìn)行路由、改寫(xiě)等增強操作。
從 5.0.0-alpha 版本開(kāi)始,Apache ShardingSphere 將 SQL 解析這一核心能力開(kāi)放給用戶(hù),用戶(hù)可以通過(guò) API 調用
SQLParserEngine,在自己的應用系統中進(jìn)行高效的 SQL 解析,滿(mǎn)足更多個(gè)性化的業(yè)務(wù)需要。
本模塊展示了
SQLParserEngine API 的使用方式,覆蓋了 MySQL、PostgreSQL、Oracle、SQLServer 以及 SQL92 等各種語(yǔ)法形式。
ShardingSphere-Proxy 示例模塊,包含了分庫分表、讀寫(xiě)分離和強制路由等常用場(chǎng)景的配置樣例。由于 ShardingSphere-Proxy 與 ShardingSphere-JDBC 在功能特性的支持度上大體相同,未列舉的示例也可以對照
shardingsphere-jdbc-example
進(jìn)行參考。
展示了通過(guò) Proxy 配置數據分片,并使用 SpringBoot + MyBatis 的方式進(jìn)行數據訪(fǎng)問(wèn)的場(chǎng)景示例。
展示了通過(guò) Proxy 配置強制路由,并使用 Java 客戶(hù)端進(jìn)行數據訪(fǎng)問(wèn)的場(chǎng)景示例。
近期優(yōu)化
在 Apache ShardingSphere 5.0.0-beta 版本發(fā)布之際,社區貢獻者對 shardingsphere-example 也進(jìn)行了升級和優(yōu)化,主要包括:
JDK 版本升級
組件版本升級
類(lèi)命名優(yōu)化
配置文件優(yōu)化
SQL 腳本優(yōu)化
以下是升級相關(guān)的詳細內容:
JDK 版本升級
在以 Java 作為主要語(yǔ)言的專(zhuān)業(yè)開(kāi)發(fā)者中,Java 8 LTS(長(cháng)期支持版本)仍然是最受歡迎的版本。
來(lái)源《JetBrains 公司 2020 關(guān)于 Java 的報告》:https://blog.jetbrains.com/zh-hans/idea/2020/10/java-2020/
shardingsphere-example 升級以后要求 Java 8 作為最低版本。如果您當前使用的是 Java 7 或更早版本,則需要先升級 JDK。
Spring 依賴(lài)升級
shardingsphere-example 對 Spring 相關(guān)組件進(jìn)行升級。
spring-boot version 由 1.5.17 升級到 2.0.9.RELEASE
springframework version 由 4.3.20.RELEASE 升級到 5.0.13.RELEASE
mybatis-spring-boot-start version 由 1.3.0 升級到 2.0.1
mybatis-spring version 由 1.3.0 升級到 2.0.1
持久層框架升級
shardingsphere-example 對持久層框架 MyBatis 和 Hibernate 進(jìn)行了升級。
mybatis version 由 3.4.2 升級到 3.5.1
hibernate version 由 4.3.11.Final 升級到 5.2.18.Final
數據庫連接池升級
shardingsphere-example 對數據庫連接池 HikariCP 進(jìn)行了升級。
HikariCP artifactId 由 HikariCP-java7 升級到 HikariCP
HikariCP version 由 2.4.11 升級到 3.4.2
數據庫驅動(dòng)升級
shardingsphere-example 對 MySQL 和 PostgreSQL 連接驅動(dòng)進(jìn)行了升級。
mysql-connector-java version 由 5.1.42 升級到 5.1.47
postgresql version 由 42.2.5.jre7 升級到 42.2.5
Example 運行示例
從這里開(kāi)始,我們將通過(guò)幾個(gè)典型場(chǎng)景來(lái)說(shuō)明如何配置和運行 example。
由于 shardingsphere-example 項目模塊眾多,本次挑選幾個(gè)關(guān)注度較高的 ShardingSphere-JDBC 應用場(chǎng)景來(lái)舉例說(shuō)明。
前置準備
1. shardingsphere-example 使用 Maven 作為構建工具,請提前準備 Maven 環(huán)境;
2. 準備 Apache ShardingSphere,如果你的設備中尚未安裝 Apache ShardingSphere,可以按照如下方式進(jìn)行下載和編譯:
## 克隆 Apache ShardingSphere 項目
3. 將 shardingsphere-example 項目導入自己的 IDE 中;
4. 準備一個(gè)可管理的數據庫環(huán)境,例如本地的 MySQL 實(shí)例;
5. 如需運行讀寫(xiě)分離測試,請確保數據庫的主從同步機制工作正常;
6. 執行數據庫初始化腳本:examples/src/resources/manual_schema.sql
場(chǎng)景示例
sharding-spring-boot-mybatis-example「分庫分表場(chǎng)景」
examples/shardingsphere-jdbc-example/sharding-example/sharding-spring-boot-mybatis-example
本示例展示 ShardingSphere-JDBC 結合 SpringBoot 和 MyBatis 進(jìn)行分庫分表的應用場(chǎng)景。此次分片的目標是 2 庫 4 表,即將一張邏輯表拆分為 4 個(gè)分片,均勻保存在 2 個(gè)不同的數據庫中。
配置 application.properties
將 spring.profiles.active 設置為
sharding-databases-tables
配置 application-sharding-databases-tables.properties
將
jdbc-url
修改為自己的數據庫地址,并配置正確的用戶(hù)名密碼等信息
將
spring.shardingsphere.props.sql-show
屬性設置為
true
詳細配置說(shuō)明請閱讀配置手冊:
https://shardingsphere.apache.org/document/current/cn/user-manual/shardingsphere-jdbc/configuration/spring-boot-starter/sharding/
運行啟動(dòng)類(lèi):
ShardingSpringBootMybatisExample.java
此時(shí)即可通過(guò)日志中的「Logic SQL」和「Actual SQL」觀(guān)察每一條 SQL 語(yǔ)句的路由情況,理解分庫分表的運行機制。
examples/shardingsphere-jdbc-example/sharding-example/sharding-raw-jdbc-example
本示例展示如何使用 YAML 配置 ShardingSphere-JDBC 的讀寫(xiě)分離功能。此次演示的場(chǎng)景是一個(gè)寫(xiě)庫 + 兩個(gè)讀庫的分離配置。
配置 META-INF/readwrite-splitting.yaml
將
jdbc-url
修改為自己的數據庫地址,并配置正確的用戶(hù)名密碼等信息
將
props.sql-show
屬性設置為
true
詳細配置說(shuō)明請閱讀配置手冊:
打開(kāi)啟動(dòng)類(lèi):
ShardingRawYamlConfigurationExample.java
,將
shardingType
設置為
ShardingType.READWRITE_SPLITTING
,并啟動(dòng)運行。
此時(shí)即可通過(guò)日志中的「Logic SQL」和「Actual SQL」觀(guān)察每一條 SQL 語(yǔ)句的路由情況,理解讀寫(xiě)分離的運行機制。
注意:
如果主從數據庫無(wú)法正常同步,將會(huì )發(fā)生查詢(xún)異常。
examples/shardingsphere-jdbc-example/extension-example/custom-sharding-algortihm-example/class-based-sharding-algorithm-example
本示例展示如何使用
CLASS_BASED
方式進(jìn)行自定義算法擴展,讓 ShardingSphere-JDBC 在進(jìn)行分片路由時(shí),使用用戶(hù)提供的算法來(lái)計算分片結果。此次演示的場(chǎng)景是使用自定義分片算法進(jìn)行分庫。
準備一個(gè)自定義的分片算法,該算法應根據應用需要,實(shí)現
StandardShardingAlgorithm
、
ComplexKeysShardingAlgorithm
或
HintShardingAlgorithm
其中一個(gè)接口,如示例中提供的
ClassBasedStandardShardingAlgorithmFixture
配置 META-INF/sharding-databases.yaml
將
jdbc-url
修改為自己的數據庫地址,并配置正確的用戶(hù)名密碼等信息
將
props.sql-show
屬性設置為
true
注意
shardingAlgorithms
配置項,當
type
為
CLASS_BASED
時(shí),可以通過(guò)
props
指定自定義算法的類(lèi)別和全路徑,這樣就可以完成自定義算法的配置。
詳細配置說(shuō)明請閱讀配置手冊:
https://shardingsphere.apache.org/document/current/cn/user-manual/shardingsphere-jdbc/configuration/built-in-algorithm/sharding/
運行啟動(dòng)類(lèi):
YamlClassBasedShardingAlgorithmExample.java
此時(shí)即可通過(guò)日志觀(guān)察分庫運行情況,并可以通過(guò) DEBUG 等方式檢查自定義算法的輸入輸出是否符合預期。
結語(yǔ)
以上就是本次知識庫分享的全部?jì)热?。有關(guān) ShardingSphere-JDBC、ShardingSphere-Proxy 和 ShardingSphere-Parser 的示例將在未來(lái)繼續為大家分享。如果讀者有感興趣的場(chǎng)景需求,或是發(fā)現了新的問(wèn)題、新的提升點(diǎn),歡迎在 GitHub issue 列表提出建議,也可提交 Pull Request 參與到開(kāi)源社區,為世界級的項目貢獻力量。
往期精彩請點(diǎn)擊原文鏈接。
├── example-core
│ ├── config-utility
│ ├── example-api
│ ├── example-raw-jdbc
│ ├── example-spring-jpa
│ └── example-spring-mybatis
├── shardingsphere-jdbc-example
│ ├── sharding-example
│ │ ├── sharding-raw-jdbc-example
│ │ ├── shardi
ng-spring-boot-jpa-example
│ │ ├── sharding-spring-boot-mybatis-example
│ │ ├── sharding-spring-namespace-jpa-example
│ │ └── sharding-spring-namespace-mybatis-example
│ ├── governance-example
│ │ ├── governance-raw-jdbc-example
│ │ ├── governance-spring-boot-mybatis-example
│ │ └── governance-spr
ing-namespace-mybatis-example
│ ├── transaction-example
│ │ ├── transaction-2pc-xa-atomikos-raw-jdbc-example
│ │ ├── transaction-2pc-xa-bitronix-raw-jdbc-example
│ │ ├── transaction-2pc-xa-narayana-raw-jdbc-example
│ │ ├── transaction-2pc-xa-spring-boot-example
│ │ ├── transaction-2pc-xa-spring-namespace-example
│ │ ├── transaction-base-seata-raw-jdbc-example
│ │ └── transaction-base-seata-spring-boot-example
│ ├── other-feature-example
│ │ ├── encrypt-example
│ │ │ ├── encrypt-raw-jdbc-example
│ │ │ ├── encrypt-spring-boot-mybatis-example
│ │ │
└── encrypt-spring-namespace-mybatis-example
│ │ ├── hint-example
│ │ │ └── hint-raw-jdbc-example
│ │ └── shadow-example
│ │ │ ├── shadow-raw-jdbc-example
│ │ │ ├── shadow-spring-boot-mybatis-example
│ │ │ └── shadow-spring-namespace-mybatis-example
│ ├── extension-example
│ │ └── custom-sharding-algortihm-example
├── shardingsphere-parser-example
├── shardingsphere-proxy-example
│ ├── shardingsphere-proxy-boot-mybatis-example
│ └── shardingsphere-proxy-hint-example
└── src/resources
└── manual_schema.sql
2. shardingsphere-jdbc-example
(1)sharding-example
(2)governance-example
(3)transaction-example
(4)other-feature-example
① encrypt-example
② hint-example
③ shadow-example
(5)extension-example
① custom-sharding-algortihm-example
3. shardingsphere-parser-example
4. shardingsphere-proxy-example
(1)shardingsphere-proxy-boot-mybatis-example
(2)shardingsphere-proxy-hint-example
git
clone
## 編譯源代碼
cd shardingsphere
mvn clean install -Prelease
1. 模塊路徑
2. 場(chǎng)景目標
3. 運行準備
4. 啟動(dòng)運行
sharding-raw-jdbc-example「讀寫(xiě)分離場(chǎng)景」
1. 模塊路徑
2. 場(chǎng)景目標
3. 運行準備
4. 啟動(dòng)運行
custom-sharding-algortihm-example「自定義算法場(chǎng)景」
1. 模塊路徑:
2. 場(chǎng)景目標
3. 運行準備
4. 啟動(dòng)運行
歡迎掃碼關(guān)注我們
免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng )、來(lái)自本網(wǎng)站內容采集于網(wǎng)絡(luò )互聯(lián)網(wǎng)轉載等其它媒體和分享為主,內容觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如侵犯了原作者的版權,請告知一經(jīng)查實(shí),將立刻刪除涉嫌侵權內容,聯(lián)系我們QQ:712375056,同時(shí)歡迎投稿傳遞力量。
Copyright ? 2009-2022 56dr.com. All Rights Reserved. 特網(wǎng)科技 特網(wǎng)云 版權所有 特網(wǎng)科技 粵ICP備16109289號
域名注冊服務(wù)機構:阿里云計算有限公司(萬(wàn)網(wǎng)) 域名服務(wù)機構:煙臺帝思普網(wǎng)絡(luò )科技有限公司(DNSPod) CDN服務(wù):阿里云計算有限公司 百度云 中國互聯(lián)網(wǎng)舉報中心 增值電信業(yè)務(wù)經(jīng)營(yíng)許可證B2
建議您使用Chrome、Firefox、Edge、IE10及以上版本和360等主流瀏覽器瀏覽本網(wǎng)站