阿姆斯特丹 MariaDB 开发者会议关于 MariaDB Server 10.3 的思考,第一部分
在阿姆斯特丹举行的 MariaDB 开发者会议期间的周六,我很荣幸主持了一个关于 MariaDB Server 10.3 的头脑风暴会议。鉴于 MariaDB Server 10.2 已进入 Beta 阶段,现在确实是时候进行这项工作了。如果你错过了,我在我雇主网站上的一篇博客文章中总结了 10.2 迄今为止包含的内容。除了那篇博客文章中提到的功能之外,10.2 中还有一些即将到来的功能,其中最值得注意的是将包含 MyRocks 引擎。更多关于这方面的内容将在另一篇文章中阐述。
在本文中,我将介绍讨论过的 MariaDB Server 10.3 的第一部分功能。几天后将有第二部分,其中包含关于其他功能的更多思考。
在 2016 年的 Google Summer of Code 期间,创建了一些不错的功能,现在正在进行完善,以便将其纳入 MariaDB Server 10.3。这些功能是:
- 隐藏列
- 长唯一约束
- 基于 SQL 的 CREATE AGGREGATE FUNCTION(聚合函数)
新数据类型,如 IPv6 和 UUID 的数据类型长期以来一直是 MariaDB 最受欢迎的愿望。现在看来,随着可插拔数据类型 API 的实现,向前迈出了一步。它仍然存在于一个单独的分支中,但现在计划将其包含在 MariaDB Server 10.3 中。基于此 API 的想法是按照 SQL 标准构建用户定义类型。
另一组非常受欢迎的功能是为 CJK(中文、日文和韩文)语言提供更好的支持。想法是包含 ngram 全文解析器和 MeCab 全文解析器插件。此外,用于中文字符集的 GB 18030 标准也在 10.3 的考虑范围内。
在存储引擎方面,MyRocks 将包含在 10.2 中,这将使 MyRocks 对更广泛的受众开放。显然,在 10.3 期间需要对其进行工作以提高成熟度。过去几年讨论的另一个有趣的存储引擎是 Spider,它提供了一个数据库分片解决方案。尽管 Spider 已经存在于 MariaDB Server 中,但仍有一组补丁需要在服务器端集成以改善功能和性能。这些补丁可以在 MDEV-7698 中找到。
最受欢迎的存储引擎 InnoDB 也在会议期间进行了讨论,包括关于 10.3 中有趣的 InnoDB 功能的思考。MySQL 5.7 中的大多数 InnoDB 功能将在 MariaDB Server 10.2 中可用,但原生分区除外。原生 InnoDB 分区进行了讨论,但由于 MariaDB 中的分区是在服务器级别完成的,因此考虑是在 InnoDB 内部的分区只有在使用它比服务器提供的分区有明显优势时才会被包含。
在 MySQL 8.0 中,InnoDB 有一些新的有趣功能,对 MariaDB 也很有吸引力:InnoDB 死锁检测和新的 information schema 表。10.3 和 8.0 的时间线将部分决定这些功能是否会出现在 10.3 中。此外,还有一些非常有趣的贡献将被评估是否包含在 MariaDB 10.3 中:“锁定等待策略”和“持久自增”。
MariaDB Corporation 似乎很有可能在数据库兼容性方面做出贡献。包括 SQL 标准中缺失的功能以及其他数据库服务器提供的功能。在 10.2 中,已经在此领域添加了功能,例如强制检查约束、改进的DEFAULT 值以及支持每个表多个触发器。属于此类别的、针对 10.3 的一些功能是:
- 支持 SEQUENCE
- 添加 PL/SQL 解析器
- 支持 INTERSECT
- 支持 EXCEPT
我将在这里结束关于 10.3 功能会议思考的第一部分,几天后将带来第二部分。
我们非常希望能听到您对此的反馈!现在就让我们知道您认为 10.3 的哪些方面很重要,绝对不晚。您可以直接在这篇博客文章上评论,或者在 maria-discuss 邮件列表中分享您的意见。联系 MariaDB 开发人员和其他相关人员的另一种方式是在 Freenode IRC 的 #maria 频道上沟通。如果您对某个特定功能有意见,也可以直接在 MariaDB 的 JIRA 中评论该功能。
我希望看到字符串函数的改进。例如,一个将字符串分割成表的函数。
支持返回表类型的功能,以便函数可以返回可用的表。
以及 Python 中的 UDF(用户定义函数)。
以及 federation 引擎能够使用 ODBC 调用任何数据库的能力。
您是否已经尝试过 CONNECT 引擎和 ODBC 类型,https://mariadb.com/kb/en/mariadb/connect-table-types-odbc-table-type-accessing-tables-from-other-dbms/?
迫不及待地期待 SEQUENCE 对象的落地!
Galera 4.0 何时落地有消息吗?
像 postgres 那样新的多线程查询功能如果有一天能有就好了
您可以在 10.2 中使用 spider,它应该支持基于分区的多线程查询
多线程本身并不是试图让大请求运行得更快时的真正问题。
事务系统需要 ACID 一致性,并且在某个时刻对大请求执行必要的操作会涉及磁盘 I/O。
。.
接受一个请求并允许它在多个线程中运行,然后将每个线程分解成非常小的片段(数百个而不是数百万个),与仅仅多线程处理获得的 2-3 倍改进相比,您可以获得 10 倍 - 20 倍的改进。
与仅仅多线程获得的 2-3 倍改进相比,您可以获得 10 到 20 倍的改进。
我们一直在 INNODB 表上运行一个存储过程/事件驱动的环境,该环境对一部分 SQL 语句同时进行多线程和小片段处理,已经一年多了。在一个例子中,它将一个超过 4 小时的 INSERT/SELECT SQL 在 20 分钟内完成。
在一个例子中,它将一个 4+ 小时的 INSERT/SELECT SQL 在 20 分钟内运行完成。
Maria DB 10.3 大约什么时候发布?
我们期待密码过期和密码历史/重用等功能,例如 https://jira.mariadb.org/browse/MDEV-9245 和 https://jira.mariadb.org/browse/MDEV-7597,这些功能很可能在 10.3 版本中可用。
此致,
Dinesh.
过去,下一个版本通常在前一个稳定版本发布几个月后首先发布 alpha 版。10.2.3 仍是 beta 版,因此最早的稳定版将是 10.2.5。非常粗略地估计,第一个 10.3 alpha 版可能会在今年晚些时候发布,第一个稳定版将在明年发布。有关更准确的估计,请参阅 https://jira.mariadb.org/secure/Dashboard.jspa,时间会更近。
最近我花了很多时间研究和思考 seconds_behind_master 用于复制。上周末我想到,如果在 relay log 中包含副本接收每个事件时的 timestamp,我们可以更好地了解网络延迟问题。我当时想的是,当前的 seconds_behind_master 可以改为 seconds_behind_Io_thread,以更准确地反映它代表的内容。在 show slave status; 中添加一个新值,称为 last_network_latency,它会查看 relay log 中最新输入的事件的 timestamp 与同一事件来自 master 的 timestamp 之间的差异。这仍然不是对 master 真实延迟的完美表示,但它能更好地了解网络延迟。这也为编写实用工具来消化 relay logs 以确定事件到达副本后的历史延迟问题提供了可能性。
其次,如果可能的话,将这两个值从秒更改为毫秒以便更精细化。