討論:應不應該用存儲過程?

討論:應不應該用存儲過程?

事情起因於羣裏轉發一篇文章《爲什麼阿里巴巴禁止使用存儲過程?

作者用自己的親身經歷講解存儲過程維護的不方便。

然後大家討論存儲過程的優勢和缺點。

 

引子:存儲過程

大白:存儲過程在很多場景時有其優勢,比如性能。但對於業務邏輯的通用方法,非常不推薦將其寫在存儲過程中,代碼複用、擴展與客戶端語言比,相差甚遠。也許終究能實現,但代價與風險比客戶端語言要高,得不償失。

花也花不完:我的想法是可以用,分場景

如果應用的當,省時省力

我用的比較多

主要是性能是第一,依據自身去控制

 

Steven:用起來,比較難控制,把握度

曾經在做ERP的時候把整個計劃翻單用存儲過程實現

然後沒有人能改,牽扯表太多,邏輯有太複雜,那時候有些炫SQL的感覺,現在想來比較坑人

後來項目,部長禁止存儲過程

 

康利山:現在很多公司, 是一刀切, 不讓用不是說這個東西不好, 只是大家場景可能用不熟導致安全問題

 

Steven:如果人員變化比較頻繁,存儲過程的確會增加業務理解時間,相對於犧牲些速度,也不是很在意了吧。寫不好,速度反而更慢。寫得好,自然是省事、省力

 

花也花不完:

不是這樣你們是要性能還是要可讀,想好

存儲過程,對他限制,一定是沒有能力去駕馭

不能怪存儲過程

一個存儲過程4000多行代碼,我寫過,解決了20TB數據的處理時間有原來8小時壓縮到7分鐘處理好

存儲過程是一個雙向的,關鍵是看你怎麼去用好和管理好,性能是一個坎

 

場景:低延遲

kimmking:高效低延遲,一定是數據和計算放到一起,遠古時代是存儲過程。現代則是redis+lua,voltdb/hazelcast+java這種。我們叫 數據親密性 data affinity。

看你要啥,一般情況,確實沒必要用存儲過程

存儲過程,即不好編寫,也不好調試,不適合大規模的業務系統協作開發

早期像銀行核心的業務就沒幾個人懂,都是年紀大的老專家(中醫,劃掉),他們寫好存儲過程,外面用什麼東西封裝起來,變成指令,給前置系統調用就成了。這樣,核心是穩定的,業務也是二十年不變的。

現在的互聯網,上午定的需求,下午就不行了,你得敏捷。

 

花也花不完:找我,我可以玩轉它

 

kimmking:哈,,,所以,企業需要的不是一個能搞定它的專家,而是一幫搬磚的,也能一起幹活。

這叫軟件開發的分佈式。

就像我們用廉價pc的集羣,去代替小機,mainframe,高端存儲。

 

smith :

深度綁定了oracle 要換其他數據庫很難

 

kimmking:

一樣,我第一份工作是用的db2

10來年前,每年license2000-3000萬,單位一旦過幾年培養了一批db2專家,就直接去了IBM的DB2團隊。

 

康利山:這差距也太大了吧

 

kimmking:

可以預期,存儲過程裏,可以用cursor一點點往前走,又拋去了網絡開銷

 

花也花不完:

 有一種東西交工具化,我不相信人可以一直堅持下去,讓程序去做吧,該放手了

 

kimmking: 肯定在數據量大的時候,會快。

也是工具化,只是工具不同,

一般企業級開發,提倡快速開發框架RDP,半成品的腳手架之類的

 

花也花不完:

有空了,我們聊聊,我給你看看黑科技

 

kimmking:

說個關鍵詞看看

 

vonneumann:

很多現代工程實踐和設計理念確實沒法做在存儲過程裏 太難管理了

 

kimmking:

我一直搞核心系統,低延遲交易我比較關注,這一塊的黑科技,大概就是SPDK,RDMA,PM之類的

繞過操作系統通信,硬件加速,持久化內存。

 

花也花不完:

不知道怎麼說了,就像c++一樣,沒有幾人能玩轉了

 

花也花不完:

在說存儲過程好,估計有人要打我了

 

韓錚 vonneumann:

說極限場景意義不大哈 畢竟不是單打獨鬥 有幾個人能用存儲過程搞70倍性能優化

 

具體的幾個技術

kimmking:

redis支持lua,大家知道吧

redis看做數據庫,然後做點簡單的計算,丟一段lua腳本給redis server,他算完了給你結果。

避免了大量的trip round

hazelcast,內存網格,支持動態的給一些類,同步到內存數據節點,計算完了給你結果,可以分佈式的做聚合

voltdb更牛逼了,內存+關係數據庫,作者是圖靈獎獲得者,數據庫領域宗師,直接支持用java寫“存儲過程”

 

花也花不完:

接近內核運算

 

田浩沛:

8小時這麼快?以前SAP有個系統出報表要7天,客戶居然習慣的

 

kimmking:

我們去年上半年系統的調研和POC過,voltdb真心nb

 

花也花不完:

越貼進內核運算,是越好的,其它的就是概念

 

kimmking:

綁定cpu,cache對齊

低延遲的核心要素就是,離cpu能有多近就多近,離io能有多遠就多遠

 

vonneumann:

存儲過程不是不好 是太容易被誤用

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章