近日,企業級開源分布式數據庫廠商 PingCAP 正式發布 TiDB 7.4 (DMR)版本。 TiDB 7.4 將是 TiDB 7 系列最后一個 DMR 版本,針對 MySQL 8.0 做出了諸多優化。作為 MySQL 的全面升級,TiDB 的技術領先性幫助用戶應對不斷變化的業務數據挑戰,實現業務的持續增長和創新。TiDB 在高度兼容 MySQL 8.0 特性的同時,也將持續提供技術支持,確保用戶能夠平滑地遷移各類業務應用程序,從而減少遷移過程中的工作量和風險。
TiDB 作為新一代分布式關系型數據庫,從誕生第一天起擁抱 MySQL 生態,不斷兼容 MySQL 5.7 和 MySQL 8.0,為用戶帶來更加順暢的遷移和使用體驗。TiDB 兼容 MySQL 的語法命令,MySQL 客戶端、MySQL 驅動程序以及部分 MySQL 工具可以直接在 TiDB 上運行。對于絕大多數在 MySQL 上運行的應用程序來說,幾乎不需要修改任何代碼。
MySQL 8.0 做出了諸多功能特性的新增或優化,例如公共表表達式 (CTE) 、窗口函數和資源管控的支持,而且還通過多值索引和優化查詢執行提供更強的性能。隨著 MySQL 8.0 的發布,TiDB 在兼容 MySQL 5.7 的基礎之上,擴展了對 MySQL 8.0 的兼容。TiDB 7.4 現支持以下 MySQL 8.0 關鍵特性:
公共表表達式(CTE)
TiDB 從 5.1 版本開始支持 ANSI SQL 99 標準的 CTE 及其遞歸的寫法。在編寫復雜查詢的時候,利用公共表表達式 (CTE) 可以構建一個臨時的中間結果集,在 SQL 語句中引用多次,提高 SQL 語句編寫效率,可讀性,執行效率。在 TiDB 7.4 中,列式存儲引擎 TiFlash 也同樣支持 CTE。
窗口函數 (window function)
窗口函數能夠以 SQL 形式的寫法,來完成一些復雜的數據整理工作,協助用戶發掘數據價值。例如,數據分組排序, 變化趨勢分析等。TiDB 7.4 完整支持了 MySQL 8.0 提供的窗口函數,并且大部分都可以下推到 TiFlash 運行。
資源管控
在多個應用共享一個 TiDB 集群的場景下, 資源隔離可以有效降低應用負載變化對其他應用產生的影響, 資源管理還能解決批量作業及后臺任務對核心業務的影響,以及突發的 SQL 性能問題拖慢整個集群,是提升大集群穩定性的重要能力。隨著從 7.1 版本引入資源管控,TiDB 能夠對集群資源做合理分配,提升數據庫的穩定性,并降低數據庫的使用成本。TiDB 7.4 兼容了 MySQL 指定資源組的語法以及 hint,降低用戶學習成本和遷移成本。同時,TiDB 的資源隔離能夠更有效地對最重要的 I/O 資源進行管控,達到和 MySQL 同等甚至更好的效果。
基于角色的權限管理
TiDB 7.4 支持 MySQL 兼容的角色管理。基于角色的授權,可以簡化權限管理的工作,并降低了出錯的風險。通過將權限與角色相關聯,可以更好地控制數據庫的訪問。用戶可以將不同場景的工作進行分類,創建對應角色,并把角色授予有權限的數據庫用戶, 數據庫用戶在實際操作時,根據場景不同,切換角色,降低誤操作的可能。
增強 uft8mb4 字符集
MySQL 8.0 的另一個重要變化是默認字符集變成了更通用的 uft8mb4 ,默認排序方式變為 utf8mb4_0900_ai_ci 。TiDB 7.4 也加入了 utf8mb4_0900_ai_ci 的排序方式,以便更輕松地進行系統遷移。為了同時兼容 MySQL 5.7 和 MySQL 8.0,TiDB 支持了 MySQL 兼容的變量 default_collation_for_utf8mb4 。允許用戶調整 utf8mb4 字符集的默認排序方式。該方式確保了 TiDB 在不同 MySQL 版本之間的平滑過渡,并能夠適應不同應用程序的需求。
JSON 多值索引 (Multi-valued Index)
多值索引是對普通索引結構的延伸。不同于普通索引與表 1:1 的對應關系, 多值索引與表的對應是 N:1。與 MySQL 相同, 條件中利用 MEMBER OF() , JSON_CONTAINS() , JSON_OVERLAPS() 這幾個函數檢索時,都可能會選擇到多值索引。TiDB 7.4 支持了"多值索引",允許對 JSON 類型中的某個"數組"進行索引,從而提高了對 JSON 數據的檢索效率。與 MySQL 用法完全相同意味著在遷移過程中,無需修改數據建模或應用程序,用戶可以繼續按照熟悉的方式操作 JSON 數據。
修改會話變量的 hint ( SET_VAR())
MySQL 8.0 引入了一個特殊的 hint SET_VAR() 。利用這個 hint,可以在語句運行期間修改某個會話級系統變量。TiDB 7.4 支持此 hint,提升了系統變量設置的靈活度, 能夠針對 SQL 語句做“定制”。
CHECK 約束
CHECK 約束是一致性約束檢查的一種,用來維護數據的準確性。 CHECK 約束 可以用于限制表中某個字段的值必須滿足指定條件。當為表添加 CHECK 約束后,在插入或者更新數據時,TiDB 會檢查約束條件是否滿足,如果不滿足,則會報錯。
MySQL 在 8.0 之前只支持 CHECK 約束的語法,在實際運行中并不會真正去檢查, 在 8.0 之后才全面支持。TiDB 7.4 中添加了該功能, 用戶可以通過變量 tidb_enable_check_constraint 手工開啟。
為了降低用戶數據遷移的復雜度,TiDB 推出了一款工具 TiDB Data Migration (DM) 。它能夠協助用戶從與 MySQL 協議兼容的數據庫(MySQL、MariaDB、Aurora MySQL)到 TiDB 的全量數據遷移和增量數據同步。DM 支持 DDL 同步,分庫分表合并,并內置多種過濾器以靈活適應不同場景,切實地提升了數據遷移的效率。