Google Search

自訂搜尋

2009年7月4日 星期六

[PL/SQL] 動手開發PL/SQL專案前的第一步

PL/SQL, 這個在 Oracle 世界中最適合做資料處裡的開發工具. 素以執行效率佳, 和 Oracle 整合度高, 開發簡單廣受開發人員喜愛. 但是開發簡單後面的涵義是: 程式開發的品質如何控制? 品質涵蓋的層面很廣, 符合使用者需求, 效能好和程式的可維護性! 這一期的Oracle雜誌,PL/SQL Guru - Steven Feuerstein 發表一篇文章談到,一個PL/SQL開發團隊從哪幾個點切入可以有效控制程式品質和達到使用者需求, 在第一時間就將後續的開發架構架構好!

1. Correct:符合使用者需求
這裡談到的是正確性,所謂正確性就是正確的達到使用者的需求,當然一大半是需求&系統分析的事情,這裡Oracle管不著. 但是使用者的需求瞭解後,開發人員如何確定程式有做到該做的事呢? 單元測試在當中扮演一個重要的角色,多數開發團隊會要求開發人員在程式開發完後提交單元測試報告,但是單元測試多由開發人員自行定劇本自行測試,涵蓋度和正確度如何無從得知?這時所謂的自動化測試(Automated regression test)就是一個重要的工具. 坊間常見的工具有 utPLSQL, PLUTO, PL/Unit, DBFit, Quest Code Tester. 這些工具的產品網址都在連接中,另外除了最後一個是要錢以外,其他看了都是Open Source的,大家有興趣可以試試! 哪天也要自己的team試試,再將結果PO出來!

2. Fast Enough:效能好
  • Optimizing Compiler
    可參考以下文件有詳細說明. 在10G 後就有這項功能, 主要目的在提升PL/SQL在 runtime的效能. 而做法則是在 compile時, 使用不同的優化(Optimization)手段. 它是透過以下參數去控制,"PLSQL_OPTIMIZE_LEVEL".
  • Bulk processing
    透過此工具, 將原始一筆一筆的處理方式轉換為多筆批次處理. 這篇文章對效能的提升有一些實驗和驗證(該文章號稱有三十倍快).
  • Pipelined table function
    允許不同的 PL/SQL 間的資料傳遞不必受限於僅只傳遞參數而可以傳遞 ResultSet並且不用額外建立Table. 尤其在 ETL程式裡, 資料不必透過實體Table處理而是直接透過 Pipelined table傳遞, 對效能有一定的助益. 可以參考這篇文章.
  • Function result cache
    可以參考這篇文章, 有完整的介紹. 簡短的說, function result cache的好處在, 當主程式呼叫另外的 PL/SQL function時, 這個 PL/SQL function可能含 SQL. 這會造成所謂的 Context Switch和 IO的增加. 因此 function result cache可以透過語法(Create function XXX (I1 varchar2) return varchar2 Result_Cache is) 設定將該 PL/SQL function的結果快取(Cached)起來, 加快處理速度.
  • Native compilation
    參考"Optimizing Compiler"的文章, 所謂 Native Compilation就是將PL/SQL編譯成 C語言, 直接和Oracle整合, 效能較佳.
3. Maintainable:程式的可維護性
  • Naming conventions & Syntax standards
    變數和程式名稱的命名規則應該都要有文件作規範.
  • Writing SQL in PL/SQL
    SQL的產生應該有一個獨立的Data Access Layer而不是任由開發人員在PL/SQL中 Hardcode. 透過這個Layer, 將SQL的複雜邏輯隱藏起來,以利後續的維護和開發.
  • Error Management
    統一的 Error Handling 機制和模組.
  • Application Tracing
    統一的tracing 機制和模組,可參考文章.
  • Version control and backups
    版本備份, 我的團隊是用 Daily 從 Metadata中備份PL/SQL至檔案中, 以利未來查詢之用.
上面談的規矩都是規矩, 開發人員是否遵守又是另外一件事情?這時候適時的 Code review是有必要的,確認開發人員有確實遵守規定.
在你組成PL/SQL開發團隊前, 可以將上述的建議當成 Check List來確認開發團隊是否可以正確開發出快速且維護性高的系統.