Oracle发布了他们的开源关系数据库管理系统MySQL8。此版本引入了多项改进,其中最引人注目的可能是基于文档的存储,它允许开发人员在同一数据库中处理传统关系数据和“NoSQL”文档数据。该版本还改进了性能、增强了安全性并更改了默认字符集以促进“移动优先”开发。MySQL在MySQL5.7中引入了对JSON的支持,现在在8.0中引入了MySQL文档存储,开发人员可以将无模式的JSON文档集合与关系表一起使用。MySQL文档存储由一组技术组成,一个新的客户端协议,X协议,以及使MySQL服务器能够使用X协议的X插件。新的XDevAPI是一组异步API,用于在X协议上执行CRUD和SQL操作。MySQLconnector是一套驱动,开发者可以基于它使用Java、Python、Node、.Net、C++等主流开发语言调用API和文档存储。文档存储中还有一个MySQLShell,它提供了一个交互式的Javascript、Python或SQL接口来支持MySQL服务器的开发和管理。自2008年以来一直在MySQL数据库团队工作的GeirH?ydalsvik告诉InfoQ:“文档存储和关系数据库的结合是一个关键特性。用户现在可以拥有一个可以同时服务于SQL和NoSQL的可靠数据库系统”。MySQL并不是开源空间中第一个支持关系数据和基于文档的数据的数据库,例如PostgreSQL已经引入此功能已有一段时间了。MySQL8.0还带来了比以前版本显着的性能改进。发行说明指出MySQL8.0的速度是5.7的两倍。基准数据显示随着用户数量的增加性能差异,以每秒查询数衡量。基准数据还显示,MySQL8创下了每秒高达180万次查询的新记录。可靠性的提高是数据字典元数据的合并,以前以多种文件格式存储在多个位置,现在存储在一组SQL表中,并使用默认的InnoDB存储引擎。MySQL8带来了多项安全改进,其中之一是引入了SQL角色。与大多数应用程序一样,MySQL8中的角色代表一组命名的授权。现在可以在单个会话中创建、授予、删除和应用MySQL角色。该数据库还提供了一个新的SQL函数ROLES_GRAPHML(),它返回一个表示角色子图的graphml文档。另一个安全增强是对密码重用的限制。MySQL已经支持密码过期策略,强制用户在一段时间后更改密码,新版本可以控制用户设置的密码是否有效。这限制了密码的重复使用,迫使用户在每次更改密码时都提供一个新的、增强的密码。默认字符集已从latin-1更改为utf8mb4。在移动世界中,表情符号和各种字符集需要共存,Unicode/UTF-8编码已经无处不在,因此进行了此更改。出于性能原因,以前的utf8mb3已被弃用。移动应用程序的特征之一是使用用户的位置来提供内容。MySQL8.0建立在现有GIS支持的基础上,并引入了地理和空间参考系统(SRS)。8.0版还带来了一些SQL增强功能。其中之一是公用表表达式(CTE)的引入,它是ANSISQL99(又名“SQL3”)规范的一部分。它们被命名为临时结果集,存在于单个语句的范围内,可以在语句的其他部分引用。还添加了一些窗口函数以降低代码复杂性。
