破釜沉舟 http://www.7880.com
MySQL數據庫技術(shù)(28)文章類(lèi)別:MySQL 發(fā)表日期:2005-09-27
閱讀次數: 314
5.2 選擇API
本節介紹根據各種類(lèi)型的應用程序選擇A P I的方法,比較C、DBI 和PHP API 的能力,并給出它們相對的優(yōu)點(diǎn)和缺點(diǎn),并指出什么時(shí)候應選擇哪一個(gè)。
首先應該指出,筆者不認為任一種語(yǔ)言?xún)?yōu)于其他語(yǔ)言。盡管筆者的確有自己的喜好,但還是統統使用它們。您也會(huì )有自己的喜好,像我的評論家一樣。一個(gè)評論家會(huì )感覺(jué)應該強調C 對MySQL 編程的重要性,應將這種重要性上升到更重要的程度,而另一個(gè)評論家會(huì )認為C
編程相當困難,應放棄使用它!您應當權衡本節中討論的這些因素,得出自己的結論。在對特定任務(wù)選擇哪個(gè)API 時(shí),要考慮以下問(wèn)題:
■ 預期的執行環(huán)境。期望使用應用程序的上下文環(huán)境。
■ 性能。當在A(yíng)PI 語(yǔ)言中編寫(xiě)時(shí),如何使應用程序高效地執行。
■ 開(kāi)發(fā)的容易性。如何便于A(yíng)PI 和它的語(yǔ)言編寫(xiě)應用程序。
■ 可移植性。除MySQL 以外,應用程序是否還將用于其他數據庫系統。
下面進(jìn)一步分析每個(gè)問(wèn)題。要注意這些因素的相互影響。例如,您想要一個(gè)運行良好的應用程序,但使用一個(gè)可快速開(kāi)發(fā)該應用程序的語(yǔ)言也同等重要,即使該應用程序不能非常有效地運行也同樣。
5.2.1 執行環(huán)境
當編寫(xiě)應用程序時(shí),通常應考慮使用哪種環(huán)境。例如,該應用程序可能是從外殼程序中調用的報告生成器程序,或一個(gè)應付賬目概要程序,在每月的月底作為cron job 進(jìn)行運行。從外殼程序或cron 程序中運行的命令通常依賴(lài)它們自己,而且很少需要運行環(huán)境。另外,可以編寫(xiě)一個(gè)應用程序來(lái)試圖由Web 服務(wù)器調用。這樣的程序期望能從它的運行環(huán)境中抽出非常特殊類(lèi)型的信息:客戶(hù)正在使用什么瀏覽器?在郵件清單訂閱請求格式中輸入什么參數?客戶(hù)提供正確的口令訪(fǎng)問(wèn)我們個(gè)人信息了嗎?每種API 語(yǔ)言都以它在這些不同的環(huán)境中適于編寫(xiě)應用程序而變化:
■C 是通用目標的語(yǔ)言,從理論上講任何任務(wù)都可使用它。在實(shí)際中, C 傾向于用于更頻繁的獨立程序而不是對Web 的編程。其原因可能是在C 中不像在Perl 或在PHP 中那樣容易地實(shí)現文本處理和內存管理,并且這些處理和管理在Web 應用程序中大量地使用。
■ P e r l,像C 一樣,適合于編寫(xiě)獨立的程序。然而,對于Web 站點(diǎn)的開(kāi)發(fā),Perl 也是非常有用的,例如通過(guò)使用CGI.pm 模塊。這使Perl 成為編寫(xiě)連接MySQL 和Web 的應用程序的便利的語(yǔ)言。這樣的應用程序可以經(jīng)CGI.pm 模塊與Web 接口,并可以使用DBI 與MySQL 相互作用。
■ PHP 是設計用來(lái)編寫(xiě)Web 應用程序的語(yǔ)言,所以這個(gè)環(huán)境顯然是最適合的。而且,數據庫訪(fǎng)問(wèn)是PHP 最大的優(yōu)勢之一,所以它是實(shí)現與MySQL 相關(guān)的任務(wù)的Web 應用程序最自然的選擇。也可以將PHP 作為一個(gè)獨立的解釋程序(例如,從外殼程序中運行腳本),但不能非常頻繁地使用它。
根據以上這些需要考慮的問(wèn)題,對于獨立的應用程序, C 和Perl 是最佳語(yǔ)言。對于We b應用程序, Perl 和PHP 是最合適的。如果需要編寫(xiě)這兩種類(lèi)型的應用程序,但又不會(huì )使用這些語(yǔ)言的任何一種,并想用盡可能少的精力來(lái)學(xué)習,則Perl 可能是您最佳的選擇。
5.2.2 性能
我們通常喜歡應用程序盡可能快地運行。然而,實(shí)際上性能的重要性取決于所使用的程序的頻率。對于一個(gè)月運行一次晚上定時(shí)工作的程序,性能可能不是非常重要的。而對于在Web 站點(diǎn)上一秒鐘運行若干次的程序,則每當排除一點(diǎn)無(wú)效性都會(huì )帶來(lái)巨大的不同。后一種
情況下,在站點(diǎn)的有效性和請求中,性能發(fā)揮著(zhù)重要的作用。一個(gè)緩慢的站點(diǎn)是令用戶(hù)苦惱的,無(wú)論站點(diǎn)的內容如何,如果您依靠站點(diǎn)作為一項收入來(lái)源,則性能的降低直接影響收入。如果不能一次為多個(gè)連接提供服務(wù),訪(fǎng)問(wèn)者只會(huì )產(chǎn)生厭煩情緒而去其他的站點(diǎn)。
性能評價(jià)是一個(gè)復雜的問(wèn)題。當編寫(xiě)特定的API 時(shí),應用程序完成得好壞的最好指標是在這個(gè)API 環(huán)境下編寫(xiě)并進(jìn)行測試。而且最好的比較測試是在不同的API 環(huán)境下多次運行該應用程序,來(lái)比較每個(gè)版本。當然,那不是一般的工作。一般來(lái)說(shuō),您只想獲取編寫(xiě)的應用
程序。一旦它工作了,如果它需要運行得更快,您就可以考慮優(yōu)化它,使用更少的內存,或有某些需要用其他方法提高的方面。但是,至少有如下兩個(gè)因素會(huì )影響性能:
■ 編譯的程序比解釋的程序運行得更快。
■ 對于在Web 上下文環(huán)境中使用的解釋語(yǔ)言,在解釋程序作為We b服務(wù)器自身的一部分而不是單獨的過(guò)程模塊被調用時(shí),性能更好。
1. 相對于解釋語(yǔ)言的編譯語(yǔ)言
編譯的應用程序比用腳本語(yǔ)言編寫(xiě)的程序的同樣版本效率更高、使用的內存更少,并且執行得更快,這是基本規律。這是由于執行腳本的語(yǔ)言的解釋程序的開(kāi)銷(xiāo)問(wèn)題。因為C 是編譯的,而Perl 和PHP 是解釋的,所以C 程序通常比Perl 或PHP 腳本運行得更快一些。對于大量使用的程序,通常用C 是最好的選擇。在MySQL 分發(fā)包中包括的mysql 命令行客戶(hù)機程序就是最好的樣例。
當然,有一些因素能使這種明顯的差別減小。對于一項任務(wù),可用C 編寫(xiě)出更快的程序,但也很有可能編寫(xiě)出低效率的C 程序。用編譯語(yǔ)言編寫(xiě)的程序并不自動(dòng)地保證更好的性能。所以需要不斷地考慮所做的事情。此外,如果一個(gè)腳本化的應用程序需花費大部分時(shí)間來(lái)執行連接到解釋程序引擎的MySQL 客戶(hù)機庫例程的代碼,則編譯程序和解釋程序之間的差別將有所減少。
2. 相對于語(yǔ)言解釋程序模塊版本的獨立程序
對于基于Web 的應用程序,腳本語(yǔ)言解釋程序通常以?xún)煞N形式之一來(lái)使用,至少對Apache 是這樣,當編寫(xiě)Web 應用程序時(shí),Apache 是我們將使用的Web 服務(wù)器:
■ 可以安排Apache 去調用這個(gè)解釋程序作為單獨的過(guò)程。當Apache 需要運行Perl 或PHP 腳本時(shí),它啟動(dòng)相應的程序,并告知它來(lái)執行該腳本。在這種情況下, Apache 使用該解釋程序作為CGI 程序,也就是說(shuō),它使用公共網(wǎng)關(guān)接口( Common Gateway Inter face,CGI)協(xié)議與它們通信。
■ 解釋程序可用作直接連接到Apache 二進(jìn)制程序和作為其過(guò)程自身的一部分運行的模塊。在A(yíng)pache 條件下, Perl 和PHP 解釋程序獲得mod_perl 和mod_php3 模塊的形式。
Perl 和PHP 的提倡者們極力宣揚解釋程序有速度優(yōu)勢,但所有的人都同意之所以喜歡解釋程序是因為其運行的形式比語(yǔ)言本身有更大的誘惑力。在這兩者中,解釋程序作為模塊運行比作為獨立的CGI 應用程序運行更快。
對于獨立的應用程序,每當運行一個(gè)腳本時(shí)都必須啟動(dòng)該解釋程序,所以將導致重大的創(chuàng )建過(guò)程的開(kāi)銷(xiāo)。當在已經(jīng)運行Apache 過(guò)程的內部作為模塊使用時(shí),解釋程序可以立即從Web 頁(yè)面中訪(fǎng)問(wèn)。通過(guò)減少開(kāi)銷(xiāo)顯著(zhù)地提高了性能,并直接轉換為快速處理獲取的請求并發(fā)
送它們的能力的增加。
獨立解釋程序啟動(dòng)的性能比模塊解釋程序的性能至少差一個(gè)數量級。當考慮Web 頁(yè)面服務(wù)包括少量處理的快速事務(wù)處理而不是具有許多處理時(shí),解釋程序啟動(dòng)的開(kāi)銷(xiāo)特別重要。如果花費許多時(shí)間只是為了啟動(dòng)而不是用于實(shí)際執行該腳本,則大部分資源一直處于等待狀態(tài)。一天中的大部分時(shí)間可能花費在準備工作上, 4 點(diǎn)到達,然后5 點(diǎn)回家。
您可能想知道,為什么解釋程序的模塊版本由于必須一直啟動(dòng)Apache 而能節省時(shí)間呢?。這個(gè)原因是,當Apache 啟動(dòng)時(shí),它立即產(chǎn)生一些子過(guò)程,用于處理收到的請求。當包括腳本執行的請求到達時(shí),已經(jīng)有Apache 進(jìn)程在準備等待去處理它。同樣, Apache 的每個(gè)實(shí)例可服務(wù)于多個(gè)請求,所以該進(jìn)程啟動(dòng)的開(kāi)銷(xiāo)只導致每組請求一次,而不是每個(gè)請求一次。
當Perl 和PHP 以模塊形式安裝時(shí)(像mod_perl 和m o d _ p h p 3),哪一個(gè)完成得更好一些?那就是爭論的主題,以下是適用于一般性的指南:
■ Perl 將腳本轉換為內部可編譯的形式;而PHP 卻不這樣。因此,一旦該腳本通過(guò)語(yǔ)法分析,則Perl 可更快地執行它,特別是對于具有大量迭代的循環(huán)。
■ mod_perl 可以運行腳本高速緩存來(lái)提高重復執行的腳本的性能。如果腳本在高速緩存中,則Perl 可更快地開(kāi)始執行腳本,因為它不需要再一次分析。否則, PHP 開(kāi)始執行的該腳本的速度更快。
■ mod_perl 比PHP 有更大的內存覆蓋區;利用mod_perl 連接的Apache 進(jìn)程比利用mod_php3 的更大。PHP 被假定必須在另一個(gè)進(jìn)程的內部協(xié)同存在,并且在那個(gè)進(jìn)程內部可以多次激活或撤消。Perl 被設計成從命令行作為獨立程序運行,而不是作為被嵌入在Web 服務(wù)器進(jìn)程中的一個(gè)語(yǔ)言進(jìn)行運行。這可能使它付出較大的內存覆蓋區;
Perl是模塊,因此它不運行在自身環(huán)境中。腳本的高速緩存和該腳本使用的附加P e r l模塊是付出較大的內存覆蓋區的另外的因素。在這兩種情況下,有更多的代碼使用內存,并將運行的Apache 進(jìn)程保留在內存中。
在腳本運行速度方面,Perl 無(wú)論有什么可超過(guò)PHP 的優(yōu)勢,都被PHP 4 除掉了。PHP 4 在它的能力和接口方面類(lèi)似于PHP 3,但它合并了Zend,Zend 是一種更高性能的解釋程序的引擎。
無(wú)論如何,所有的這些因素只導致Perl 和PHP 的模塊版本之間性能比不同。無(wú)論您選擇哪種語(yǔ)言,最重要的是盡可能地避免獨立的解釋程序。
解釋程序的獨立版本的確有一個(gè)優(yōu)點(diǎn)超過(guò)它的模塊版本,即可以安排它在不同的用戶(hù)I D下運行。模塊版本始終運行在與Web 服務(wù)器相同的用戶(hù)ID 下,出于安全原因,該用戶(hù)是一個(gè)典型的具有很少權限的賬號。對于需要特殊權限的腳本來(lái)說(shuō)不能很好地運行(例如,如果您需要能讀寫(xiě)受保護的文件)。如果愿意,可以將模塊方法和獨立方法結合起來(lái):缺省情況下使用模塊版本,而在具有特定用戶(hù)的權限的腳本的情況下使用獨立版本。
降低mod_perl 的內存需求
有些技術(shù)允許您只能對mod_perl 使用某些的Apache 進(jìn)程。這樣,只對運行Perl 腳本的那些進(jìn)程產(chǎn)生額外的內存開(kāi)銷(xiāo)。Apache Web 站點(diǎn)的mod_perl 部分有可選擇的各種策略的討論(有關(guān)的詳細信息,請參閱h t t p : / / p e r l . a p a c h e . o rg / g u i d e /)。綜上考慮,也就是說(shuō),選擇Perl 還是P H P,您應該試著(zhù)從Apache 模塊中而不是通過(guò)調用一個(gè)單獨的解釋程序過(guò)程來(lái)使用它。只對不能由模塊處理的那些情況使用獨立的解釋程序,例如需要特殊權限的腳本。對于這些實(shí)例,可以通過(guò)使用Apache 的suEXEC 機制在給定的用戶(hù)ID 下啟動(dòng)解釋程序來(lái)處理腳本。
5.2.3 開(kāi)發(fā)時(shí)間
剛才描述的這些因素影響應用程序的性能,但不能只考慮運行效率。時(shí)間及編程的簡(jiǎn)易性也是重要的,所以為MySQL 編程選擇API 時(shí)要考慮的另一個(gè)因素是如何很快地開(kāi)發(fā)出自己的應用程序。如果開(kāi)發(fā)同樣程序,用P e r l腳本只需用C 語(yǔ)言一半的時(shí)間,那您可能寧愿使用Perl DBI API,而非C API,即使開(kāi)發(fā)出的應用程序運行速度不是非??煲踩绱???紤]程序的運行時(shí)間比考慮編寫(xiě)程序時(shí)花的時(shí)間更少一些通常是合理的,特別是對不經(jīng)常運行的應用程序更是如此。您的一小時(shí)比機器的一小時(shí)要值錢(qián)得多!
一般來(lái)說(shuō),腳本語(yǔ)言編寫(xiě)程序更快,特別是得到應用程序的原型更快,這是由于以下兩個(gè)原因:
第一,腳本語(yǔ)言提供更高級別的結構。這允許您在抽象的更高級別上進(jìn)行思考,以便集中考慮要做些什么,而不是考慮如何做。例如, Perl 的關(guān)聯(lián)數組(散列)對于維護具有鍵/值系(如學(xué)生I D /學(xué)生姓名對)的數據節省了大量時(shí)間。C 沒(méi)有這樣的構造。如果想在C 中實(shí)現這樣的事情,則可能需要編寫(xiě)代碼來(lái)處理許多低級的細節,其中包括內存管理和串操縱的問(wèn)題,并且需要調試它,這也要花時(shí)間。
第二,腳本語(yǔ)言的開(kāi)發(fā)周期的步驟較少。用C 開(kāi)發(fā)應用程序時(shí),要經(jīng)歷通常的編輯—編譯—測試的循環(huán)周期。每次修改程序時(shí),在測試之前都必須重新編譯它。而用Perl 和P H P,由于每次修改后不用編譯就可以立即運行腳本,因此,開(kāi)發(fā)周期可簡(jiǎn)化為編輯—測試。另一方面,編譯程序對程序在嚴格的類(lèi)型檢查形式方面有更多的約束條件。編譯程序施加的更多約束條件有助于避免在松散語(yǔ)言(如Perl 和P H P )中不易捕獲的錯誤。在C 中,如果您錯誤地拼寫(xiě)了變量的名稱(chēng),則編譯程序將警告您。PHP 不這樣,Perl 也不這樣,除非向它詢(xún)問(wèn)。當應用程序變得更大且更難于維護時(shí),這些更嚴格的約束條件可能特別有用。
一般來(lái)說(shuō),在編譯和解釋語(yǔ)言之間權衡的是開(kāi)發(fā)時(shí)間與性能的折衷:是想要使用編譯語(yǔ)言開(kāi)發(fā)程序,以便在運行時(shí)可以更快,但花費更多的時(shí)間來(lái)編寫(xiě)它?還是想要用腳本語(yǔ)言編寫(xiě)程序,以便在縮短編程時(shí)間,但要損失一些運行速度?
將兩種方法合并起來(lái)也是可能的。編寫(xiě)一個(gè)腳本作為“第一個(gè)草案”來(lái)快速地開(kāi)發(fā)出一個(gè)應用程序原型以測試其邏輯性,確定算法的可用性。如果這個(gè)程序有用,并且被頻繁使用,則性能成為關(guān)心的焦點(diǎn),這時(shí)可作為編譯的應用程序重新對它編寫(xiě)代碼。這樣做給您帶來(lái)兩種方法的優(yōu)點(diǎn):快速得到應用程序的初始開(kāi)發(fā)原型,同時(shí)得到最終產(chǎn)品的最佳性能。從某種嚴格的意義來(lái)說(shuō), Perl DBI 和PHP API 并沒(méi)有給您在C 客戶(hù)機庫中沒(méi)有的能力。這是因為這兩種API 通過(guò)MySQL C 庫連接到Perl 和PHP 解釋程序來(lái)獲取對MySQL 的訪(fǎng)問(wèn)。然而,對于嵌入MySQL 的環(huán)境,C 與Perl 或PHP 有很大的不同。應考慮在與MySQL服務(wù)器相互作用時(shí)要做的事情并提問(wèn)每個(gè)API 語(yǔ)言如何幫助您完成這些事情。下面有一些樣例:
■ 內存管理。在C中,您發(fā)現自己對任何任務(wù),包括動(dòng)態(tài)分配數據結構都使用malloc() 和free() 來(lái)工作。Perl 和PHP 可為您處理這些任務(wù)。例如,數組的大小自動(dòng)地增加,并且可以使用動(dòng)態(tài)長(cháng)度的字符串而不用考慮內存管理。
■ 文本處理。在這點(diǎn)Perl 具有最大的開(kāi)發(fā)能力,而PHP 位于第二。比較起來(lái),C 是非常初級的。當然,可以用C編寫(xiě)自己的庫,將內存管理和文本處理這樣一些任務(wù)封裝成更容易工作的函數。但是,然后還必須調試它們,并且您也想使自己的算法效率更高。在這兩個(gè)方面,基本上可以斷定,由于它們已經(jīng)具有了通過(guò)許多雙眼睛檢查過(guò)的好處,對這些事情Perl 和P H P中的算法一般是易于調試并且有合理的效率。通過(guò)利用其他人的工作可以節省您的時(shí)間(另一方面,如果解釋程序偶爾有一個(gè)錯誤,您可能必須攜帶它,直到這個(gè)問(wèn)題糾正為止。而用C 編寫(xiě)時(shí),可以更細地控制程序性能)。
這些語(yǔ)言的不同還在于它們的“安全性”。C API 提供對服務(wù)器最低級別的接口,而且強制的原則最少。從這種意義上說(shuō),它提供最低級的安全性網(wǎng)絡(luò )。如果您超出正常順序執行API 函數,則可能獲得一個(gè)“超出同步”的錯誤,或使程序崩潰。Perl 和PHP 都提供了很好的保護。如果您沒(méi)有以適當的順序進(jìn)行,則腳本失敗,但是解釋程序并不崩潰。在C 程序中,出現崩潰錯誤的另一個(gè)非??赡艿膩?lái)源是動(dòng)態(tài)分配內存和與它們相關(guān)的指針的使用。Perl 和PHP 為您處理內存管理,所以您的腳本很少可能因為內存管理的錯誤而癱瘓。
開(kāi)發(fā)時(shí)間受語(yǔ)言可用的外部支持的影響。C 可用的外部支持是將MySQL C API 函數封裝為更容易使用的實(shí)例的包裝庫的形式。這些庫對于C 和C++ 都可用。Perl 無(wú)疑具有最大數量的附加軟件,都是Perl 模塊的形式(與在A(yíng)pache 模塊中具有的概念類(lèi)似)。甚至有一個(gè)基礎結構被設計來(lái)容易地定位并獲取這些模塊(即綜合Perl 歸檔網(wǎng)絡(luò )Comprehensive Perl Archive Network, CPA N)。使用Perl 模塊,不用編寫(xiě)代碼就可以獲取對所有類(lèi)型的函數的訪(fǎng)問(wèn)。想要編寫(xiě)從數據庫中生成報告的腳本,然后作為一個(gè)附件發(fā)送給某人嗎?只要獲取MIME 模塊中的一個(gè),就立即具有附件生成的能力。
PHP 沒(méi)有同樣程度的外部支持(這并不令人驚奇,因為它是較新的語(yǔ)言)。也許所知道的最佳的附加軟件是P H P基本庫( PHP Base Library,PHP LIB)。根據名稱(chēng)和口令機制的一些排序,假設您正在編寫(xiě)需要限定只有經(jīng)授權的用戶(hù)才可以對某個(gè)Web 頁(yè)面訪(fǎng)問(wèn)的Web 應用程序??梢杂萌我庹Z(yǔ)言編寫(xiě)對它的支持程序,但是如果使用P H P L I B,則不必花費時(shí)間重新做這件事情。P H P L I B提供確認并且允許通過(guò)會(huì )話(huà)跟蹤經(jīng)授權的用戶(hù)(從作為單個(gè)邏輯訪(fǎng)問(wèn)部分的給定客戶(hù)機中連續頁(yè)面的命中)。還可以分配給用戶(hù)許可權,這允許您進(jìn)行像定義具有更多權限的管理用戶(hù)的工作。
5.2.4 可移植性
可移植性的問(wèn)題與為訪(fǎng)問(wèn)MySQL 引擎所編寫(xiě)的程序怎樣才能容易地修改為使用不同引擎的程序有關(guān)。您可能不擔心這個(gè)事情。然而,除非可以預知未來(lái),否則,說(shuō)“除了MySQL以外,我永遠都不會(huì )將這個(gè)程序用在任何其他的數據庫上”可能有些冒險:假設您找到另一
份工作,并想使用自己的舊程序,但您的新老板使用不同的數據庫系統呢?如果可移植性是需要優(yōu)先考慮的事情,則應該考慮在A(yíng)PI 之間的區別:
■ DBI API的可移植性最好,因為它獨立于數據庫是DBI 設計的一個(gè)明確目標。
■ PHP 的可移植性稍差,因為它不提供對DBI 提供的各種數據庫引擎的同樣類(lèi)型的統一接口。對每個(gè)支持數據庫的PHP 函數的調用類(lèi)似于在相應的基礎C API 中的那些。稍有一些不同,但很少,需要更改您調用的數據庫相關(guān)函數的名稱(chēng)。還有可能要修改一點(diǎn)應用程序的邏輯,因為不同數據庫的借口并不都是以同樣的方式工作的。
■ C API 提供的數據庫之間的可移植性最差。因為它生來(lái)就是為MySQL 設計的。當需要在同一個(gè)應用程序中訪(fǎng)問(wèn)多個(gè)數據庫系統時(shí),獨立于數據庫的可移植性特別重要。這可能包括像將數據從一個(gè)RDBMS 移動(dòng)到另一個(gè)RDBMS 中的簡(jiǎn)單任務(wù),或更復雜的任務(wù),如基于從許多數據庫系統中得到的信息生成報告。
DBI 和PHP 都提供對訪(fǎng)問(wèn)多個(gè)數據庫引擎的支持,所以對不同的數據庫,甚至在不同的主機上,都可以很容易地同時(shí)連接到服務(wù)器上。然而, DBI 和PHP 在對于從多個(gè)異構數據庫系統中檢索和處理數據的任務(wù)的適宜性方面有所不同。而DBI 更好些,因為無(wú)論使用哪種數據庫,它都使用一組單獨的訪(fǎng)問(wèn)調用。假設想在MySQL、mSQL 和Postgres 數據庫之間傳送數據。使用DBI,則使用這三種數據庫的惟一不同之處在于用于連接到每個(gè)服務(wù)器的DBI -> connect( )調用。而用PHP時(shí),可能需要有更復雜的腳本,該腳本將含有三組讀取調用和三組寫(xiě)入調用。
多數據庫應用程序的一個(gè)極好的例子是MySQL 分發(fā)包中的crash-me 腳本,它可測試許多不同的數據庫服務(wù)器的能力。該腳本是用D B I編寫(xiě)的,對于這樣的應用程序,這種選擇是很明顯的,因為您可以同樣的方式訪(fǎng)問(wèn)所有的數據庫。
破釜沉舟 http://www.7880.com