用 Pl/SQL 与 Java 编写的存储过程的性能比较

Posted

技术标签:

【中文标题】用 Pl/SQL 与 Java 编写的存储过程的性能比较【英文标题】:Performance Comparison of Stored Procedure written in Pl/SQL vs. Java 【发布时间】:2010-11-29 18:56:02 【问题描述】:

经过here的讨论,我现在还有一个问题。

让我们假设,有一个 企业 级应用程序,拥有数百万用户群,每天有数百万笔交易。性能虎钳,这样会更好。

    Java Stored Procedure 或 Oracle 存储过程 (Pl/SQL)

P.S:当我说 企业 应用程序开发时,我的意思是从开发人员的角度来看,我们有不同的抽象层。测试框架。部署在多个刀片上的自动化测试和广泛的调试等

【问题讨论】:

较新版本的 Oracle 可以将 PL/SQL 编译为本机代码。似乎在 Java 中混合只是增加了另一个层次的复杂性和抽象。 PL/SQL 本身就是一种非常强大的语言 对那些 PL/SQL 过程进行单元测试怎么样?假设我们有 1000 个程序? 如果任何 Java 代码涉及往返行程以执行操作 -- PLSQL 会更快。 【参考方案1】:

我怀疑性能问题将归结为您正在执行的数据库操作类型。然而,在处理数据库时对我来说一个非常重要的问题是可测试性。很多时候,我参与的项目过于以数据库为中心——我们最终会遇到大量的业务逻辑,我无法对其进行单元测试、验证甚至更改。

我始终坚持务实的选择 - 一切都在正确的位置。对于某些东西,您确实应该将其保存在数据库中。但这是一个值得思考的问题。

【讨论】:

我相信用 Java 编写存储过程将能够运行 JUnit 测试。但同样,运行基于 java 的存储过程与其他存储过程相比会增加服务器的额外开销吗?为了清楚起见,让应用程序保持一个通用的应用程序,它在任一端(数据库、Java 代码)都具有平衡的业务逻辑。那会有什么建议呢? 我确信它会增加开销。虚拟机不总是吗?但是,计算机速度快,硬件便宜,并且拥有 VM 的好处通常大于负面因素。所以问题归结为 - 将要做什么?计算每个 cpu 周期,尽可能压缩最后一点吞吐量 - 绝对不是 java。但我没有接触过很多这样的系统。 我投票支持单元测试的业务逻辑和 java。但我有偏见:)【参考方案2】:

对于大多数应用程序,我无法想象两者之间会有很大差异,除非您的存储过程是高度计算密集型的(请注意,我指的是过程本身内的计算,而不是执行单个 SQL 语句所涉及的计算)。

现在,至于一般的存储过程和普通应用程序代码的区别,那就是另外一回事了。

【讨论】:

以上是关于用 Pl/SQL 与 Java 编写的存储过程的性能比较的主要内容,如果未能解决你的问题,请参考以下文章

pl/sql编程基础

Java 存储过程是不是比 Oracle 中的 PL/SQL 慢?

Oracle数据库技术之PL/SQL语法和存储过程

oracle PL/SQL高级编程

在 PL/SQL 中实现应用程序

触发存储过程运行而不是 INSERT (PL/SQL)