隨筆-57  評(píng)論-202  文章-17  trackbacks-0

          數(shù)據(jù)庫時(shí)代的終結(jié)

          板橋里人 http://www.jdon.com 2005/04/28

            以數(shù)據(jù)庫為核心的軟件時(shí)代已經(jīng)過去,數(shù)據(jù)庫時(shí)代早已結(jié)束,當(dāng)我看到J2EE征途中那么多人在對(duì)象和數(shù)據(jù)庫之間彷徨痛苦ing的時(shí)候,我想我該出來喊一聲了。

            其實(shí)這句話在幾年前肯定有人喊過,因?yàn)橹虚g件時(shí)代的來臨,實(shí)際意味著數(shù)據(jù)庫時(shí)代終結(jié),正所謂一山無二虎:如果你重視數(shù)據(jù)庫,你的J2EE系統(tǒng)就無法完全OO,只有你忽視數(shù)據(jù)庫,你的系統(tǒng)才有可能完全邁向OO,至于數(shù)據(jù)庫性能調(diào)優(yōu)等特定功能都可交由O/R Mapping工具實(shí)現(xiàn)。

            很多年前,包括我自己在內(nèi)的大部分企業(yè)程序員都是從數(shù)據(jù)庫開始我們的職業(yè)生涯,最早的是dBase/FoxPro,后來有了 SQL系列數(shù)據(jù)庫, Oracle將數(shù)據(jù)庫時(shí)代推向了頂峰。

            每當(dāng)有一個(gè)新項(xiàng)目時(shí),第一步就是首先設(shè)計(jì)出數(shù)據(jù)表結(jié)構(gòu)(Table Schema),然后開始使用SQL語句實(shí)現(xiàn)業(yè)務(wù)邏輯,這種開發(fā)模式一直重復(fù),就是后來加入了DelPhI/VB,他們也只是承擔(dān)圖形顯示實(shí)現(xiàn),這種C/S結(jié)構(gòu)帶來最大問題是:非常難于維護(hù),修改起來,遷一動(dòng)百。

            軟件的生命在于運(yùn)動(dòng),當(dāng)它需要發(fā)展時(shí),最棒的軟件人員如果對(duì)他也束手無策,這是誰的悲哀?

            現(xiàn)在更多人開始接受B/S結(jié)構(gòu),但是他們中很多人還沒有真正明白為什么需要B/S結(jié)構(gòu),B/S代表的多層架構(gòu)才是真正目的(因此,偽多層的B/S系統(tǒng)遍地皆是)。

            多層架構(gòu)實(shí)際是將以前系統(tǒng)中的顯示功能、業(yè)務(wù)運(yùn)算功能和數(shù)據(jù)庫功能完全分開,杜絕彼此的耦合與影響,從而實(shí)現(xiàn)松耦合和良好的可維護(hù)性。

            一. 從設(shè)計(jì)上說:由于實(shí)現(xiàn)層次完全分離,業(yè)務(wù)運(yùn)算功能成為一種中間功能(中間層),它不依賴具體的表現(xiàn)層技術(shù)(Jsp/Html applet等),也不依賴具體數(shù)據(jù)庫技術(shù)(Oracle/SQL Server),業(yè)務(wù)運(yùn)算功能運(yùn)行在J2EE應(yīng)用服務(wù)器中,當(dāng)我們的業(yè)務(wù)運(yùn)算功能不再依賴數(shù)據(jù)庫時(shí),是否意味著數(shù)據(jù)庫已經(jīng)不是重點(diǎn)?

            二. 當(dāng)然,多層結(jié)構(gòu)帶來了性能問題:客戶端訪問數(shù)據(jù)庫中的數(shù)據(jù)時(shí),通常需要經(jīng)過多個(gè)層次,非常耗費(fèi)性能, 如何盡量減少數(shù)據(jù)庫訪問是J2EE應(yīng)用系統(tǒng)首要解決的問題,使用存儲(chǔ)過程并沒有解決這個(gè)問題,存儲(chǔ)過程的執(zhí)行還是屬于后端,并沒有縮短客戶端請(qǐng)求所要經(jīng)歷的坎坷路途。

            解決性能問題的根本解決之道是使用對(duì)象緩存,現(xiàn)在, 64位CPU提供的巨大內(nèi)存空間為單臺(tái)緩存計(jì)算提供了硬件基礎(chǔ),更重要的是,這種緩存計(jì)算是可伸縮的,通過集群的緩存機(jī)制(如JBossCache), 通過增加應(yīng)用服務(wù)器的數(shù)量,可以提高整個(gè)業(yè)務(wù)邏輯層的緩存計(jì)算能力,拋棄過去那種為內(nèi)存斤斤計(jì)較的老思維吧。

            三. 在系統(tǒng)分析之初是否首先需要數(shù)據(jù)表設(shè)計(jì)呢?回答是否定的, 以UML為代表面向?qū)ο蟮姆治鲈O(shè)計(jì)方法已經(jīng)成為強(qiáng)大工具,隨著面向模型驅(qū)動(dòng)分析設(shè)計(jì)(MDA)的普及, 面向數(shù)據(jù)庫分析方法正在逐步被拋棄,擁有深厚傳統(tǒng)數(shù)據(jù)庫分析習(xí)慣的程序員必須面對(duì)和接受這種挑戰(zhàn)。

            縱觀整個(gè)J2EE系統(tǒng)開發(fā)過程,數(shù)據(jù)庫已經(jīng)從過去的中心位置降為一種純技術(shù)實(shí)現(xiàn),數(shù)據(jù)庫只是狀態(tài)持久化的一種手段(文件是另外一種實(shí)現(xiàn)手段);什么是持久化?這是相對(duì)于內(nèi)存緩存狀態(tài)而言,持久化就是當(dāng)內(nèi)存斷電情況下能永久保存狀態(tài)數(shù)據(jù),但是如果J2EE應(yīng)用服務(wù)器是7X24小時(shí)集群運(yùn)行;幾乎永不當(dāng)機(jī),是否有持久化的必要呢?

            很顯然,數(shù)據(jù)庫已經(jīng)淪為與操作系統(tǒng)中文件系統(tǒng)同樣的層面,以它為中心的時(shí)代真的結(jié)束了,IBM早期將DB2數(shù)據(jù)庫開源已經(jīng)強(qiáng)烈向我們昭示這點(diǎn)。

            對(duì)于J2EE初學(xué)者來說,盡早拋棄過去的兩種影響:過程語言編程習(xí)慣和以數(shù)據(jù)庫為中心的設(shè)計(jì)習(xí)慣,從全新的面向?qū)ο蠼嵌?OOA、OOD和OOP、AOP)來設(shè)計(jì)開發(fā)你的J2EE系統(tǒng),J2EE設(shè)計(jì)開發(fā)三件寶:Model、Patterns和Framework

            以上不只是理論,而是我每天正在做的,如果你也是或贊同請(qǐng)廣為傳播,喚醒更多彷徨痛苦的初學(xué)者。

          posted on 2005-05-12 17:11 小米 閱讀(346) 評(píng)論(0)  編輯  收藏 所屬分類: Java
          主站蜘蛛池模板: 长沙市| 伊春市| 抚州市| 陆川县| 长葛市| 朝阳区| 新余市| 公安县| 连云港市| 鹤峰县| 施秉县| 屏边| 龙胜| 平潭县| 鄂伦春自治旗| 永靖县| 石屏县| 于田县| 安新县| 金塔县| 临江市| 延安市| 绵阳市| 金华市| 贵南县| 宜章县| 台东县| 石首市| 望奎县| 宝鸡市| 洪洞县| 施甸县| 前郭尔| 安吉县| 永顺县| 五华县| 阳曲县| 鄱阳县| 清流县| 平邑县| 罗田县|