推薦:數(shù)據(jù)庫時代的終結意味著什么?
數(shù)據(jù)庫是否會有終結的一天,假設有,那么數(shù)據(jù)庫的終結又意味著什么那?下文中就是帶領大家從一段講述開始,希望下文中講到的內(nèi)容對大家能夠有所幫助。
說實話,作為一名想在數(shù)據(jù)庫此領域長期發(fā)展的DBA,聽到這種聲音很吃驚,當然也不能茍同。
以數(shù)據(jù)庫為核心的軟件時代已經(jīng)過去,數(shù)據(jù)庫時代早已結束,當我看到J2EE征途中那么多人在對象和數(shù)據(jù)庫之間彷徨痛苦ing的時候,我想我該出來喊一聲了。
其實這句話在幾年前肯定有人喊過,因為中間件時代的來臨,實際意味著數(shù)據(jù)庫時代終結,正所謂一山無二虎:如果你重視數(shù)據(jù)庫,你的J2EE系統(tǒng)就無法完全面向?qū)ο?,只有你忽視?shù)據(jù)庫,你的系統(tǒng)才有可能完全邁向面向?qū)ο?,至于?shù)據(jù)庫性能調(diào)優(yōu)等特定功能都可交由EJB容器或O/R Mapping工具實現(xiàn)。
很多年前,包括我自己在內(nèi)的大部分企業(yè)程序員都是從數(shù)據(jù)庫開始我們的職業(yè)生涯,最早的是dBase/FoxPro,后來有了 SQL系列數(shù)據(jù)庫, Oracle將數(shù)據(jù)庫時代推向了頂峰。
每當有一個新項目時,第一步就是首先設計出數(shù)據(jù)表結構(Table Schema),然后開始使用SQL語句實現(xiàn)業(yè)務邏輯,這種開發(fā)模式一直重復,就是后來加入了DelPhI/VB,他們也只是承擔圖形顯示實現(xiàn),這種C/S結構帶來最大問題是:非常難于維護,修改起來,遷一動百。
軟件的生命在于運動,當它需要發(fā)展時,最棒的軟件人員如果對他也束手無策,這是誰的悲哀?
現(xiàn)在更多人開始接受B/S結構,但是他們中很多人還沒有真正明白為什么需要B/S結構,B/S代表的多層架構才是真正目的(因此,偽多層的B/S系統(tǒng)遍地皆是)。
多層架構實際是將以前系統(tǒng)中的顯示功能、業(yè)務運算功能和數(shù)據(jù)庫功能完全分開,杜絕彼此的耦合與影響,從而實現(xiàn)松耦合和良好的可維護性。
一. 從設計上說:由于實現(xiàn)層次完全分離,業(yè)務運算功能成為一種中間功能(中間層),它不依賴具體的表現(xiàn)層技術(Jsp/Html applet等),也不依賴具體數(shù)據(jù)庫技術(Oracle/SQL Server),業(yè)務運算功能運行在J2EE應用服務器中,當我們的業(yè)務運算功能不再依賴數(shù)據(jù)庫時,是否意味著數(shù)據(jù)庫已經(jīng)不是重點?
二. 當然,多層結構帶來了性能問題:客戶端訪問數(shù)據(jù)庫中的數(shù)據(jù)時,通常需要經(jīng)過多個層次,非常耗費性能, 如何盡量減少數(shù)據(jù)庫訪問是J2EE應用系統(tǒng)首要解決的問題,使用存儲過程并沒有解決這個問題,存儲過程的執(zhí)行還是屬于后端,并沒有縮短客戶端請求所要經(jīng)歷的坎坷路途。
解決性能問題的根本解決之道是使用對象緩存,現(xiàn)在, 64位CPU提供的巨大內(nèi)存空間為單臺緩存計算提供了硬件基礎,更重要的是,這種緩存計算是可伸縮的,通過集群的緩存機制(如JBossCache), 通過增加應用服務器的數(shù)量,可以提高整個業(yè)務邏輯層的緩存計算能力,拋棄過去那種為內(nèi)存斤斤計較的老思維吧。
三. 在系統(tǒng)分析之初是否首先需要數(shù)據(jù)表設計呢?回答是否定的, 以UML為代表面向?qū)ο蟮姆治鲈O計方法已經(jīng)成為強大工具,隨著面向模型驅(qū)動分析設計(MDA)的普及, 面向數(shù)據(jù)庫分析方法正在逐步被拋棄,擁有深厚傳統(tǒng)數(shù)據(jù)庫分析習慣的程序員必須面對和接受這種挑戰(zhàn)。
縱觀整個J2EE系統(tǒng)開發(fā)過程,數(shù)據(jù)庫已經(jīng)從過去的中心位置降為一種純技術實現(xiàn),數(shù)據(jù)庫只是狀態(tài)持久化的一種手段(文件是另外一種實現(xiàn)手段);什么是持久化?這是相對于內(nèi)存緩存狀態(tài)而言,持久化就是當內(nèi)存斷電情況下能永久保存狀態(tài)數(shù)據(jù),但是如果J2EE應用服務器是7X24小時集群運行;幾乎永不當機,是否有持久化的必要呢?
很顯然,數(shù)據(jù)庫已經(jīng)淪為與操作系統(tǒng)中文件系統(tǒng)同樣的層面,以它為中心的時代真的結束了,IBM早期將DB2數(shù)據(jù)庫開源已經(jīng)強烈向我們昭示這點。
對于J2EE初學者來說,盡早拋棄過去的兩種影響:過程語言編程習慣和以數(shù)據(jù)庫為中心的設計習慣,從全新的面向?qū)ο蠼嵌?OOA、OOD和OOP、AOP)來設計開發(fā)你的J2EE系統(tǒng),J2EE設計開發(fā)三件寶:Model、Patterns和Framework。
以上不只是理論,而是我每天正在做的,如果你也是或贊同請廣為傳播,喚醒更多彷徨痛苦的初學者。相信大家通過了上文的閱讀之后,對數(shù)據(jù)庫有了更深一層的了解,希望大家都能夠從上文中涉及到的內(nèi)容中有所收獲。