2011-03-21 44 views
1

如果我们使用外部程序,我可以在其他语言执行一些代码外部过程,我想用一些数值方法库做一些矩阵计算和结果存储在SQL,Oracle或任何数据库管理系统,这是可能的?在DBMS

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

  • 如何实现这个目标?
  • 是外部程序的最佳选择?

回答

1

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

+0

那么,我真的很想在DBMS之外做一些计算,有什么办法可以做到这一点? – cMinor 2011-03-21 17:48:12

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 

一般情况下,“尽可能快地”是一个贫穷的目标,因为它导致在最好的硬件(固态硬盘,高容量,低延迟的网络组件......)花费浩大的数量的钱。 “在$ x的预算下尽可能快”只是稍微合理些。

选择一个可测量的目标,在10分钟内处理,例如百万数据项。 然后采取一种方法和时间吧。如果速度太慢,则查找最慢的部分(例如磁盘,网络),并将其消除或优化。

+0

我将如何执行'Java'并传递参数,像'WHEN'里面的整个表可以在SQL中执行'THEN Java'我真的很想在外部执行一些库可能在parralell中 – cMinor 2011-03-21 02:53:34

+0

@darkcminor:我想,看起来像代码的代码片段实际上不是代码模板,而是作为Gary正在讨论的一般规则的概要。所以你不应该把它看作是将控制权交给外部程序的一种建议方法。 – 2011-03-21 08:14:35

1

你的问题没有解释清楚你想要达到的目标。从你的配置文件中,我可以看到你问了很多关于Matlab的问题,所以我想你想知道如何使用Matlab功能对数据库。

在Oracle中,外部过程是一个服务器端OS例程,我们可以从数据库中的PL/SQL过程调用它。此功能的正常使用是将深奥的C功能并入我们的代码中。外部程序已经由于大量增加的内置插件甲骨文providss的范围,加上可扩展性,我们从Java存储过程获得成为近几年较少采用。

存储过程的优点是它们在数据库内部运行,这使得它们在处理大量记录时非常高效。如果你想运行一些Matlab函数来防止数据泄露,那么把它作为外部过程包装起来可能是正确的选择。基本上你需要为DLL创建一个LIBRARY对象,然后为所需的库调用创建PL/SQL过程或函数。 Find out more

然而,数据库服务器往往对于某些类型的操作进行优化,并激烈数学不是它们中的一个。因此,如果性能是关键标准,那么或许您最好是支付I/O收费并通过ODBC连接到数据库。 Find out more