Apache ShardingSphere 5.0.0-beta 深度解析的第一篇文章和大家一起重溫了 ShardingSphere 的內核原理,並詳細闡述了此版本在內核層面,特別是 SQL 能力方面的優化和提升。強大穩定的內核是 ShardingSphere 持續發展的基礎,與此同時,ShardingSphere 在研發分布式數據庫生態特性上也在努力摸索。本次 5.0.0-beta 版本發布的 DistSQL,用於搭配整個 ShardingSphere 分布式數據庫體系,在提供更標准化的分布式數據庫管理方式的同時,兼具靈活、便捷和優雅的特性。
本文將帶領大家全面認識 DistSQL,並結合實戰案例展示如何使用 DistSQL 一鍵管理 ShardingSphere 分布式數據庫服務。
孟浩然
SphereEx 高級 Java 工程師
Apache ShardingSphere Committer
曾就職於京東科技,負責數據庫產品研發,熱愛開源,關注數據庫生態,目前專注於 ShardingSphere 數據庫中間件開發以及開源社區建設。
初識 DistSQL
相信大家對 SQL(Structured Query Language)都不陌生,SQL 是一種數據查詢和程序設計語言,同時作為關系數據庫管理系統的標准語言,用於存取數據以及查詢、更新和管理關系數據庫系統。
和標准 SQL 類似,DistSQL(Distributed SQL),即分布式 SQL,是 ShardingSphere 特有的一種內置 SQL 語言,能夠提供標准 SQL 之外的增量功能操作能力。借助於 ShardingSphere 強大的 SQL 解析引擎,DistSQL 提供了類似於標准 SQL 的語法結構和語法校驗體系,在保證規范化的同時,也讓 DistSQL 更加靈活。
ShardingSphere 提出的 Database Plus 理念,旨在打造兼具數據庫且貼合實際業務需求的開源分布式數據庫體系,而 DistSQL 正是在傳統數據庫上層構建,提供既貼合標准又擁有 ShardingSphere 功能特色的 SQL 能力,能更好的為傳統數據庫賦能。
DistSQL 設計初衷
ShardingSphere 快速發展的幾年來,隨着內核的逐步穩定,以及對核心功能的持續打磨,在數據庫中間件領域,已然獨樹一幟。作為國內開源的佼佼者, ShardingSphere 在分布式數據庫生態的探索中並沒有停止腳步,打破中間件和數據庫之間的界限,讓開發者像使用數據庫一樣使用 Apache ShardingSphere,是 DistSQL 的設計目標,也是 ShardingSphere 從面向開發人員的框架和中間件轉變為面向運維人員的基礎設施產品不可或缺的能力。
DistSQL 語法體系
DistSQL 在設計之初,就以面向標准為目標,充分考慮數據庫開發和運維人員的使用習慣,所以 DistSQL 的語法全面借鑒標准 SQL 語言,兼顧可讀性和易用性的同時,最大程度保留 ShardingSphere 自身的特性,並為使用者提供最寬泛的自定義邊界,以應對不同的業務場景。對於熟悉 SQL 和 ShardingSphere 的開發者,可以快速入手。
標准的 SQL 提供了如 DQL、DDL、DML、DCL 等不同類型的語法,用於定義不同功能的 SQL 語句,DistSQL 也定義了一套自己的語法體系。
在 ShardingSphere 中, DistSQL 的語法目前主要划分為 RDL、RQL 和 RAL 三種類型:
- RDL(Resource & Rule Definition Language):資源規則定義語言,用於資源和規則的創建、修改和刪除;
- RQL(Resource & Rule Query Language):資源規則查詢語言,用於資源和規則的查詢和展現;
- RAL(Resource & Rule Administrate Language):資源規則管理語言,用於 Hint、事務類型切換、分片執行計划查詢等增量功能操作。
DistSQL 的語法體系為 ShardingSphere 邁向分布式數據庫搭起了橋梁,目前還在持續完善中,隨着更多的想法被實現,DistSQL 勢必會越來越強大。也歡迎對此感興趣的開發者加入 ShardingSphere,為 DistSQL 提供想法,貢獻代碼。
了解更詳細的語法規則,可參考官方文檔:https://shardingsphere.apache.org/document/current/cn/features/dist-sql/syntax/
DistSQL 實戰
在了解了 DistSQL 的設計理念和語法體系后,接下來本文以數據分片為例,實戰演示如何通過 DistSQL 來搭建一套基於 ShardingSphere 的數據分片服務。
環境准備
-
啟動 MySQL 服務
-
創建用於分片的 MySQL 數據庫
-
啟動 Zookeeper 服務
-
打開分布式治理配置並啟動 ShardingSphere-Proxy (https://shardingsphere.apache.org/document/current/cn/quick-start/shardingsphere-proxy-quick-start/)
實戰演示
-
使用 MySQL 命令行連接到啟動的 ShardingSphere-Proxy
-
創建並查詢分布式數據庫 sharding_db
-
使用新創建的數據庫
-
執行 RDL 配置 2 個用於分片的數據源資源 ds_1 和 ds_2
-
執行 RQL 查詢新增加的數據源資源
-
執行 RDL 創建 t_order 表的分片規則
-
執行 RQL 查詢分片規則
RQL 除了支持查詢當前數據庫下的所有分片規則,也可以通過下面的語句查詢單個表的分片規則
SHOW SHARDING TABLE RULE t_order FROM sharding_db
-
創建並查詢 t_order 分片表
-
在 ShardingSphere-Proxy 端成功創建分片表 t_order 后,通過客戶端連接到底層數據庫 ds_1 和 ds_2,ShardingSphere 已經根據 t_order 表的分片規則自動創建了分片表
-
分片表創建完成后,繼續在 ShardingSphere-Proxy 端執行 SQL 語句插入數據
-
通過 RAL 查詢執行計划
至此,使用 DistSQL 搭建 ShardingSphere 數據分片服務已經完成,對比之前版本以配置文件驅動的 ShardingSphere 代理端相比,DistSQL 對開發者更友好,對資源和規則的管理更加靈活,以 SQL 驅動的方式,更是實現了 DistSQL 和標准 SQL 的無縫對接。
以上的示例中,僅演示了小部分 DistSQL 語法的使用,除了通過 CREATE 和 SHOW 語句創建和查詢資源、規則,DistSQL 同樣提供了 ALTRE DROP 等更多的操作,且同時支持對數據分片、讀寫分離、數據加密、數據庫發現核心功能的配置管控。
結語
作為 5.0.0-beta 版本發布的新特性之一,DistSQL 也將從此版本開始持續發力,構建更完善的語法體系,提供更強大的功能。
DistSQL 為 ShardingSphere 在分布式數據庫領域的探索提供了無限可能,在后續的規划中,DistSQL 將作為紐帶串聯起更多的功能,提供一鍵式操作。如一鍵分析數據庫整體狀態,和彈性遷移對接,提供一鍵數據擴容、縮容;和管控對接,實現一鍵切換主從、改變數據庫狀態等等。
最后,歡迎大家多多關注社區,了解 ShardingSphere 項目最新進展。
歡迎關注我們