数据库 频道

MariaDB中最好的新功能

  开源MySQL分拆公司稳步增加了自己的功能。以下是切换到MariaDB的五个好理由。

  在甲骨文收购MySQL后,MariaDB可能最初是一个MySQL分叉,但随着时间的推移,它开辟了自己的道路。在过去的几个主要修订版中,开源RDBMS增加了独特的功能,与MySQL的兼容性更强,以及一套旨在使其成为Oracle SQL用户的迁移目标的行为。以下是MariaDB中一些最好和最强大的新功能的快速回顾。

  选择加入甲骨文兼容性

  自10.3版本以来,MariaDB一直在稳步增加甲骨文兼容性功能,使其更容易将甲骨文移植到MariaDB。

  甲骨文兼容性是选择加入的。您需要做的就是发出命令SET SQL_MODE='ORACLE',为给定的一组SQL语句激活它。现有的MariaDB行为也将尽可能保留。

  大多数甲骨文兼容性功能都旨在支持甲骨文SQL语法,特别是它偏离ANSI SQL或MariaDB的地方。例如,Oracle SQL允许您使用存储过程的名称而不是CALL关键字调用存储过程。

  但最近对甲骨文兼容性模式的其他更改涉及基本行为,而不仅仅是语法。从MariaDB 12.0起,单个触发器可以在多个INSERT/UPDATE事件上执行,这是一个难以手动复制的Oracle SQL功能。

  MariaDB(公司)还提供一个迁移工具,该工具可以分析Oracle SQL DDL导出文件(仅数据定义,没有实际数据),并评估它与MariaDB的Oracle兼容性模式的运行情况。

  人工智能功能:MCP服务器和矢量类型

  人工智能功能正在进入(有些人可能会说侵扰)大多数以数据为中心的软件产品。虽然MariaDB也不例外,但它的人工智能功能看起来是实际的工具,而不仅仅是营销釉料。

  MariaDB 11.8添加了一个原生VECTOR数据类型,这是一种在数据库中嵌入文本相似性信息的方法。这允许您使用MariaDB作为构建自然语言查询、推荐系统、RAG解决方案和通用机器学习任务等内容的引擎。此类工作的大部分繁重工作可以直接在数据库中完成,避免往返外部应用程序。

  最近新增的另一个人工智能使MariaDB成为现有人工智能代理的延伸。模型上下文协议(MCP)为LLM提供了与外部工具对话的通用方式,例如,搜索网络。MariaDB现在提供自己的MCP服务器组件,使LLM可以轻松查询MariaDB实例。也可以使用嵌入(通过OpenAI、Gemini或开放Huggingface模型)对存储在数据库中的文档进行语义搜索。

  更多JSON功能

  NoSQL数据库使开发人员可以自由地使用定义为JSON文档的开放式模式来存储数据。此后,传统的SQL数据库增加了自己的原生JSON功能,这是在不放弃传统SQL的正式模式的情况下获得NoSQL灵活性的有用方式。

  In MariaDB, there’s a JSON column type, which accepts text in JSON format and can be automatically validated with a JSON_VALID CHECK constraint. If you want your JSON data to follow strict data types, you can add constraints for specific keys (e.g., key year should always be a valid INTEGER).

  SELECT查询可以按键从JSON列中提取数据:

  从电影中选择id、名称、JSON_QUERY(attr,'$.dates.release')作为发布年份

  他们还可以按值进行筛选:

  从电影中选择id,名称在哪里JSON_VALUE(attr, '$.dates.release') = 1981

  为了对JSON进行更高性能的操作,您可以创建映射到文档中的键的虚拟列,也可以从这些虚拟列中构建索引:

  改变表格电影添加列发布_年 SMALLINT AS (JSON_VALUE(attr, '$.dates.release'));在电影上创建索引发布年份(发布年份);

  也可以在不提取JSON和操作的情况下修改数据。JSON_INSERT()JSON_ARRAY_APPEND()和JSON_REMOVE()都允许您比在MariaDB之外手动处理数据更快、更可靠地执行这些类型的原位转换。

  扩展的优化器提示

  经验丰富的数据库开发人员喜欢对查询执行方式进行精细控制。MariaDB长期以来一直对SELECT语句(如HIGH_PRIORITY和FORCE INDEX)提供提示或“修饰符”。

  MariaDB 12.0出现了所谓的新式优化器提示,一种将提示应用于特定表或索引以及全局的方法。这些提示的格式是带有/*+和*/分隔符的内联注释。

  扩展提示不适合日常使用。它们强制启用(或禁用)行为,这些行为通常按原定状态工作正常,但在某些情况下,在明确控制时效果更好。例如,INDEX_MERGE提示告诉查询优化器在对多个列执行索引扫描时要使用哪些特定索引,而不是其他索引。这可以加快对具有多个索引的表的查询,或者没有复合索引来覆盖特定查询。但不要假设你关于这些优化在理论上如何运作的想法会在实践中发挥作用。最好将EXPLAIN语句与查询优化一起使用,以了解它是否确实加快了速度。

  其他新的提示对故障排除和性能都很有用。例如,MAX_EXECUTION_TIME()提示可以在一定毫秒后中止特定查询。这个提示可用于防止“病态”查询束缚系统,也可以作为调试有失控倾向的现有查询过程的一部分。

  一种新的XML类型

  另一个前瞻性的改进,尽管它实际上做得不多,但MariaDB 12.3中引入的新XMLTYPE列类型。现在,它所做的只是接受大小高达4GB的字符串,并允许用UPDATEXML功能有选择地替换XML。虽然目前没有尝试验证XML或强制执行模式,但这些功能计划稍后登陆,并使XMLTYPE在功能上与甲骨文更兼容。它为未来的扩张开辟了道路。

  功能仍然缺失

  随着MariaDB的成熟并开始与MySQL分开,它引入了许多在MySQL中找不到的功能,如动态或虚拟列。但相反的情况也成立:MariaDB中仍然没有一些MySQL功能,至少现在还没有。

  一个主要缺失的功能,MySQL资源组,已经提出,但仍需要实施。其他功能可能永远不会交叉兼容,例如支持MySQL的JSON“打包”(二进制)存储格式。

  而且,由于MariaDB和MySQL对全局事务ID有不同的不兼容的方法,因此您可以使用MariaDB服务器作为MySQL服务器的副本,但不能反之。从好的方面来说,这意味着您可以使用复制作为从MySQL到MariaDB的迁移策略。只需确保您拥有两个数据库的兼容版本。

0
相关文章