MariaDB 10.0 说明
五月末,我在博文《MariaDB 当前版本与 MySQL 5.6 之间会有什么变化?》中谈到了 MariaDB 下一个版本的版本号规划。关于将下一个版本命名为 MariaDB 10.0 的想法,我们收到了不少反馈和批评。本文将进一步说明为何将下一个版本命名为 10.0 是合理的。
对于你们大多数人来说,这已经不是新闻了。MariaDB 不仅仅是在 MySQL 之上打的一系列补丁。MariaDB 包含一些与 MySQL 中对应功能相似的特性,但在实现上有所不同,例如线程池、微秒支持以及RBR binlog 中的查询注释。MariaDB 还包含许多 MySQL 中没有的功能。有关功能的完整差异列表,请查看此链接:http://kb.askmonty.org/en/mariadb-versus-mysql-features/。
将下一个 MariaDB 版本称为 MariaDB 5.6 将会产生误导。
最终,将会有一个 MariaDB 版本包含所有 MySQL 5.6 的功能,无论是移植过来的还是以不同方式实现的。但在那之前,至少会有几个版本包含一些从 MySQL 5.6 移植过来的功能以及一些 MySQL 5.6 中完全没有的新功能。
我们收到的一个担忧是,用于验证所连接服务器版本的工具和其他客户端如果不修改,可能会与 MariaDB 不兼容。感谢来自 Webyog 的 Peter Laursen 在这方面提供的意见!问题在于,工具和其他客户端依赖于 “SELECT VERSION();” 的返回值。工具会根据返回的版本号启用或禁用某些功能。事实是,没有任何版本号命名方案能完全解决这个问题。即使我们将下一个版本称为 5.6.1,它也不会包含 MySQL 5.6.1 的所有功能,而只包含其中一部分。它还会包含一些后续 MySQL 版本的功能,以及 MySQL 中根本没有的功能。换句话说,没有哪个单一的 MySQL 版本号能够充分描述 MariaDB 的功能集。因此,我们认为使用一个完全不同的、独特的版本系列号会减少混淆和歧义。
我们建议 “SELECT VERSION();” 返回正确的版本号,例如 10.0.1-MariaDB。
除了上述原因,当前的 MariaDB 版本与 MySQL 相比,已经为工具引入了额外的功能——例如更多的统计信息和额外的开关。这些新增功能对于工具充分利用非常有益。我们强烈建议工具供应商现在就开始在这方面区分 MySQL 和 MariaDB,并且这样做在未来只会变得更加重要。我们还在考虑引入一种方法,让 DBA(数据库管理员)能够影响 VERSION() 字符串的显示内容。
有一个似乎排除了所有更花哨版本号命名方案(例如 5.5-10.0)的领域是发行版软件包,它们通常只支持 major.minor[.build[.revision]] 这种标准的版本号命名方式。即使某个特定的包格式支持更复杂的版本号方案,如果引入的新版本号不仅仅是递增的数字,升级的判断也会变得困难。
希望本文能够解释选择 10 作为下一个 MariaDB 版本号背后的逻辑。但是,我们仍然非常欢迎您对此提出反馈意见。
我不认为您的论点真正有道理——因为只要 MariaDB 是功能的超集,对于工具来说,重要的是获得一个基线(也就是 MariaDB 基于的 MySQL 版本)。如果不是通过 SELECT VERSION(),是否会有一个简单的方法来识别我的 MariaDB 服务器基于哪个 MySQL 版本?
MariaDB 不仅仅是功能的超集。从帖子中:'即使我们将下一个版本称为 5.6.1,它也不会包含 MySQL 5.6.1 的所有功能,而只包含其中一部分。它还会包含一些后续 MySQL 版本的功能,以及 MySQL 中根本没有的功能。换句话说,没有哪个单一的 MySQL 版本号能够充分描述 MariaDB 的功能集。因此,我们认为使用一个完全不同的、独特的版本系列号会减少混淆和歧义。'
只有当你将一个并非基于 MySQL 5.6.1 的版本称为 MariaDB 5.6.1 时,这才会没有意义。
也许对其他人来说情况不同,但对我来说,大多数官方的 MySQL 5.6 功能比 MariaDB 的改动更有价值。如果我不能确信我拥有的就是 MySQL 加上 MariaDB 添加的一些东西——但你们可能会去掉一些东西……那么你们就为我的采用制造了障碍。
这一切都取决于基线。
没错。我们正在将官方的 MySQL 5.6 功能添加到 MariaDB 中。但我们添加它们的顺序与它们添加到 MySQL 的顺序不同。这就是为什么接下来的 MariaDB 版本将包含 MySQL 5.6 的功能。但严格来说,MariaDB 在添加 *所有* MySQL 5.6.1 的功能之前,只算是 MySQL 5.5 的超集。而移植了 5.6.4 和 5.6.5 的功能之后,继续将版本称为 MariaDB-5.5 会产生混淆。
这就是使用一个完全不同的版本号的原因。
这会破坏允许依赖于版本的解析的 /*!56 */ 注释语法。也就是说,只有当版本号 *大于* 给定版本时,注释中的语法才会执行。
但这有一个解决方案:只需将 MariaDB 版本号设为负数,并在负方向上递增即可!😉
是的。但是,没有任何版本号方案能让 /*!50601 */ 注释生效,因为 MariaDB 既包含一些来自新 MySQL 版本的最新功能,又缺少在这些新功能之前按时间顺序添加到 MySQL 的旧功能。
而这正是 MariaDB 扩展此注释语法以支持 /*M!50301 */ 的原因——这在一年前就已经实现了。
MariaDB 扩展注释语法的详细信息在此:http://kb.askmonty.org/en/comment-syntax/
在可预见的未来,MariaDB 将作为 MySQL 的一个替代方案,而不是一个首选的替代品。我知道这令人不快,但看看 Internet Explorer 如何向网络浏览器报告自己就知道了
“Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.0.3705; .NET CLR 1.1.4322; .NET CLR 2.0.40607)”
或
“Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; WOW64; Trident/6.0)”
尽管网景浏览器在十多年前就已经不再是领先的浏览器了。
我建议你们为支持 MariaDB 的工具创建一个新的函数 MARIADB_VERSION(),并在 VERSION() 中继续显示你们完全支持的 MySQL 基线版本,例如 ‘5.5.25-MariaDB 10.0 partial 5.6.1’
请重新考虑这个问题。除了上面评论中已经提到的内容,我没有其他要补充的,但我完全同意他们的观点。
我明白为什么这么做,主要是为了区分它和 MySQL,但大概在“发布”页面上应该有一些内容向像我这样在版本大跳跃发生时没有使用 MariaDB 的人解释这一点。我现在看到 5.5 系列的工作持续到七月末,而 10.0 分支的工作持续到八月中旬……对于来自 MySQL 的人来说,这看起来像是某种更严重的版本分裂,类似于 Python 2 与 3(我很高兴它终于要结束了)。我花了好几个小时在这个网站和 Google 上试图弄明白这里到底发生了什么。随便说说而已。:)