打開帖子直接一張醒目的圖,是阿里巴巴的Java開發手冊對Mysql相關的要求。
看看下面的回復
靈劍
這也不絕對,在微軟的時候就有項目是反過來的,所有業務都需要用存儲過程寫在SQL Server里面,查詢全寫成視圖,業務代碼只允許使用視圖和存儲過程,只要SELECT和EXECUTE權限就夠了;修改業務只需要登服務器改存儲過程。這屬於思路不同。
任何技術都要分使用場景,阿里這種互聯網高並發的場景,很多數據都是分庫分表的,而且要求高度可擴展,原則是對db的保護做到最大化,能減少db壓力的就減少db壓力,盡量把運算邏輯拉到代碼里面。存儲過程的優點在於封裝性好,直接讓db進行運算,但是缺點在於難以維護,而且大大增大db壓力。所以開發過程中禁止使用存儲過程也是阿里多年經驗積累出來的。
孤盡[《阿里巴巴JAVA開發手冊》主要作者]
解釋一下這個事情:曾經寫過近1200行的存儲過程,沒有辦法斷點,下層數據結構只是稍微變動,根本無法找到出錯點,只是提示一下說:ERROR:1064啥的。在數據庫遷移的時候,由於數據庫版本變更,居然存儲過程無法執行。另外,業務上需要擴展一下,那就是災難性的啊。沒想到,我覺得毫無爭議的這一條,反而成了一個最大的爭議點。存儲過程只是單機時代的產物,並不適合互聯網時代。
陳曦
小公司還好,大公司對db把控很嚴格。分別說下:調試:線上調試一般就是打日志,在應用層,日志可以在任何一步打,但是存儲過程的話,日志沒法跟蹤詳細的執行過程。擴展:譬如你的 產品購買流程 要增加一個動作,這時候就要修改存儲過程到db里,你這時候要直接操作db,而在大公司,直接操作db只能有dba來進行,其他都要審批后使用公司自己開發的工作來進行,且只能是簡單的crud。移植:你用mysql寫的存儲過程,到了sqlserver不一定能直接用。但是在應用層的話,程序里的crud的基礎sql基本上通用的,修改下連接串一般就ok了。
........
原貼地址:知乎地址