1. 程式人生 > >引用靜態資源時加上時間戳,處理瀏覽器緩存問題

引用靜態資源時加上時間戳,處理瀏覽器緩存問題

文字 sql 語句 流量 命令 訂餐系統 5% 文章 教程 res

參考其他文章列舉存儲過程的優劣,據此分析目前智慧電站總項目下,還有那些地方的數據庫操作,適合使用存儲過程進行優化。

存儲過程是什麽?

儲存程序 (Stored Procedure),又可稱預儲程序或者存儲過程,是一種在數據庫中存儲復雜程序,以便外部程序調用的一種數據庫對象,它可以視為數據庫中的一種函數或子程序。——維基百科

可以理解為數據庫中的函數過程。

存儲過程的優勢

就我在項目中實際使用來說,當前臺處理涉及多條數據庫查詢語句操作,並出現臨時表需整合多個表篩選多余信息的情況下使用到了存儲過程。並且發現在數據庫中寫一個存儲過程,web端、移動端以及桌面端都可以調用。

引用自微軟文檔-存儲過程(數據庫引擎)

減少了服務器/客戶端網絡流量

過程中的命令作為代碼的單個批處理執行。這可以顯著減少服務器和客戶端之間的網絡流量,因為只有對執行過程的調用才會跨網絡發送。 如果沒有過程提供的代碼封裝,每個單獨的代碼行都不得不跨網絡發送。

更強的安全性

  • 多個用戶和客戶端程序可以通過過程對基礎數據庫對象執行操作,即使用戶和程序對這些基礎對象沒有直接權限。 過程控制執行哪些進程和活動,並且保護基礎數據庫對象。 這消除在了單獨的對象級別授予權限的要求,並且簡化了安全層。
  • 在通過網絡調用過程時,只有對執行過程的調用是可見的。 因此,惡意用戶無法看到表和數據庫對象名稱、嵌入自己的 Transact-SQL 語句或搜索關鍵數據。
  • 使用過程參數有助於避免 SQL 註入攻擊。 因為參數輸入被視作文字值而非可執行代碼,所以,攻擊者將命令插入過程內的 Transact-SQL 語句並損害安全性將更為困難。
  • 可以對過程進行加密,這有助於對源代碼進行模糊處理。

代碼的重復使用

任何重復的數據庫操作的代碼都非常適合於在過程中進行封裝。這消除了不必要地重復編寫相同的代碼、降低了代碼不一致性,並且允許擁有所需權限的任何用戶或應用程序訪問和執行代碼。

更容易維護

在客戶端應用程序調用過程並且將數據庫操作保持在數據層中時,對於基礎數據庫中的任何更改,只有過程是必須更新的。 應用程序層保持獨立,並且不必知道對數據庫布局、關系或進程的任何更改的情況。

改進的性能

默認情況下,在首次執行過程時將編譯過程,並且創建一個執行計劃,供以後的執行重復使用。 因為查詢處理器不必創建新計劃,所以,它通常用更少的時間來處理過程。

存儲過程的劣勢

很多文章提到存儲過程的可移植性差:

由於存儲過程將應用程序綁定到 SQL Server,因此使用存儲過程封裝業務邏輯將限制應用程序的可移植性。如果應用程序的可移植性在您的環境中非常重要,則將業務邏輯封裝在不特定於 RDBMS 的中間層中可能是一個更佳的選擇。

但目前項目,是確認綁定在SQL Server數據庫中,不會輕易更改,可移植性不是考慮的重點。

適用範圍

依據存儲過程的優勢,目前可以封裝成存儲過程的幾個數據處理:

  • 訂餐系統中的提交操作
    【遇到問題】之前在做這一功能時,就受限於提交多個表增、刪、改的順序以及完成狀態,利用php多次判斷數據操作的執行狀態的方式不僅繁瑣,而且進行到其中一步發生錯誤,還需要把前面的數據操作撤銷,不影響該次訂餐操作性質。
    【解決當時】封裝為存儲過程,利用數據庫本身的邏輯控制,一次性提交執行一次訂餐提交操作。

更多文章可以來我的個人博客裏面看到

歡迎來訪:綿綿小站

參考文章

    • 存儲程序-維基百科
    • 微軟文檔-存儲過程(數據庫引擎)
    • 存儲過程作用是什麽,優缺點以及適用範圍是什麽?
    • 關於存儲過程的優缺點
    • 存儲過程優缺點

引用靜態資源時加上時間戳,處理瀏覽器緩存問題