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") 规范的一部分. 它们是带有名称的临时结果集, 存在于单个语句的作用域内, 可以在语句的其他部分进行引用. 还增加了一些窗口函数, 用于降低代码复杂度.
来源: http://database.51cto.com/art/201806/576258.htm