オラクルは最近、MySQLデータベース・サーバーがJavaScriptのファンクションとプロシージャをサポートするようになったと発表した。ストアドルーチンのJavaScriptは現在プレビュー中で、MySQL Enterprise EditionとMySQL Heatwaveでのみ利用できる。
JavaScriptサポートの導入により、開発者はデータベース内で高度なデータ処理ロジックを実装できるようになる。データベース・サーバーとクライアント・アプリケーション間のデータ移動を最小限に抑えることで、ストアド・ファンクションとプロシージャはレイテンシー、ネットワーク・オーバーヘッド、エグレス・コストを削減できる。オラクルのシニア・プリンシパル・ソフトウェア・エンジニアであるØystein Grøvlen氏と、技術スタッフのコンサルティング・メンバーであるFarhan Tauheed氏は、次のように書いている。
JavaScriptストアドプログラムのサポートは、大規模なエコシステムを活用することで開発者の生産性を向上させるだけでなく、より多くの開発者がストアドプログラムを書くために必要なスキルを持つようになる。言い換えれば、組織はバックエンド開発に広く利用可能なJavaScriptのスキルセットを活用することで、より幅広い開発者の才能を活用 することができる。
新機能の一般的な使用例として、オラクルはデータ抽出、データ整形、近似検索、データ検証、圧縮、エンコード、データ変換を挙げている。コミュニティから好意的に受け入れられているこの発表では、JavaScriptコードがSQL定義に直接埋め込まれている関数の例が示されている。
CREATE FUNCTION gcd_js (a INT, b INT) RETURNS INT
LANGUAGE JAVASCRIPT AS $$
let [x, y] = [Math.abs(a), Math.abs(b)];
while(y) [x, y] = [y, x % y];
return x;
$$;
出典オラクル・ブログ
従来のCALL文を使って関数を呼び出すと、SQL型とJavaScript型の間で暗黙の型変換が行われる。ドキュメントによると、JavaScriptのサポートはECMAScript 2021標準に基づいており、整数、浮動小数点、CHAR/VARCHAR型のすべてのバリエーションがサポートされている。Grøvlen氏とTauheed氏が補足する。
MySQLとJavaScriptの統合では、エンド・ツー・エンドで最高のパフォーマンスを実現するために、特定のユースケース用にカスタムビルドされたVMを使用している。このカスタマイズは、GraalVMのAOT(ahead-of-time)コンパイルに基づいており、言語実装は高速処理のためにネイティブ・バイナリ表現にコンパイルされる。GraalVMは、ECMAScript 2021標準に基づいた独自のJavaScript実装を持っている。この言語実装は、GraalVMのPolyglotフレームワークを使用して実装されているが、性能の面では競争力がある。
GraalVMランタイムには、JDK、言語実装(JavaScript、R、Python、Ruby、Java)、サンドボックス機能とツールサポートを備えたマネージド仮想マシンが含まれる。MySQL-JavaScriptは、MySQL Enterprise EditionとOCI、AWS、Azure上のMySQL Heatwaveクラウド・サービスで利用できるが、MySQL Community Editionではサポートされていない。
ストアドルーチンでJavascriptをサポートするオープンソースのリレーショナルデータベースはMySQLが 初めてではなく、PostgreSQL用のJavascript言語拡張としてはPLV8が最も普及している。PLV8は、Amazon RDSのようなマネージドサービスを含むPostgreSQLのすべての現行リリースでサポートされており、ストアドルーチンとトリガーに使用ができる。
オラクルはYouTubeで3本のMySQL HeatWaveビデオを公開し、JavaScriptのストアドプログラムを使用して、Mustacheライブラリの実行、Webフォーム入力の検証、Web URLの処理を実演している。