如果我们使用外部程序,我可以用其他语言执行一些代码,我想使用一些数值方法库来做一些矩阵计算并将结果存储在SQL,Oracle或任何DBMS中,这可能吗?
也许在SQL中有一个表,并告诉外部代码,处理它,我希望这是尽可能快。
答案 0 :(得分: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万个数据项。 然后采取一种方法并计时。如果它太慢,那么寻找最慢的部分(例如磁盘,网络)并消除它们或优化它们。
答案 1 :(得分:1)
根据您想要做的“矩阵计算”,您可以使用UTL_NA package在Oracle内部(在10gR2及更高版本中)执行此操作。
答案 2 :(得分:1)
您的问题确实清楚地解释了您想要实现的目标。从你的个人资料中我可以看到你提出了很多关于Matlab的问题所以我想你想知道如何在数据库中使用Matlab功能。
在Oracle中,外部过程是服务器端的OS例程,我们可以从数据库内的PL / SQL过程调用它。此功能的正常用途是将深奥的C功能合并到我们的代码中。近年来,外部程序的使用越来越少,因为Oracle内置程序的范围大大增加,而且我们从Java存储过程中获得了可扩展性。
存储过程的优点是它们在数据库中运行,这使它们在处理大量记录时非常有效。如果你想再运行一些Matlab函数,那么将数据包装成外部程序可能是正确的方法。基本上,您需要为DLL创建一个LIBRARY对象,然后为所需的库调用创建PL / SQL过程或函数。 Find out more
但是,数据库服务器往往针对某些类型的操作进行优化,而强烈的数学不是其中之一。因此,如果性能是关键标准,那么您可能最好还是支付I / O费用并通过ODBC连接到数据库。 Find out more