暂无图片
暂无图片
4
暂无图片
暂无图片
暂无图片

多语言引擎MLE助力APEX全栈开发

甲骨文云技术 2023-07-25
392

今天我们一起来聊聊在Oracle数据库上,使用多语言进行Web应用的开发。

本文实际上是一个系列文章的浓缩版,原文包括3部分:

  1. 使用MLE多语言在Oracle数据库上的开发[1]

  2. 如何在APEX上使用MLE进行Web应用的开发[2]

  3. APEX + MLE的实际用例演示[3]

在本文中,我们将为您介绍Oracle的多语言引擎MLE,高性能JVM:GraalVM,以及广受好评的低代码开发工具APEX。当然,最重要的,我们会解释他们自己的关系,以及如何将APEX与MLE结合来实现Web应用的简单快速开发。

MLE是什么?

Oracle 数据库以支持丰富的编程语言生态而闻名,其中最常见的服务器端编程接口是PL/SQL。通过使用PL/SQL,可以将业务逻辑和数据保持在一起,除了提供统一的数据处理模式之外,通常还可以显著提高效率。

借助Oracle 21c数据库推出的MLE多语言引擎(Multlingual Engine),您可以利用PL/SQL来实现JavaScript模块,开发人员还可以选择通过动态执行或通过持久性MLE模块直接存储在数据库中。

持久性MLE模块在Oracle 23c或以上版本支持

为什么需要在数据库端来执行处理?

Oracle数据库可以被当作成熟的处理引擎,而不是简单的持久层或简单的REST API,利用数据库就地处理数据可以提供许多优势,例如增强安全性、潜在消除网络往返以及由于使用引用完整性而提高数据质量,而且数据库服务器通常比服务于应用程序前端的机器更强大,从而进一步加快处理时间。

随着要处理的数据量不断增加,尤其是批处理,将大量数据从数据库传输到客户端可能会出现问题,原因如下:

  • 服务器之间数据库信息的传输非常耗时,并且可能会导致大量的网络开销

  • 延迟通常会显著增加;累积效应可能非常明显,特别是对于那些对话式应用程序

  • 在中间层或客户端处理大量数据需要这些环境配备大量DRAM和存储,从而增加成本

  • 由于固有的安全风险和数据保护要求,机器之间的数据传输,尤其是在云环境中,通常受到监管控制


而直接在数据库中处理数据是缓解许多此类问题的常见策略。

下面是MLE的实现原理架构图,通过PL/SQL的DBMS_MLE包来实现多语言的执行,可以看到MLE是基于GraalVM的


GraalVM是什么?

随着云原生浪潮的兴起,越来越多的应用被部署在了云厂商的云服务环境中,以计算资源的形式为用户提供服务。在这种趋势下,对应用快速启动、即起即⽤和⾼性能执行的需求越来越强。Java程序的冷启动问题在这种场景下就显得格外突出,成为开发人员在选择编程语言时的减分项。但是,因为Java的冷启动问题的根源在于JVM本身,所以在JVM之上做的各种优化的效果都是有限的,难以实现质的飞跃,很难达到理想的效果。

GraalVM 起始于 2011 年 Oracle 实验室的一个研究项目。该项目旨在创建一个可以杰出性能运行多种编程语言的运行时平台,如下所述,其核心是高级优化 GraalVM 编译器。GraalVM 编译器可用作 Java 虚拟机的即时 (JIT) 编译器,或帮助 GraalVM本地镜像提前将Java字节码编译为原生机器码。

Oracle推出的开源高性能多语言运行平台项目GraalVM,打造了一个包括静态编译器和轻量级运行时的Java静态编译框架,可以将Java程序从字节码直接编译为本地可执行应用程序。与在JVM下执行相比,静态编译后的Java程序的启动速度能以数量级方式提升,完全解决了冷启动的问题,实现了Java应用程序的启动性能的质的突破

Graal是使用Java重新实现的JIT编译器

我们知道Java是一次编写,到处执行,是通过JVM的运行时来实现的,JVM屏蔽了各平台的差异,从而允许在任何平台上运行Java应用。

而JVM使用两种方法运行类文件:解释器JIT编译器

- 解释器:单个语句翻译成机器代码是由语言处理器完成的,并在进入下一行之前立即执行

- 编译器:编译器将字节码转换为机器语言并执行来提高Java应用程序的性能

当程序需要快速启动和执行的时候,解释器可以首先发挥作用,省去编译的时间,立即执行。在程序运行后,随着时间的推移,编译器逐渐发挥作用,越来越多的代码被编译成本地代码,可以获取更好的执行效率。解释器比较节约内存,编译器的效率比较高

使用JIT(Just In Time)编译器又分为两种:

- C1客户端:快速编译方法,快速启动和较小的内存占用比稳态性能更重要,但生成的机器代码不如服务器编译器优化,更注重启动速度和局部的优化

- C2服务器:通常需要更多的时间(和内存)来编译相同的方法,但会生成比C1生成的代码更好的优化机器代码,稳态性能比快速启动更重要

C1编译器允许大多数应用程序启动得更快(因为编译开销较小),但一旦应用程序达到稳定状态(已预热),C2服务器编译器就会提供更好的运行时性能

而GraalVM是从JVM内部将C2 JIT编译器替换为新的Graal JIT编译器

而GraalVM拥有更好的性能,无需预热,更快、更轻、更省内存

同时,通过Graal编译器与Truffle语言实施框架和Sulong相结合,共同协作,可以以卓越性能运行JavaScript、Python、R、Ruby 以及LLVM支持的其他等语言。

话题回到MLE,也就是说,MLE让Oracle数据库真正意义上的实现了对多语言的支持,意味着你不仅仅能在Oracle数据库上运行SQL或PL/SQL,还可以运行Javascript、Python、R等等其它语言,GraalVM能支持的语言,将来在Oracle数据库中也能支持。

虽然目前Oracle DB中MLE仅支持JavaScript,但这只是开始,未来会逐步增加对其它语言的支持。

如果你想看下MLE在数据库端是如何使用的,请参考完整文章:MLE助力APEX全栈开发第一期[1]

APEX是什么?

Oracle数据库已经是一款强大的融合型数据库,不但能处理关系型、⾮关系型(JSON/XML)、空间(Spatial)、图(Graph)的数据存储及处理外,简单易用的Oracle Text可以轻松解决搜索需求,本身Oracle数据库还可以直接用来做Web应用开发哦!是的,没听错!一款永久免费的低代码平台Application Express,简称APEX,让数据库直接面向开发者,构建企业应用速度提高20倍,代码减少100倍!这是Oracle一步一步走近开发者的战略。用Oracle数据库就可以做Web应用开发这件事,早在19年前的2004年就开始了。时至今日,APEX已被全球广泛使用,以4.8分的高分拿下2022年Gartner Peer Insights值得推荐的低代码平台,是拥有70%以上5星纪录的厂商,没有什么比客户的认可更有说服力的了!


如果你还不了解这款宝藏级的低代码开发平台APEX,可以去到APEX网官[4]了解更多。只需几分钟,通过邮箱就可以在官网申请一个试用工作区,从而帮助您快速验证APEX的各项功能和能力是否适用。

至于如何在APEX中使用MLE,请参见:MLE助力APEX全栈开发第二期[2]

不旦如此,还有更多的APEX+MLE的实际用例分享见:MLE助力APEX全栈开发第三期[3]

今天的分享就到这里,希望我们提供的内容能对大家有所帮助,希望您能用Oracle多语言引擎MLE和低代码工具APEX节省出来的时间,去享受夏日西瓜味的风和桔色晚霞,:)。

参考链接:
  • [1] https://jihulab.com/CathyXing/mle-apex/-/blob/8d0228dd84c3b4acfa9ea6c89533353dfad78408/1/MLE%E5%8A%A9%E5%8A%9BAPEX%E5%85%A8%E6%A0%88%E5%BC%80%E5%8F%91v2.0_1.md

  • [2] https://jihulab.com/CathyXing/mle-apex/-/blob/8d0228dd84c3b4acfa9ea6c89533353dfad78408/2/MLE%E5%8A%A9%E5%8A%9BAPEX%E5%85%A8%E6%A0%88%E5%BC%80%E5%8F%91v2.0_2.md

  • [3] https://jihulab.com/CathyXing/mle-apex/-/blob/8d0228dd84c3b4acfa9ea6c89533353dfad78408/3/MLE%E5%8A%A9%E5%8A%9BAPEX%E5%85%A8%E6%A0%88%E5%BC%80%E5%8F%91v2.0_3.md

  • [4] https://apex.oracle.com/zh-cn/

编辑:萧宇

最后修改时间:2023-07-25 18:37:22
文章转载自甲骨文云技术,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论