ShardingSphere 知識庫更新 | 官方樣例集助你快速上手
Apache ShardingSphere 作為 Apache 頂級專案,是資料庫領域最受歡迎的開源專案之一。經過 5 年多的發展,ShardingSphere 已獲得超 14K Stars 的關注,270+ 貢獻者,建立起了活躍的社群生態。
隨著專案的蓬勃發展,版本的不斷更迭,Apache ShardingSphere 支援的特性逐漸增多,功能日益強大,配置規則也在不斷最佳化。為了幫助使用者更好地理解各項特性和配置規則,方便使用者快速測試並執行相關功能元件,找到最佳實現,shardingsphere-example 專案應運而生。
shardingsphere-example 是一個獨立的 Maven 專案,位於 Apache ShardingSphere 專案的 examples 目錄下。 專案地址:
江龍滔
SphereEx 中介軟體研發工程師,Apache ShardingSphere contributor。目前專注於 ShardingSphere 資料庫中介軟體研發及開源社群建設。
侯陽
SphereEx 中介軟體研發工程師,目前從事 ShardingSphere 資料庫中介軟體研發,熱愛開源,希望同大家一起建設更好的社群。
模組詳解
shardingsphere-example 專案包含多個模組,將為使用者帶來水平拆分、讀寫分離、分散式治理、分散式事務、資料加密、強制路由、影子庫等功能的使用及配置樣例,覆蓋 Java API、YAML、Spring Boot、Spring Namespace 等多種業務常用的接入形態。除了 ShardingSphere-JDBC,shardingsphere-example 中還增加了 ShardingSphere-Proxy 和 ShardingSphere-Parser 的使用案例。
所有涉及到 Apache ShardingSphere 的功能特性、接入場景以及各種靈活的配置方式,都可以在官方的 repo 裡找到樣例,方便使用者查詢和參考。下表展示了 shardingsphere-example 的模組分佈情況:
shardingsphere-example
├── 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
1. example-core
example 核心模組,包含實體、介面定義和其他公用程式碼。
2. shardingsphere-jdbc-example
ShardingSphere-JDBC 示例模組,展示 ShardingSphere-JDBC 的功能特性和各種使用方式。
(1)sharding-example
展示如何使用 ShardingSphere-JDBC 進行資料分片,包含分庫、分表、分庫+分表、讀寫分離、讀寫分離+分庫分表的應用場景。在 ORM 整合方面,本模組也貼心的為使用者提供了 MyBatis 和 JPA 的整合樣例。
(2)governance-example
展示 ShardingSphere-JDBC 在分散式治理方面的應用,包含了分庫分表、讀寫分離、資料加密、影子庫等特性與分散式治理相結合的應用場景。
注意: 分散式治理 example 依賴 Apache ZooKeeper,請自行部署。
(3)transaction-example
展示 ShardingSphere-JDBC 支援的多種分散式事務管理方式,使用者可以根據應用場景選擇適合的分散式事務管理器進行使用。鑑於分散式事務的特殊性,本模組的示例都是基於分庫、分表或分庫+分表的場景設計的。
注意: Seata 事務管理器需要自行部署。
(4)other-feature-example
ShardingSphere-JDBC 其他功能特性的示例,目前包含了 encrypt(資料加密)、hint(強制路由)、shadow(影子庫)幾種型別。
① encrypt-example
資料加密功能示例,同樣包含了 Java API、YAML、Spring Boot、Spring Namespace 等幾種接入方式的樣例。
② hint-example
強制路由功能示例,目前只提供了 YAML 配置方式的案例,更多場景歡迎補充。
③ shadow-example
影子庫功能示例,包含了影子庫特性與資料加密、分庫分表、讀寫分離等特性結合的應用樣例。
(5)extension-example
本模組展示 ShardingSphere-JDBC 的自定義擴充套件能力,使用者可以透過 SPI 或 ShardingSphere 提供的其他方式進行功能擴充套件。
① custom-sharding-algortihm-example
展示瞭如何透過 'CLASS_BASED' 方式進行自定義分片演算法的擴充套件。
3. shardingsphere-parser-example
SQLParserEngine 是 Apache ShardingSphere 定製的 SQL 解析引擎,也是 ShardingSphere-JDBC 和 ShardingSphere-Proxy 的能力基礎。使用者輸入的 SQL 文字 透過 SQLParserEngine 解析成可以識別的語法物件,之後才能進行路由、改寫等增強操作。
從 5.0.0-alpha 版本開始,Apache ShardingSphere 將 SQL 解析這一核心能力開放給使用者,使用者可以透過 API 呼叫 SQLParserEngine,在自己的應用系統中進行高效的 SQL 解析,滿足更多個性化的業務需要。
本模組展示了 SQLParserEngine API 的使用方式,覆蓋了 MySQL、PostgreSQL、Oracle、SQLServer 以及 SQL92 等各種語法形式。
4. shardingsphere-proxy-example
ShardingSphere-Proxy 示例模組,包含了分庫分表、讀寫分離和強制路由等常用場景的配置樣例。由於 ShardingSphere-Proxy 與 ShardingSphere-JDBC 在功能特性的支援度上大體相同,未列舉的示例也可以對照 shardingsphere-jdbc-example 進行參考。
(1)shardingsphere-proxy-boot-mybatis-example
展示了透過 Proxy 配置資料分片,並使用 SpringBoot + MyBatis 的方式進行資料訪問的場景示例。
(2)shardingsphere-proxy-hint-example
展示了透過 Proxy 配置強制路由,並使用 Java 客戶端進行資料訪問的場景示例。
近期最佳化
在 Apache ShardingSphere 5.0.0-beta 版本釋出之際,社群貢獻者對 shardingsphere-example 也進行了升級和最佳化,主要包括:
-
JDK 版本升級
-
元件版本升級
-
類命名最佳化
-
配置檔案最佳化
-
SQL 指令碼最佳化
以下是升級相關的詳細內容:
JDK 版本升級
在以 Java 作為主要語言的專業開發者中,Java 8 LTS(長期支援版本)仍然是最受歡迎的版本。
來源《JetBrains 公司 2020 關於 Java 的報告》:https://blog.jetbrains.com/zh-hans/idea/2020/10/java-2020/
shardingsphere-example 升級以後要求 Java 8 作為最低版本。如果您當前使用的是 Java 7 或更早版本,則需要先升級 JDK。
Spring 依賴升級
shardingsphere-example 對 Spring 相關元件進行升級。
-
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 進行了升級。
-
mybatis version 由 3.4.2 升級到 3.5.1
-
hibernate version 由 4.3.11.Final 升級到 5.2.18.Final
資料庫連線池升級
shardingsphere-example 對資料庫連線池 HikariCP 進行了升級。
-
HikariCP artifactId 由 HikariCP-java7 升級到 HikariCP
-
HikariCP version 由 2.4.11 升級到 3.4.2
資料庫驅動升級
shardingsphere-example 對 MySQL 和 PostgreSQL 連線驅動進行了升級。
-
mysql-connector-java version 由 5.1.42 升級到 5.1.47
-
postgresql version 由 42.2.5.jre7 升級到 42.2.5
Example 執行示例
從這裡開始,我們將透過幾個典型場景來說明如何配置和執行 example。
由於 shardingsphere-example 專案模組眾多,本次挑選幾個關注度較高的 ShardingSphere-JDBC 應用場景來舉例說明。
前置準備
1. shardingsphere-example 使用 Maven 作為構建工具,請提前準備 Maven 環境;
2. 準備 Apache ShardingSphere,如果你的裝置中尚未安裝 Apache ShardingSphere,可以按照如下方式進行下載和編譯:
## 克隆 Apache ShardingSphere 專案
git clone
## 編譯原始碼
cd shardingsphere
mvn clean install -Prelease
3. 將 shardingsphere-example 專案匯入自己的 IDE 中;
4. 準備一個可管理的資料庫環境,例如本地的 MySQL 例項;
5. 如需執行讀寫分離測試,請確保資料庫的主從同步機制工作正常;
6. 執行資料庫初始化指令碼:examples/src/resources/manual_schema.sql
場景示例
-
sharding-spring-boot-mybatis-example「分庫分表場景」
1. 模組路徑
examples/shardingsphere-jdbc-example/sharding-example/sharding-spring-boot-mybatis-example
2. 場景目標
本示例展示 ShardingSphere-JDBC 結合 SpringBoot 和 MyBatis 進行分庫分表的應用場景。此次分片的目標是 2 庫 4 表,即將一張邏輯表拆分為 4 個分片,均勻儲存在 2 個不同的資料庫中。
3. 執行準備
-
配置 application.properties
-
將 spring.profiles.active 設定為 sharding-databases-tables
-
配置 application-sharding-databases-tables.properties
-
將 jdbc-url 修改為自己的資料庫地址,並配置正確的使用者名稱密碼等資訊
-
將 spring.shardingsphere.props.sql-show 屬性設定為 true
詳細配置說明請閱讀配置手冊:
https://shardingsphere.apache.org/document/current/cn/user-manual/shardingsphere-jdbc/configuration/spring-boot-starter/sharding/
4. 啟動執行
執行啟動類: ShardingSpringBootMybatisExample.java
此時即可透過日誌中的「Logic SQL」和「Actual SQL」觀察每一條 SQL 語句的路由情況,理解分庫分表的執行機制。
-
sharding-raw-jdbc-example「讀寫分離場景」
1. 模組路徑
examples/shardingsphere-jdbc-example/sharding-example/sharding-raw-jdbc-example
2. 場景目標
本示例展示如何使用 YAML 配置 ShardingSphere-JDBC 的讀寫分離功能。此次演示的場景是一個寫庫 + 兩個讀庫的分離配置。
3. 執行準備
-
配置 META-INF/readwrite-splitting.yaml
-
將 jdbc-url 修改為自己的資料庫地址,並配置正確的使用者名稱密碼等資訊
-
將 props.sql-show 屬性設定為 true
詳細配置說明請閱讀配置手冊:
4. 啟動執行
開啟啟動類: ShardingRawYamlConfigurationExample.java ,將 shardingType 設定為 ShardingType.READWRITE_SPLITTING ,並啟動執行。
此時即可透過日誌中的「Logic SQL」和「Actual SQL」觀察每一條 SQL 語句的路由情況,理解讀寫分離的執行機制。
注意: 如果主從資料庫無法正常同步,將會發生查詢異常。
-
custom-sharding-algortihm-example「自定義演算法場景」
1. 模組路徑:
examples/shardingsphere-jdbc-example/extension-example/custom-sharding-algortihm-example/class-based-sharding-algorithm-example
2. 場景目標
本示例展示如何使用 CLASS_BASED 方式進行自定義演算法擴充套件,讓 ShardingSphere-JDBC 在進行分片路由時,使用使用者提供的演算法來計算分片結果。此次演示的場景是使用自定義分片演算法進行分庫。
3. 執行準備
-
準備一個自定義的分片演算法,該演算法應根據應用需要,實現
StandardShardingAlgorithm 、 ComplexKeysShardingAlgorithm 或 HintShardingAlgorithm 其中一個介面,如示例中提供的 ClassBasedStandardShardingAlgorithmFixture
-
配置 META-INF/sharding-databases.yaml
-
將 jdbc-url 修改為自己的資料庫地址,並配置正確的使用者名稱密碼等資訊
-
將 props.sql-show 屬性設定為 true
-
注意 shardingAlgorithms 配置項,當 type 為 CLASS_BASED 時,可以透過 props 指定自定義演算法的類別和全路徑,這樣就可以完成自定義演算法的配置。
詳細配置說明請閱讀配置手冊:
https://shardingsphere.apache.org/document/current/cn/user-manual/shardingsphere-jdbc/configuration/built-in-algorithm/sharding/
4. 啟動執行
執行啟動類:
YamlClassBasedShardingAlgorithmExample.java
此時即可透過日誌觀察分庫執行情況,並可以透過 DEBUG 等方式檢查自定義演算法的輸入輸出是否符合預期。
結語
以上就是本次知識庫分享的全部內容。有關 ShardingSphere-JDBC、ShardingSphere-Proxy 和 ShardingSphere-Parser 的示例將在未來繼續為大家分享。如果讀者有感興趣的場景需求,或是發現了新的問題、新的提升點,歡迎在 GitHub issue 列表提出建議,也可提交 Pull Request 參與到開源社群,為世界級的專案貢獻力量。
往期精彩請點選原文連結。
歡迎掃碼關注我們
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70001955/viewspace-2788039/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 【YashanDB知識庫】YashanDB-OCI-快速上手
- 小工具:助你上手分散式資料庫分散式資料庫
- samrty學習快速上手教程+例項
- 快速構建文件知識庫站點
- 基於 Vuepress 搭建個人部落格,文章詳細,助你快速上手Vue
- 知識集錦
- DistSQL:像資料庫一樣使用 Apache ShardingSphereSQL資料庫Apache
- Opencv官方樣例圖片下載OpenCV
- Vue入門指南-03 vue官方提供的指令 (快速上手vue)Vue
- 前端知識集錦前端
- 雲原生 PostgreSQL 叢集 - PGO:5分鐘快速上手SQLGo
- 一篇好文,助你上手 GlideIDE
- Redis 快速上手Redis
- 快速上手BootstrapVuebootVue
- ElasticJob 快速上手AST
- Flask快速上手Flask
- JDBC快速上手JDBC
- docker 快速上手Docker
- 【TcaplusDB知識庫】條件過濾說明與更新
- vue知識點集錦Vue
- iOS知識 – 收藏集 – 掘金iOS
- Vue入門指南-01建立vue例項 (快速上手vue)Vue
- 用例基礎知識
- 知識雜庫
- PgSql 知識庫SQL
- 前端知識點(持續更新)前端
- 知識更新太快,趕緊學
- Canvas快速入門知識點Canvas
- Flask之旅: 快速上手Flask
- Vue框架快速上手Vue框架
- 快速上手之dockerDocker
- Android 知識點 集錦Android
- Flutter 面試知識點集錦Flutter面試
- MySQL 叢集知識點整理MySql
- 前端知識大全 - 收藏集 - 掘金前端
- 怎樣建立知識體系
- ShardingSphere 雲上實踐:開箱即用的 ShardingSphere-Proxy 叢集
- 知網知識庫呼叫