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