網頁設計與SQL本質關係
SQL語句又叫ad hoc SQL, ad hoc是拉丁語,意思是for this,可以翻譯為“按每一次情況的辦理”。
存儲過程就是stored procedure, 簡寫為sp。
ORM就是物件-關係對應,比如Hibernate。
大多數的網頁設計程式都是會圍繞SQL伺服器展開,經常要面臨在這些技術間進行選擇。所以我們需要來理解這些技術的本質。
一,演變
剛開始的時候,只有SQL語句,即可以用交互模式一句一句執行, 也可以用批模式執行,多行SQL語句一次提交執行。
很快人們發現用批模式執行的一堆SQL語言可以用過程的形式,事先存放到資料庫裏面,這就變成了存儲過程。
隨著面向物件技術的成熟,從程式中可以自動生成SQL語句,這就是ORM。
二,性能
很多人會說存儲過程比SQL語句性能好,其實這個說法並不精確。
如果我們把一堆SQL,以批的方式一次送入到伺服器,那麼伺服器,會對這一堆SQL進行緩存,當下一次再度執行的時候,就好像調用一個”匿名“的存儲過程一樣。
在這種情況下,性能差不多。
但是,如果我們不注意,很有可能,把可以一次提交的SQL,變成了多次提交,甚至是每個迴圈做了一次提交,那麼性能就很差了。
也就是說如果使用SQL,只要寫法得當,性能和sp區別不大。
同樣的道理,ORM的性能取決於ORM的SQL生成演算法, 和用戶使用的時候,對生成演算法的控制,比如利用好Lazy laoding等,在某些情況下,甚至可以不通過SQL,畢竟沒有SQL比最優化的SQL還要快。
三,可維護性
可維護性是選擇SQL,sp,orm最主要的因素。
這裏面有點”玄“,因為不同的場景會得出不同的結論,俗稱“It depends"。
剛開始的時候,SQL的維護性看起來是最差,因為它往往散佈在程式的每個角落。而存儲過陳都放在資料庫中,有清晰介面。
但是如果我們做一次重構,情況居然會顛倒過來。
首先,存儲過程完全可以照搬到C#中,sp的名字直接變成method的名字,sp的參數表直接變成method的參數表,(其實就是Command模式)。
其次,把這些methdod放到一個檔或者檔夾中。(所謂的DAL層,如果喜歡層的話)
通過這個重構,我們獲得了以下的好處:
1,首先是過程的調用和過程的定義放到了一起,修改起來比較方便。IDE都有定義跳轉功能。
2,過程的調用和定義同時進行版本控制,不會出現不匹配的情況。減少了sp的參數表和調用的不匹配,包括拼寫,類型,參數次序
3,單元測試非常方便
當然sp也有存在的價值,比如所謂的安全性,後面會提到。比如友好的調試環境,對於中小型項目,和初級程式師來說,也是很好的選擇。
ORM則將可維護性提升身到了一個新的高度,它試圖將SQL遮罩起來,在操作物件的同時,自動就把資料庫的事情給辦了。
ORM有兩種模式,一種是ActiveRecord, 一種是Datamapper,前者從資料庫中讀取定義,後者在程式中定義。不過由於前者往往用migration來生成資料庫,其實也是定義在程式裏面的。好的ORM都有"leaking"的設計,也就是留了個”後門“,讓你有機會用SQL來控制。
微軟的linq從某個角度類說,也是一種ORM, 它的設計思想可能是因為它覺得寫SQL語句比寫c#程式碼效率高,所以提供直接在C#中寫SQL語句的機制,再自動生成真正的SQL。不過,ORM真正價值在於它可以在恰當的時候,完全拋棄SQL,比如比如讀用cache,寫用queue。而微軟的linq,完全是“無厘頭”的風格,在O中用R的寫法,難道是RRM, 唯一的好處只是鎖定程式和程式師在微軟的平臺上。
四,安全性
對企業來說,安全性有的時候比性能更重要,由於存儲過程在資料庫上多加了一道屏障,所以很多企業會把存儲過程作為首選。
ORM可以說是安全性最差的, 因為只有到程式運行起來,你才能知道,會產生什麼樣的SQL。
但是保證安全有許多方法和方面,比如部署前的測試, 資料庫的備份,對表的許可權的設置。等。用sp來保證安全,只是多個選項中的一個。
在startup型企業中,高級程式師往往起到主導作用, 所以他們會不猶豫的選擇ORM。
在傳統企業中,如果DBA或者技術主管比較強勢,往往會採用sp。
轉貼來源:網頁設計知識部落格
參考文獻:
1.王樂成、林祐聖、葉欣怡(譯)(2002 )。James Slevin 著。網際網路與社會,(Internet and society)。台北:弘智。
2.石恩綸(2000)。女性網路使用者的網站印象與網路使用行為。台北大學企業管例研究所碩士論文,未出版,台北。
3.江嘉瑜(2002)。台灣花卉電子商務網站內容之分析。中興大學行銷學研究所碩士論文,未出版,台中。
相關文章
進化網頁設計的程式碼架構佈置如何對網頁設計精進求精,或這樣的得過且過?規劃分析網頁設計的架構應用負載均衡的網頁設計技術面對網頁設計的分析方法
最新文章
HVACKer:入侵隔離網絡的新型攻擊技術還有什麼不會被入侵?路由器 LED 燈已成為攻擊入口美 5 家獨角獸同天申請 IPO 掛牌,最狂的是一家估值 124 億美的數據分析新創!【台灣「智慧產業」開始佈局】緯創集團領投跨國 AI 新創 iKala,下一步拓展東南亞市場快可以用手機遠端遙控你的所有家電了