儲存過程不好在哪裡?

banq發表於2024-07-05

儲存過程是資料庫中最受詬病的元素之一。

儲存過程聽起來不錯:

  • 在資料庫內執行應用程式邏輯,避免應用程式和資料庫伺服器之間不必要的往返和通訊開銷。
  • 而且效能提升是真實的,可將複雜事務的延遲降低 2 倍以上。

那麼為什麼每個人都討厭它們呢?
問題是儲存過程對開發人員非常不友好。

  • 它們必須用一種特殊的語言編寫,通常是 PL/SQL 的方言。
  • 它們必須與其他程式碼分開管理和部署。因為它們在資料庫伺服器中執行,所以很難除錯或測試。
  • 由於儲存過程標準在資料庫之間有所不同,因此會導致死鎖。

雖然它們曾經很受歡迎,但開發人員已經意識到儲存過程雖然帶來好處,但是不值得為此付出代價。


網友:

  • 儲存過程面臨的最大挑戰之一:就是日誌記錄。
  • 儲存過程的另一個問題是:分片或分散式系統的問題
  • 儲存過程的另一個問題:如何處理故障情況,包括邏輯故障(違反約束)和意外故障(死鎖、其他瞬時錯誤)。 對於任何非瑣碎的事情,它很快就會變得一團糟,尤其是當你出於效能考慮而試圖這樣做的時候。

Postgres 中,你可以用幾十種不同的語言編寫儲存過程,包括編譯過的語言(如果你喜歡的話),比如 Java。 有工具可以測試它們,而且可以在資料庫之外進行測試和除錯。

可以使用 Flyway 或 Liquibase 等遷移工具進行部署。 使用 Oracle 時,可使用 utPLSQL 進行測試。

儲存過程最初似乎很吸引人,但將其用於非瑣碎的任務通常會在若干年後帶來巨大的痛苦。 將應用邏輯拆分成接近資料庫執行的微服務會更容易。 選擇你喜歡的語言、CI/CD、git 等。

Oracle DB 提供: 編譯 PL/SQL、批次 DML、並行查詢/DML、結果快取、UDF、SQL Transpiler、OJVM、JavaScript!

不可否認的是,我看到過一些系統因為儲存過程而存活了很長時間(10 多年),而周圍的應用程式卻更換了好幾次。

這就是我們提供更自然的語言來編寫資料庫邏輯的原因。

 

相關文章