數(shù)據(jù)庫存儲過程的作用是什么 為什么阿里巴巴Java開發(fā)手冊里要求禁止使用存儲過程?
為什么阿里巴巴Java開發(fā)手冊里要求禁止使用存儲過程?存儲過程,最早的概念據(jù)我推斷是來自于Oracle,最早oracle是只有函數(shù)的概念,依稀記得是oracle8還是9才加的存儲過程package的概
為什么阿里巴巴Java開發(fā)手冊里要求禁止使用存儲過程?
存儲過程,最早的概念據(jù)我推斷是來自于Oracle,最早oracle是只有函數(shù)的概念,依稀記得是oracle8還是9才加的存儲過程package的概念,用于解決函數(shù)過于碎片化、不具備復(fù)雜的多邏輯功能,同時便于文件管理加入的概念。到后期基本所有數(shù)據(jù)庫也都有了存儲過程,如:mysql,sybase等。
存儲過程是基于數(shù)據(jù)庫底層的語法,與數(shù)據(jù)庫是相互依存的,且各個類型數(shù)據(jù)庫語法都不一樣。
Java語言在很大一部分的優(yōu)勢就是為了解耦合和可移植性,所以也有經(jīng)典的dao模式,目的也就是把數(shù)據(jù)庫和業(yè)務(wù)層分開。如果直接調(diào)用存儲過程,混淆了業(yè)務(wù)和數(shù)據(jù)庫分層,打破了Java模式設(shè)計的初衷。而且,如果用存儲過程寫,比如原來用Oracle數(shù)據(jù)庫,現(xiàn)在客戶要求改成免費(fèi)的Mysql數(shù)據(jù)庫,意味著基本所有的存儲過程全部要重寫,基本不具備可移植性。
當(dāng)然,萬事沒有絕對。阿里的整套體系龐大,數(shù)據(jù)庫的能力強(qiáng)大,中間件的主機(jī)也足夠橫向擴(kuò)展。像我們一般的項目沒那么多的主機(jī)和算力可搭配,有時碰上復(fù)雜的報表或復(fù)雜的邏輯,也不得不借用數(shù)據(jù)庫存儲過程來實(shí)現(xiàn)。
一般來說,項目上數(shù)據(jù)庫主機(jī)的配置比web主機(jī)相對強(qiáng)大得多,且存儲過程在數(shù)據(jù)庫操作邏輯上天然的快,在web主機(jī)不能橫向擴(kuò)展的情況下,也只能借用存儲過程來實(shí)現(xiàn)。當(dāng)然,用存儲過程來處理也是占比很少,逼不得已情況下才使用。
存儲過程的作用是什么?
存儲過程是一組予編譯的sql語句
它的優(yōu)點(diǎn):1.允許模塊化程序設(shè)計,就是說只需要創(chuàng)建一次過程,以后在程序中就可以調(diào)用該過程任意次。
2.允許更快執(zhí)行,如果某操作需要執(zhí)行大量sql語句或重復(fù)執(zhí)行,存儲過程比sql語句執(zhí)行的要快。
3.減少網(wǎng)絡(luò)流量,例如一個需要數(shù)百行的sql代碼的操作有一條執(zhí)行語句完成,不需要在網(wǎng)絡(luò)中發(fā)送數(shù)百行代碼。
4.更好的安全機(jī)制,對于沒有權(quán)限執(zhí)行存儲過程的用戶,也可授權(quán)他們執(zhí)行存儲過程。