MySQL中的JavaScript:扩展SQL,而非迁移应用

MySQL中的JavaScript:扩展SQL,而非迁移应用

💡 原文英文,约1100词,阅读约需4分钟。
📝

内容提要

在Percona Live Europe 2026上,作者介绍了Percona Server for MySQL 8.4的V8 JavaScript引擎组件component_js_lang。它并非将数据库变为应用服务器,而是扩展SQL能力:SQL负责集合操作,JavaScript负责单值计算,适用于递归、数组、大数和紧循环等SQL难以表达的步骤。业务逻辑仍保留在应用层,JavaScript例程仅填补SQL与存储过程之间的空白。

🔎

延伸解读

定位:扩展SQL而非替代应用

component_js_lang 并非将 MySQL 变为应用服务器,而是作为 SQL 的补充。它让 SQL 负责集合操作,JavaScript 负责单值计算,填补 SQL 和存储过程难以表达的空白,如递归、数组、大数和紧循环。业务逻辑仍保留在应用层,避免重蹈存储过程堆积的覆辙。

适用场景:SQL与JavaScript的分工

文章通过演示说明:SQL 擅长过滤、连接、排序、窗口和聚合,而 JavaScript 适合处理单值计算。例如,在去重演示中,SQL 先通过连接谓词将 600 万对缩小到 21,352 对,再由 JavaScript 计算编辑距离;验证演示中,JavaScript 函数返回清洗后的值和错误数组,由触发器保证数据质量,但后续处理仍由应用决定。

使用边界:何时该用JavaScript例程

作者提出五个问题来判断 JavaScript 例程是否该放入数据库:如果例程开始需要配置表、特性开关或调用其他系统,就说明它已越界。例程应使数据操作成为可能或更廉价,而业务决策应留在应用层。这有助于避免数据库重新变成难以维护的应用服务器。

可用性与反馈

component_js_lang 在 Percona Server for MySQL 8.4.5-5 及更高版本中作为技术预览提供,免费且开源,而 Oracle 的等效功能需要 MySQL Enterprise。目前,从 JavaScript 执行 SQL 是 Percona Server 路线图的首要项目。用户可通过 Percona 社区论坛或 Jira(标签 PS-JS-LANG)提供反馈,反馈将影响 GA 版本的功能。

❓

Q&A

Percona Server for MySQL 8.4 中的 JavaScript 引擎组件是什么?

component_js_lang 是一个基于 V8 的 JavaScript 引擎组件,作为技术预览在 Percona Server for MySQL 8.4.5-5 及更高版本中提供,免费开源。它允许在 SQL 中调用 JavaScript 例程,扩展 SQL 能力。

在 MySQL 中使用 JavaScript 例程会取代应用逻辑吗?

不会。JavaScript 例程仅用于填补 SQL 和存储过程之间的空白,处理递归、数组、大数和紧循环等 SQL 难以表达的步骤。业务逻辑仍应保留在应用层,数据库不应变成应用服务器。

SQL 和 JavaScript 在 component_js_lang 中如何分工?

SQL 负责集合操作,如过滤、连接、排序、窗口和聚合;JavaScript 负责单值计算,即 SQL 无法表达的单个步骤。原则是:SQL 拥有集合,JavaScript 拥有值。

JavaScript 例程在 MySQL 中适合处理哪些场景?

适合处理递归、数组、大数和紧循环等 SQL 和 PL 难以表达的步骤。例如,在去重演示中,JavaScript 计算编辑距离;在验证演示中,JavaScript 清理数据并返回错误数组。

如何判断一个 JavaScript 例程应该放在数据库还是应用层?

当例程能使数据操作成为可能或更高效时,放在数据库;当它决定业务做什么时,放在应用层。如果例程开始需要配置表、功能标志或调用其他系统,说明已越界。

component_js_lang 目前可用吗?如何获取?

component_js_lang 作为技术预览在 Percona Server for MySQL 8.4.5-5 及更高版本中提供,免费开源。而 Oracle 的等效功能需要 MySQL Enterprise。演示代码可在 Percona Live Europe 2026 的仓库中获取。

🏷️

标签

➡️

继续阅读