為可移植性設計應用程序 |
發(fā)布時間: 2012/8/30 17:30:14 |
因為不同SQL服務器實現(xiàn)了標準SQL的不同部分,需要花功夫來編寫可移植的SQL應用程序。對很簡單的選擇/插入,很容易實現(xiàn)移植,但是需要的功能越多則越困難。如果想要應用程序對很多數(shù)據(jù)庫系統(tǒng)都快,它變得更難!
為了使一個復雜應用程序可移植,你需要選擇它應該工作的SQL服務器,并確定這些服務器支持什么特性。
所有數(shù)據(jù)庫都有一些弱點。這就是它們不同的設計折衷導致的不同行為。
可以使用MySQL的crash-me程序來找出能用于數(shù)據(jù)庫服務器選擇的函數(shù)、類型和限制。crash-me并不能找出所有的特性,但是其廣度仍然很合理,可以進行大約450個測試。 電腦維護www.boydavid.com crash-me可以提供的一種類型的信息的例子:如果想要使用Informix或DB2,不應該使用超過18個字符的列名。
crash-me程序和MySQL基準程序是獨立于數(shù)據(jù)庫的。通過觀察它們是如何編寫的,編可以知道必須為編寫獨立于數(shù)據(jù)庫的應用程序做什么;鶞时旧砜稍MySQL源碼分發(fā)的“sql-bench”目錄下找到。它們用DBI數(shù)據(jù)庫接口以Perl寫成。使用DBI本身即可以解決部分移植性問題,因為它提供與數(shù)據(jù)庫無關的的存取方法。 關于crash-me結果,訪問http://dev.mysql.com/tech-resources/crash-me.php。到http://dev.mysql.com/tech-resources/benchmarks/看這個基準的結果。
如果你為數(shù)據(jù)庫的獨立性而努力,需要很好地了解每個SQL服務器的瓶頸。例如,MySQL在檢索和更新MyISAM表記錄方面很快,但是在同一個表上混合慢速讀者和寫者方面有一個問題。另一方面,當你試圖訪問最近更新了(直到它們被刷新到磁盤上)的行時,在Oracle中有一個很大的問題。事務數(shù)據(jù)庫總的來說在從記錄文件表中生成總結表方面不是很好,因為在這種情況下,行鎖定幾乎沒有用。 計算機愛好者www.boydavid.com 為了使應用程序“確實”獨立于數(shù)據(jù)庫,需要定義一個容易擴展的接口,用它可操縱數(shù)據(jù)。因為C++在大多數(shù)系統(tǒng)上可以適用,使用數(shù)據(jù)庫的一個C++ 類接口是有意義的。 電腦常識www.boydavid.com 如果你使用某個數(shù)據(jù)庫特定的功能(例如MySQL專用的REPLACE語句),應該為SQL服務器編碼一個方法以實現(xiàn)同樣的功能。盡管慢些,但確允許其它服務器執(zhí)行同樣的任務。 本文出自:億恩科技【www.cmtents.com】 |