MariaDB 10.0 Beta 发布 – 一个重要里程碑

一整年以来,围绕 MariaDB 10.0 已经有很多讨论。它何时发布、将包含哪些内容、未来 MariaDB 的重点是什么等等?我的感觉是,在过去几个月里,人们开始理解 MariaDB 10.0 的价值。有一群优秀的人和公司一直在试用和使用 MariaDB 10.0 的 Alpha 版本,并向我们提供了宝贵的反馈意见。

MariaDB 10.0 是一个包含大量新功能的重要版本,这些功能缓解了 MariaDB 和 MySQL 用户多年来遇到的几个痛点。

MariaDB 10.0 的亮点可分为以下几个方面

  • 复制增强功能
  • 存储引擎
  • 优化器增强功能
  • 管理改进
  • 其他重要新功能
  • 合并自 MySQL 5.6 的功能

我将简要介绍这些领域的每个方面,以便概览它们包含的内容。

复制

全局事务 ID – 在复制方面,MariaDB 10.0 引入了一个新的构建块,全局事务 ID (GTID)。该实现的方案与 MySQL 5.6 中的对应功能不同,其主要目标是 1) 使使用 GTID 设置复制和轻松部署新的从库变得简单,以及 2) 支持其他复制功能,例如多源复制(见下文)。引入 GTID 还使从库具备了崩溃安全能力,这是以前没有的。

多源复制 – 借助 Lixun Peng 和淘宝贡献的多源复制功能,您可以将数据从多个主库复制到一个从库。当您分片了数据并希望在单个服务器上拥有数据的完整副本时,这非常有用。正是由于这个原因,如今已成为 Yahoo! 一部分的微博客网站 Tumblr 已经在使用了这项功能。请查看这个故事

并行从库由 Google 赞助) – 最后,MariaDB 10.0 解决了一个长期存在的复制难题,即使在 MySQL 5.6 中也存在。直到现在,当主库发生足够的写操作(INSERT/UPDATE)时,从库将无法跟上相同的速度并会落后。借助 10.0 中的并行从库功能,这个难题现在已经解决。从库将适应主库的速度并并行应用 binlog 事件。如果在主库上并行执行事务,则事务将在从库上并行应用。与 MySQL 5.6 不同,事务可以涉及同一数据库甚至同一表。

存储引擎

许多存储引擎开发者最近一直积极与 MariaDB 的开发者互动,因此 MariaDB 10.0 中增加了几个新的存储引擎(按字母顺序排列)

  • Cassandra 存储引擎:将 Cassandra 中的数据与 MariaDB 中的数据结合,读写 Cassandra 数据,并将多个 MariaDB 服务器连接到一个 Cassandra 环,从而创建一个高可用性集群。
  • Connect 存储引擎:使用 Connect 处理文件或 ODBC 后面的数据,就好像这些数据是 MariaDB 中存储的数据的一部分一样。由 Olivier Bertrand 开发和贡献。
  • Sequence 存储引擎:创建存储在内存中并可在查询中使用的数值序列。有关一些用例示例,请查看本文
  • Spider 存储引擎:一个内置分片功能的存储引擎。由 Kentoku Shiba 开发和贡献。
  • TokuDB:一款专为高性能写入密集型工作负载设计的存储引擎。由 Tokutek 开发和贡献。

优化器

独立于存储引擎的持久化统计信息 – 统计信息现在独立于存储引擎提供。以前,统计信息由存储引擎自身提供,质量通常很差。存储引擎接口也对它们施加了很多限制。查询优化器使用统计信息来为每个 SQL 语句选择最佳执行计划。更好的统计信息会带来更好的执行计划,用户通常会体验到更快的查询结果。

直方图 – 为了改进查询优化,MariaDB 10.0 引入了直方图。可以为索引列和非索引列收集直方图。直方图数据使查询优化器能够为复杂的多表查询做出更好的查询计划选择。

针对 EXISTS 子查询的优化 – 优化器在可能的情况下会将 EXISTS 子查询转换为 IN。这种转换允许对某些类型的 EXISTS 子查询使用半连接优化物化优化

管理改进

10.0 包含了一系列让 DBA 工作更轻松的功能

  • 角色 – 这是个大变化!期待已久的角色功能在 MariaDB 中引入了。DBA 现在可以创建具有特定权限的角色并将用户分配给这些角色。感谢 Google Summer of Code 和开发者 Vicențiu Ciorbaru!
  • SHOW EXPLAIN – 获取正在运行语句的查询计划。
  • 慢查询日志中的 EXPLAIN – 将 EXPLAIN 输出写入慢查询日志。
  • EXPLAIN INSERT/UPDATE/DELETE – INSERT/UPDATE/DELETE 的 EXPLAIN 功能已添加,方式与 MySQL 5.6 相同,但实现不同。
  • SHOW PLUGIN SONAME – 列出所有插件,无论它们是否已安装。
  • SHUTDOWN – 最终可以使用 SQL 命令关闭服务器
  • KILL QUERY ID – 根据查询 ID 杀死特定查询,而非线程 ID(解决了棘手的竞态条件)。
  • 按连接查看内存使用情况 – 列出每个连接及其使用的内存量

其他重要新功能

还有一系列不属于上述类别的新有趣功能

新的 REGEXP – 切换到现代正则表达式库 PCRE,结合新的 SQL
函数 REGEXP_REPLACE、REGEXP_SUBSTR、REGEXP_INSTR 大幅提升了 MariaDB 的文本处理能力。由 Sudheera Palihakkara 在 Google Summer of Code 期间开发。

DELETE … RETURNING – 许多用户要求 DELETE 语句能够在结果集中返回已删除的行。现在只需在语句末尾添加 RETURNING 即可实现。

ALTER … IF [NOT] EXISTS – 在您的 ALTER 语句中,您现在可以添加 IF 或 IF NOT 关键字,例如,如果列或索引之前已存在或不存在,则添加列或创建索引。

命名动态列 – 在早期版本的 MariaDB 动态列中,每行可以有不同数量的列,但只能通过数字引用列。现在可以通过名称引用列了。

多个 GET_LOCK() – 现在支持使用多个用户级锁。由 Konstantin Osipov 开发和贡献。

合并自 MySQL 5.6

MySQL 5.6 的部分功能已合并到 MariaDB 10.0 中。主要包括:

  • InnoDB – 大部分 InnoDB 增强功能现在已包含在 MariaDB 10.0 中。
  • Performance Schema – 完整的全新性能模式,包含所有新的事件过滤、检测和其他优秀功能。
  • 在线 ALTER – 在不中断系统的情况下进行许多模式更改
  • 使用 ORDER BY … LIMIT 优化的查询的文件排序优化 – 一种有用的优化,用于显示较大结果集中的少量行。
  • CREATE TEMPORARY TABLES 的权限
  • 字符集扩展
  • GET DIAGNOSTICS
  • TO_BASE64(), FROM_BASE64

显然,MariaDB 10.0 中还有许多较小的增强功能和从 5.6 合并的其他内容,但上述新功能和合并的概述包含了最重要的部分。

正如您所见,社区在为 10.0 做贡献方面非常活跃,能够将所有这些新功能整合到 MariaDB 中并默认提供给所有 MariaDB 10.0 用户,这真是太棒了。非常感谢所有贡献者!

快去试试吧,下载 MariaDB 10.0.5 Beta

下载 MariaDB 10.0.5

发行说明 变更日志 什么是 MariaDB 10.0?

如果您对 MariaDB 10.0 及其功能或 MariaDB 感兴趣,并且有一个很棒的 MariaDB 故事想要分享,关于 MariaDB 的一些有趣用法或您喜欢某个特定功能,请告诉我们。

PS. 如果您参加伦敦的 Percona Live 会议,请务必在 11 月 11 日周一与我们一起喝一杯或两杯,庆祝 MariaDB 10.0 Beta 的发布。更多信息在此