<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          MySQL 正式引入 JavaScript 支持!

          共 4657字,需瀏覽 10分鐘

           ·

          2024-04-10 17:40


          近期,MySQL 官方宣布了正式在 MySQL 中引入了  JavaScript 支持!

          下面是 MySQL 官方的描述:

          MySQL 正在持續(xù)推動創(chuàng)新,現(xiàn)在已在數(shù)據(jù)庫內(nèi)部包含豐富的過程式編程能力。開發(fā)者現(xiàn)在可以在 MySQL 數(shù)據(jù)庫服務(wù)器中編寫 JavaScript 存儲程序(函數(shù)和過程)。這些存儲程序?qū)⑹褂?GraalVM 運行時進行運行。

          這一舉措還是相當炸裂的,繼瀏覽器、服務(wù)端、客戶端之后, JavaScript 語言終于卷到數(shù)據(jù)庫上面了!

          734cb906b0ae79617d8382ebc4a148c2.webp

          JavaScript 存儲過程

          JavaScript 是開發(fā)人員中最流行的編程語言。除了簡單的語法和對現(xiàn)代語言特性的支持外,它的流行之處在于豐富的生態(tài)系統(tǒng),提供了大量可重用的代碼模塊。

          當需要持久性存儲時,MySQL 作為最流行的開源數(shù)據(jù)庫,將成為 JavaScript 開發(fā)人員的自然選擇。通過支持存儲過程中的 JavaScript,開發(fā)人員將能夠用熟悉的語言編寫 MySQL 存儲過程,并利用廣泛的 JavaScript 生態(tài)系統(tǒng)!

          支持 JavaScript 存儲過程不僅可以通過利用大型生態(tài)系統(tǒng)提高開發(fā)人員的生產(chǎn)力,還可以讓更多的開發(fā)人員掌握編寫存儲過程所必需的技能。換句話說,公司現(xiàn)在可以利用廣泛可獲得的 JavaScript 技能集進行后端開發(fā),從而吸引更廣泛的開發(fā)人才。

          存儲過程通過減少數(shù)據(jù)庫服務(wù)器和應(yīng)用程序之間的數(shù)據(jù)移動,提供了一個重要的優(yōu)勢。

          傳輸大量數(shù)據(jù),尤其是用于批處理,可能會帶來很多問題:

          • 這需要耗費時間,并且可能會導(dǎo)致網(wǎng)絡(luò)開銷增加。
          • 當應(yīng)用程序進行頻繁交互時,增加的延遲可能會變得明顯。
          • 在中間層或應(yīng)用層處理大容量數(shù)據(jù)需要大量的內(nèi)存和存儲資源,增加了成本。
          • 由于安全風(fēng)險和數(shù)據(jù)保護要求,通常需要避免在機器之間傳輸大量數(shù)據(jù),尤其是在云環(huán)境中。
          • 將大量數(shù)據(jù)移出數(shù)據(jù)庫服務(wù),將增加出口費用。

          使用存儲過程在數(shù)據(jù)庫內(nèi)部處理數(shù)據(jù)是解決這些問題的常見方法。

          53cd05199fe36666e74341e73827c746.webp

          使用場景

          MySQL-JavaScript 為應(yīng)用程序設(shè)計提供了新的機會,這些機會在過去受到權(quán)衡的限制。JavaScript 存儲過程使開發(fā)人員能夠回避數(shù)據(jù)移動,并輕松地在數(shù)據(jù)庫內(nèi)部實現(xiàn)高級數(shù)據(jù)處理邏輯。以下是一些簡單用例的示例:

          • 數(shù)據(jù)提取:從數(shù)據(jù)庫中常用的復(fù)雜對象中提取信息,例如 URL 字符串。
          • 數(shù)據(jù)格式化:使用廣泛使用的模板化方案(如 JavaScriptMustache 包)生成格式化的字符串。
          • 近似搜索:在 SELECT 查詢中使用相似性評分函數(shù),例如從表中檢索相似的字符串。
          • 數(shù)據(jù)驗證:使用復(fù)雜的驗證規(guī)則清理數(shù)據(jù)。例如,使用 JavaScriptValidator
          • 壓縮/編碼:使用 MySQL 中未包含的自定義算法進行數(shù)據(jù)壓縮和加密。
          • 數(shù)據(jù)轉(zhuǎn)換:更改數(shù)據(jù)表示,例如將字符串列轉(zhuǎn)換為特征工程中使用的稀疏矩陣表示。

          這些示例只是最簡單和常見的案例,實際上還會有很多復(fù)雜的場景,例如部署完整的數(shù)據(jù)管道和設(shè)置機器學(xué)習(xí)應(yīng)用程序的分段環(huán)境等。

          MySQL-JavaScript

          MySQL 現(xiàn)在引入了對 JavaScript 存儲過程的支持,用戶現(xiàn)在可以在數(shù)據(jù)庫內(nèi)部表達豐富的過程邏輯。JavaScript 運行時通過 GraalVM 集成,用戶可以免費使用 GraalVM 企業(yè)版(EE)的所有功能,如編譯器優(yōu)化、性能和安全功能。

          此版本支持以下功能:

          • 基于 ECMAScript 2021JavaScript 語言
          • 存儲過程和存儲函數(shù)
          • MySQL 數(shù)據(jù)類型,如各種整數(shù)、浮點數(shù)和 CHAR/VARCHAR 類型

          ECMAScript 標準庫包括許多基本的使用操作和數(shù)據(jù)結(jié)構(gòu),使實現(xiàn)變得簡單和表達性強。開發(fā)人員還可以從在線軟件包管理器(如 “npm” )中重復(fù)使用數(shù)百萬個可用的第三方軟件包。

          GraalVM

          01ba2da62f0b1204a3311d9f90e5bab1.webp

          GraalVMOracle 的編譯器生態(tài)系統(tǒng),包括 JDK、JavaScript、R、Python、RubyJava 等語言實現(xiàn)。它包含即時編譯(JIT)和預(yù)編譯(AOT)技術(shù)。它還提供了一個完全托管的虛擬機,具有沙箱能力和工具支持。MySQL-JavaScriptGraalVM 企業(yè)版集成在一起。

          定義 JavaScript 存儲過程

          要在 MySQL 中創(chuàng)建 JavaScript 存儲過程,你可以使用用于傳統(tǒng)存儲函數(shù)和存儲過程的 SQL 語句的變體:

                
                CREATE FUNCTION gcd_js (a INT, b INTRETURNS INT 
          LANGUAGE JAVASCRIPT AS $$

            let [x, y] = [Math.abs(a), Math.abs(b)];
            while(y) [x, y] = [y, x % y];
            return x;

          $$;

          從上面的示例中可以看出,JavaScript 代碼直接嵌入在 SQL 可調(diào)用函數(shù)的定義中。參數(shù)的名稱可以直接在 JavaScript 代碼中引用,在調(diào)用函數(shù)時,SQL 類型和 JavaScript 類型之間會進行隱式類型轉(zhuǎn)換。要調(diào)用 JavaScript 存儲過程,應(yīng)使用 CALL 語句,類似于常規(guī) SQL 存儲過程。存儲過程支持輸入和輸出參數(shù)。

          在 SQL 語句中執(zhí)行 JavaScript 代碼

          JavaScript 函數(shù)可以在任何傳統(tǒng) SQL 函數(shù)可以被調(diào)用的地方被 SQL 語句調(diào)用;在 SELECT 表達式、WHERE、GROUP BYORDER BY 子句、DMLs、DDLs、視圖等等。以下是一個 SQL 語句的示例,它調(diào)用了我們上面定義的函數(shù):

                
                SELECT col1, col2, gcd_js(col1,col2)
          FROM my_table
          WHERE gcd_js(col1, col2) > 1
          ORDER BY gcd_js(col1, col2);

          CREATE TABLE gcd_table 
          AS SELECT gcd_js(col1,col2)
          FROM my_table;

          在 MySQL 中調(diào)試 JavaScript 代碼

          調(diào)試與軟件開發(fā)緊密相連,MySQL-JavaScript 特性提供了額外的 SQL 接口以幫助故障排查,同時 JavaScript 程序在數(shù)據(jù)庫中運行。

                
                CREATE PROCEDURE division (IN a INTIN b INT,
          OUT result DOUBLELANGUAGE JAVASCRIPT AS $$
            function validate(num) {
              console.log("validating input value: "num);
              if (num === 0) throw ("Division by Zero!");
            }
            validate(b);
            result = a / b;
          $$

          JavaScript 異常到 MySQL 錯誤的轉(zhuǎn)換是完全透明的。開發(fā)人員也可以訪問 JavaScript 堆棧跟蹤,以及標準輸出。

                
                CALL division( 50, @res);
          ERROR 6000 (HY000): JavaScript> Division by Zero!

          SELECT mle_session_state("stdout");
          validating input value:  0

          SELECT mle_session_state("stack_trace");
          <js> validate(division:9:187-214)
          <js> division(division:11:222-232)
          <js> :anonymous(division:15:256-265)
          </js></js></js>

          安全、性能、兼容性

          安全、性能、兼容性這三個方面可謂是開發(fā)者對一項技術(shù)最重要的關(guān)注點了。

          • 安全MySQLJavaScript 的支持提供了最高級別的安全性、隔離性和數(shù)據(jù)保護。虛擬機沙盒確保惡意代碼不能妨害 MySQL 服務(wù)器的其他模塊。每個存儲程序都在其自己的上下文中解析和執(zhí)行。這種隔離策略不允許一個存儲程序讀取或修改其他存儲程序的數(shù)據(jù)或代碼。JavaScript 用戶代碼中的線程生成或操作被限制,JavaScript 用戶代碼無法訪問網(wǎng)絡(luò)通信或文件系統(tǒng)。JavaScript 存儲程序建立在標準的 MySQL 權(quán)限模型之上。只有擁有特權(quán)的用戶才允許創(chuàng)建存儲程序。

          • 性能:采用特定用途定制的 VMMySQLJavaScript 的集成能提供最優(yōu)的端對端性能。該定制基于 GraalVM 的預(yù)編譯(AOT),即把語言實施編譯為原生二進制形式,以加快處理速度。

          • 兼容性JavaScript 存儲程序與傳統(tǒng)的 SQL 存儲程序無縫協(xié)同工作。這個特性對存儲引擎保持中立,可以從InnoDB,LakehouseHeatWave 中透明地訪問數(shù)據(jù)。MySQL Heatwave 服務(wù)現(xiàn)在帶有預(yù)安裝和配置的 JavaScript,可在 OCI,AWSAzure 服務(wù)部署中使用。

          大家對這項支持怎么看?歡迎在評論區(qū)留言~

          瀏覽 50
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  麻豆成人免费电影 | 在线看黄色视频网站 | 国产美女被草 | 久久一级精品视频 | 九色视频在线观看 |