DistSQL:像資料庫一樣使用 Apache ShardingSphere

SphereEx發表於2021-07-20

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 查詢新增加的資料來源資源

  • 執行 RD L 建立  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 專案最新進展。

歡迎關注我們


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70001955/viewspace-2782254/,如需轉載,請註明出處,否則將追究法律責任。

相關文章