為可移植性設(shè)計(jì)應(yīng)用程序 |
發(fā)布時(shí)間: 2012/8/30 17:30:14 |
因?yàn)椴煌?span style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px">SQL服務(wù)器實(shí)現(xiàn)了標(biāo)準(zhǔn)SQL的不同部分,需要花功夫來(lái)編寫可移植的SQL應(yīng)用程序。對(duì)很簡(jiǎn)單的選擇/插入,很容易實(shí)現(xiàn)移植,但是需要的功能越多則越困難。如果想要應(yīng)用程序?qū)芏鄶?shù)據(jù)庫(kù)系統(tǒng)都快,它變得更難!
為了使一個(gè)復(fù)雜應(yīng)用程序可移植,你需要選擇它應(yīng)該工作的SQL服務(wù)器,并確定這些服務(wù)器支持什么特性。
所有數(shù)據(jù)庫(kù)都有一些弱點(diǎn)。這就是它們不同的設(shè)計(jì)折衷導(dǎo)致的不同行為。
可以使用MySQL的crash-me程序來(lái)找出能用于數(shù)據(jù)庫(kù)服務(wù)器選擇的函數(shù)、類型和限制。crash-me并不能找出所有的特性,但是其廣度仍然很合理,可以進(jìn)行大約450個(gè)測(cè)試。 電腦維護(hù)www.boydavid.com crash-me可以提供的一種類型的信息的例子:如果想要使用Informix或DB2,不應(yīng)該使用超過18個(gè)字符的列名。
crash-me程序和MySQL基準(zhǔn)程序是獨(dú)立于數(shù)據(jù)庫(kù)的。通過觀察它們是如何編寫的,編可以知道必須為編寫?yīng)毩⒂跀?shù)據(jù)庫(kù)的應(yīng)用程序做什么;鶞(zhǔn)本身可在MySQL源碼分發(fā)的“sql-bench”目錄下找到。它們用DBI數(shù)據(jù)庫(kù)接口以Perl寫成。使用DBI本身即可以解決部分移植性問題,因?yàn)樗峁┡c數(shù)據(jù)庫(kù)無(wú)關(guān)的的存取方法。 關(guān)于crash-me結(jié)果,訪問http://dev.mysql.com/tech-resources/crash-me.php。到http://dev.mysql.com/tech-resources/benchmarks/看這個(gè)基準(zhǔn)的結(jié)果。
如果你為數(shù)據(jù)庫(kù)的獨(dú)立性而努力,需要很好地了解每個(gè)SQL服務(wù)器的瓶頸。例如,MySQL在檢索和更新MyISAM表記錄方面很快,但是在同一個(gè)表上混合慢速讀者和寫者方面有一個(gè)問題。另一方面,當(dāng)你試圖訪問最近更新了(直到它們被刷新到磁盤上)的行時(shí),在Oracle中有一個(gè)很大的問題。事務(wù)數(shù)據(jù)庫(kù)總的來(lái)說(shuō)在從記錄文件表中生成總結(jié)表方面不是很好,因?yàn)樵谶@種情況下,行鎖定幾乎沒有用。 計(jì)算機(jī)愛好者www.boydavid.com 為了使應(yīng)用程序“確實(shí)”獨(dú)立于數(shù)據(jù)庫(kù),需要定義一個(gè)容易擴(kuò)展的接口,用它可操縱數(shù)據(jù)。因?yàn)?span style="padding-right: 0px; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px">C++在大多數(shù)系統(tǒng)上可以適用,使用數(shù)據(jù)庫(kù)的一個(gè)C++ 類接口是有意義的。 電腦常識(shí)www.boydavid.com 如果你使用某個(gè)數(shù)據(jù)庫(kù)特定的功能(例如MySQL專用的REPLACE語(yǔ)句),應(yīng)該為SQL服務(wù)器編碼一個(gè)方法以實(shí)現(xiàn)同樣的功能。盡管慢些,但確允許其它服務(wù)器執(zhí)行同樣的任務(wù)。 本文出自:億恩科技【xuefeilisp.com】 服務(wù)器租用/服務(wù)器托管中國(guó)五強(qiáng)!虛擬主機(jī)域名注冊(cè)頂級(jí)提供商!15年品質(zhì)保障!--億恩科技[ENKJ.COM] |