Oracle 已經發布了他們的開源關聯式資料庫管理系統 MySQL 8 。這個版本引入了許多改進,最受關注的可能是基於檔案的儲存,開發人員可以在同一個資料庫中使用傳統關係資料和 “NoSQL” 檔案資料。該版本還提升了效能,增強了安全性,並改變了預設字符集以促進 “移動優先” 開發。
MySQL 在 MySQL 5.7 中引入了對 JSON 的支援,現在在 8.0 裡帶來了 MySQL 檔案儲存,開發人員可以將無模式 JSON 檔案集合與關係表放在一起使用。 MySQL 檔案儲存由一系列技術組成,一個新的客戶端協議、 X 協議以及讓 MySQL 站群伺服器能夠使用 X 協議的 X 外掛外掛。新的 X DevAPI 是一組非同步 API,用於在 X 協議上執行 CRUD 和 SQL 操作。 MySQL 聯結器是一組驅動程式,開發人員可以基於驅動程式使用 Java 、 Python 、 Node 、.Net 和 C ++等主流開發語言來呼叫 API 和檔案儲存。檔案儲存中還有一個 MySQL Shell,提供了互動式的 Javascript 、 Python 或 SQL 介面來支援 MySQL 站群伺服器的開發和管理。
Geir Høydalsvik 自 2008 年以來一直在 MySQL 資料庫團隊中工作,他告訴 InfoQ:“檔案儲存和關聯式資料庫的結合是一個關鍵特性。使用者現在可以擁有一個堅實的資料庫系統,可以同時服務於 SQL 和 NoSQL” 。
MySQL 並不是開源領域中第一個支援關係資料和基於檔案資料的資料庫,比如 PostgreSQL 已經推出該特性一段時間了。
與之前的版本相比,MySQL 8.0 還帶來了顯著的效能改進。發行說明指出,MySQL 8.0 速度是 5.7 的兩倍。基準測試資料顯示,在以每秒查詢數量作為衡量手段的情況下,隨著使用者數量的增加,效能出現差異。基準測試資料還顯示,MySQL 8 實現了每秒高達 180 萬次查詢的新紀錄。資料字典後設資料的整合提高了可靠性,這些後設資料之前以多種檔案格式進行儲存,並儲存在多個位置,現在則儲存在一組 SQL 表中,並使用預設的 InnoDB 儲存引擎。
MySQL 8 帶來了多項安全性改進,其中之一引入了 SQL 角色。與大多數應用程式一樣,MySQL 8 中的角色代表一個指定的授權集合。現在可以在單個會話中建立、授予、刪除和應用 MySQL 角色。資料庫還提供了一個新的 SQL 函式 ROLES_GRAPHML(),它返回一個代表角色子圖的 graphml 檔案。另一個安全增強是對密碼重用的限制。 MySQL 已經支援密碼過期策略,該策略強制要求使用者在一段時間之後更改密碼,而新版本可以控制使用者設定的密碼是否有效。這限制了密碼重用,從而強制使用者在每次更改密碼時提供新的增強密碼。
預設字符集已從 latin-1 改為 utf8mb4 。在移動世界中,emojis 和各種各樣的字符集需要共存,Unicode/UTF-8 編碼已經變得無處不在,所以做出了這一變化。由於效能原因,以前的 utf8mb3 已被棄用。
移動應用的特徵之一是使用使用者的位置來提供內容,MySQL 8.0 基於現有的 GIS 支援,引入了地理和空間參考系統(SRS)。
8.0 版還帶來了一些 SQL 增強功能。其中之一是引入公共表表示式(CTE),這是 ANSI SQL 99(又名 “SQL 3”)規範的一部分。它們是帶有名稱的臨時結果集,存在於單個語句的作用域內,可以在語句的其他部分進行引用。還增加了一些視窗函式,用於降低程式碼複雜度。
釋出白皮書中可以找到有關 MySQL 8 的全部細節。
檢視英文原文:MySQL Version 8 Adds Document Store, Performance and Security Improvements