1

如果我们使用外部程序,我可以用其他语言执行一些代码吗?我想使用一些数值方法库来做一些矩阵计算并将结果存储在 SQL、Oracle 或任何 DBMS 中,这可能吗?

也许在 SQL 中有一个表,并告诉外部代码来处理它,我希望这尽可能快。

  • 如何实现这一点?
  • 外部程序是最佳选择吗?
4

3 回答 3

2

作为基本规则。

CASE 
  WHEN "can do it in SQL" THEN SQL
  WHEN "can do it in PL/SQL" THEN PL/SQL
  WHEN "can do it in Java" THEN Java
  ELSE "External Procedure"
END

一般来说,“尽可能快”是一个糟糕的目标,因为它会导致在最好的硬件(SSD、高容量、低延迟网络组件......)上花费大量资金。“在预算为 $x 的情况下尽可能快”只是稍微合理一些。

选择一个可衡量的目标,例如在 10 分钟内处理 100 万个数据项。然后采取一种方法并计时。如果太慢,则寻找最慢的部分(例如磁盘、网络)并消除它们或优化它们。

于 2011-03-21T02:41:08.050 回答
1

根据您想要执行的“矩阵计算”,您可以使用UTL_NA 包在 Oracle 本身内部(在 10gR2 及更高版本中)执行此操作。

于 2011-03-21T17:46:45.920 回答
1

您的问题确实清楚地解释了您想要实现的目标。从您的个人资料中,我可以看到您问了很多关于 Matlab 的问题,所以我想您想了解有关使用 Matlab 对数据库的功能。

在 Oracle 中,外部过程是服务器端操作系统例程,我们可以从数据库内部的 PL/SQL 过程中调用它。此功能的正常用途是将深奥的 C 功能合并到我们的代码中。近年来,由于内置 Oracle 提供的范围大幅增加,加上我们从 Java 存储过程中获得的可扩展性,外部过程的使用越来越少。

存储过程的优点是它们在数据库内部运行,这使得它们在处理大量记录时非常有效。如果您想针对大量数据运行一些 Matlab 函数,那么将其包装为外部过程可能是正确的方法。基本上,您需要为 DLL 创建一个 LIBRARY 对象,然后为所需的库调用创建 PL/SQL 过程或函数。 了解更多

但是,数据库服务器倾向于针对某些类型的操作进行优化,而密集的数学不是其中之一。因此,如果性能是关键标准,那么您最好支付 I/O 费用并通过 ODBC 连接到数据库。了解更多

于 2011-03-24T14:20:08.260 回答