2011-03-21 57 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