内容提要
在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 的仓库中获取。