ORM 風格的伺服器端程式語言(PL/SQL 的 OO 替代品?)
晚上好,
是否有 PL/SQL 的物件導向替代品,允許編寫伺服器端程序
$$ and then called client or server side $$? (適用於 MySQL、PostgreSQL、Oracle 等)
DBMS 上的嵌入式 Sproc
我認為就您的問題而言,答案可能介於“否”和“視情況而定”之間。
大多數關係 DBMS 平台支持 SQL 派生方言或具有嵌入式 SQL 功能的過程語言的儲存過程。PL/SQL 是後一類語言的一個例子。
用任意語言編寫查詢並不是一個真正的選擇,因為它們仍然必須與查詢優化器互動,因此它們只能表達與其架構兼容的語義。甚至像 T-SQL 這樣的“過程”SQL 方言實際上也會向優化器發出多個查詢。由於與查詢優化器架構的緊密耦合,SQL 總是會以這種方式受到限制。
許多 DBMS 平台支持儲存過程的替代語言,例如 Oracle 中的 JVM、SQL Server 中的 CLR 集成以及 PostgreSQL 中的各種嵌入式語言。這些允許您編寫程式碼,支持到 DBMS 的快速本地連接,並且(在某些情況下)與數據庫管理器中的 API 集成。這些 API 讓您可以編寫自定義聚合函式和其他擴展。
但是,除非確實有必要,否則有充分的理由不將其用於非 SQL 應用程式碼,尤其是在 Oracle 的情況下。三個主要原因是:
- 當程式碼以這種方式嵌入 DBMS 時,通常很難調試程式碼。
- 這種類型的程式碼沒有標準的 API。它是高度不可移植的,並且與 DBMS 緊密耦合——您甚至沒有跨平台的語言選擇相同。您必須為您打算支持的每個 DBMS 平台編寫和維護一個單獨的子系統。
- 您正在為用於執行程式碼的 CPU 容量支付 DBMS 許可費用。就 Oracle 而言,DBMS 許可證可能比執行它的硬體貴一個數量級。
通常,僅在絕對必要的應用程序中使用 DBMS 中的嵌入式程式碼才是明智的。
另一種選擇:OODBMS 平台
一些 OODBMS 平台(例如Gemstone/S)旨在支持緊密耦合的 OO 語言,並且系統旨在像這樣執行。然而,在 Gemstone/S 的情況下,系統與一組有限的語言緊密耦合,主要是 Smalltalk。
然而,Gemstone/S VM 已經足夠好,以至於有人甚至移植了 ruby 並通過一個名為maglev 的項目在其上執行。. 這可能會讓你更接近你想要的,但它需要你移動到一個特定的平台。