摘 要:計(jì)算機(jī)網(wǎng)絡(luò)的發(fā)展開(kāi)擴(kuò)了PHP和MySQL的應(yīng)用范圍,數(shù)據(jù)庫(kù)技術(shù)全世界都在密切關(guān)注,這種技術(shù)領(lǐng)域?qū)⒎植加谖覀兩钪械母鱾€(gè)方面。對(duì)于一些中小型企業(yè)來(lái)講,PHP和MySQL的管理系統(tǒng)軟件非常適用,性能高、成本低、運(yùn)行快和操作簡(jiǎn)單等優(yōu)勢(shì)大大滿(mǎn)足了人們對(duì)數(shù)據(jù)庫(kù)的需要。本文針對(duì)PHP和MySQL的概念分析,對(duì)分布式數(shù)據(jù)管理進(jìn)行討論,通過(guò)舉例說(shuō)明分布式事務(wù)處理的存在問(wèn)題與存在優(yōu)勢(shì)。
關(guān)鍵詞:MySQL;PHP;分布式事務(wù)處理
中圖分類(lèi)號(hào):TP311.13
PHP和MySQL是一種比較出色的開(kāi)放源碼軟件,這種組合形式已經(jīng)成為很多人的建站模式。計(jì)算機(jī)網(wǎng)絡(luò)的發(fā)展需要一個(gè)十分強(qiáng)大的數(shù)據(jù)庫(kù)做后臺(tái),這些系統(tǒng)與系統(tǒng)、數(shù)據(jù)與數(shù)據(jù)之間的分布式事務(wù)處理利用PHP和MySQL的功能可以做到分段式處理方式,保證了整體數(shù)據(jù)的完整性,一旦出現(xiàn)問(wèn)題,通過(guò)引入XA概念將PHP和MySQL的程序簡(jiǎn)化,整體事務(wù)由XA來(lái)完成,應(yīng)用程序只負(fù)責(zé)數(shù)據(jù)為的處理,從而大大優(yōu)化了了應(yīng)用程序的操作方式與成功率。
1 MySQL概念
MySQL是一個(gè)管理系統(tǒng)軟件,是一種開(kāi)放源碼軟件,它的利用程度非常自由。由于軟件本身的特點(diǎn)非常明顯,快速、成本低且體積小,所以在中小型企業(yè)中非常流行。它的功能應(yīng)用廣泛,通過(guò)測(cè)試證明它非常準(zhǔn)確、穩(wěn)定,完全可以適用于多CPU102 2001.18計(jì)算機(jī)。MySQL軟件是一種核心級(jí)多線(xiàn)程資源,可以在不同區(qū)域不同平臺(tái)上進(jìn)行操作,豐富了set、blob、timestamp等數(shù)據(jù)類(lèi)型,可支持多數(shù)據(jù)庫(kù)統(tǒng)一查詢(xún),為WINDOWS提供ODBC的接口。MySQL的特點(diǎn)不止如此,還有很多技術(shù)優(yōu)點(diǎn),所以操作者非常喜歡使用該程序軟件[1]。
2 PHP的概念
PHP是一個(gè)英文縮寫(xiě)名稱(chēng),即:Hypertext Preprocessor,英文超級(jí)本預(yù)處理語(yǔ)言的縮寫(xiě)形式,它和ASP都是一種腳本語(yǔ)言,在服務(wù)器端嵌入HTML文檔,和C語(yǔ)言相似,同樣受到廣大編程人員的喜愛(ài)。PHP的語(yǔ)言形式與多種語(yǔ)言混合,其加雜了C語(yǔ)言、Java、Perl和PHP自帶語(yǔ)法,由于PHP是在HTML文檔中嵌入程序然后進(jìn)行執(zhí)行,所以其效率程度相比CGI更加快速。
PHP功能十分強(qiáng)大并且是免費(fèi)的開(kāi)源代碼,它本身技術(shù)含量低、實(shí)用性廣、運(yùn)行快并且還可以跨多種系統(tǒng)中運(yùn)行,例如:UNIX、WINDOWS、Mac IOS系統(tǒng)[2]。
3 多個(gè)數(shù)據(jù)庫(kù)的分布式事務(wù)處理模式
MySQL中有兩種對(duì)事務(wù)處理的方法,第一種是利用關(guān)鍵字來(lái)改變MySQL的自動(dòng)提交模式,這種方法是由set autocommit=0進(jìn)行對(duì)MySQL的自動(dòng)提交模式改變,然后將SQL的事務(wù)處理完成后提交確認(rèn)并結(jié)束任務(wù)。第二種是利用關(guān)鍵字來(lái)開(kāi)始一個(gè)事務(wù),確認(rèn)后再結(jié)束事務(wù),也就是是由Begin開(kāi)始一個(gè)事務(wù),直接提交確認(rèn)完成結(jié)束任務(wù)。
例:一臺(tái)ATM自動(dòng)存取款機(jī),小王想用自己在中國(guó)銀行的賬戶(hù)轉(zhuǎn)賬到交通銀行的賬戶(hù)中,這種操作是是利用數(shù)據(jù)庫(kù)與數(shù)據(jù)庫(kù)中相連接的多個(gè)數(shù)據(jù)庫(kù)分布式事務(wù)處理。數(shù)據(jù)庫(kù)中包括賬戶(hù)卡號(hào)、余額信息、交易日期、交易類(lèi)型等信息,是由賬戶(hù)表和日志表進(jìn)行分別存儲(chǔ)。
這種常見(jiàn)分布式事務(wù)處理方法如不發(fā)生意外,能夠一直保持各數(shù)據(jù)庫(kù)間的統(tǒng)一性,實(shí)現(xiàn)分布式事務(wù)處理??梢坏┏霈F(xiàn)意外,如當(dāng)用戶(hù)信息傳入到數(shù)據(jù)庫(kù)服務(wù)器中,數(shù)據(jù)服務(wù)器突然死機(jī),服務(wù)器還沒(méi)進(jìn)行提交,數(shù)據(jù)庫(kù)與數(shù)據(jù)庫(kù)間將失去聯(lián)系,無(wú)法保證數(shù)據(jù)的統(tǒng)一性和準(zhǔn)確性?;虍?dāng)所有事務(wù)處理完成后但數(shù)據(jù)服務(wù)器將操作成功返回給客戶(hù)時(shí),網(wǎng)絡(luò)連接突然中斷,這同樣不能使數(shù)據(jù)統(tǒng)一,這種情況雖然是服務(wù)器操作完成,但是客戶(hù)認(rèn)為事務(wù)操作失敗,但若要檢測(cè)出哪項(xiàng)事務(wù)使任務(wù)沒(méi)有完成,這個(gè)過(guò)程比較復(fù)雜。因此,需要引入兩階段提交協(xié)議進(jìn)行操作,通過(guò)PHP和MySQL的分布式事務(wù)處理[3]。
4 PHP和MySQL的分布式事務(wù)處理的優(yōu)勢(shì)
在PHP和MySQL接口連接執(zhí)行分布式事務(wù)時(shí),引入XA概念,PHP和MySQL執(zhí)行此任務(wù),是將每個(gè)服務(wù)器上涉及的事務(wù)全部提交并返回。根據(jù)分段提交方法,在整體事務(wù)被執(zhí)行后。第一階段,分支事務(wù)準(zhǔn)備提交時(shí),管理分支的服務(wù)器將自動(dòng)記錄分支事務(wù)操作,第二階段事務(wù)處理器在準(zhǔn)備提交或返回第一階段的結(jié)果時(shí),所有分支同時(shí)進(jìn)行操作,若其中一項(xiàng)分支操作失敗,則所有分支操作都被返回。
上文中案例顯示,在轉(zhuǎn)賬過(guò)程中經(jīng)歷多個(gè)程序,任何程序環(huán)節(jié)出現(xiàn)錯(cuò)誤則整個(gè)交易過(guò)程就會(huì)失敗,在操作過(guò)程中,系統(tǒng)將會(huì)對(duì)操作做出異常情況檢測(cè),不管操作成功與否,都需要在第一階段完成且第二階段準(zhǔn)備就緒后才執(zhí)行第二階段,否則數(shù)據(jù)無(wú)法提交[4]。
在實(shí)際操作中不可預(yù)見(jiàn)任何錯(cuò)誤產(chǎn)生將無(wú)法挽回,損失嚴(yán)重。所以在處理事務(wù)過(guò)程中,程序內(nèi)部需要通知事務(wù)提交和返回等事務(wù),如果數(shù)據(jù)庫(kù)發(fā)生異常,應(yīng)用程序會(huì)檢測(cè)出數(shù)據(jù)庫(kù)的運(yùn)作進(jìn)程,并立即使用特殊的編程邏輯彌補(bǔ)此類(lèi)錯(cuò)誤。
上文說(shuō)到,引入XA概念,PHP和MySQL執(zhí)行此任務(wù),是將每個(gè)服務(wù)器上涉及的事務(wù)全部提交并返回。引入XA概念的優(yōu)勢(shì)是將PHP和MySQL的應(yīng)用程序簡(jiǎn)化,事務(wù)處理的完整性通過(guò)數(shù)據(jù)庫(kù)和事務(wù)管理器對(duì)XA的接口來(lái)控制,應(yīng)用程序無(wú)需關(guān)心事務(wù)的完整性,能更好的對(duì)數(shù)據(jù)庫(kù)進(jìn)行處理。分布式事務(wù)處理復(fù)雜多樣,利用與XA的接口處理,全局事務(wù)將由事務(wù)管理器負(fù)責(zé),應(yīng)用程序只負(fù)責(zé)提交或返回的操作,這樣能夠很好的控制多個(gè)異地?cái)?shù)據(jù)庫(kù)的完整事務(wù)處理。
引入XA概念的PHP和MySQL分布式事務(wù)處理代碼如下:
//初始化賬戶(hù)A和B的數(shù)據(jù)庫(kù)連接
$conn24=new MySQLi(“172.16.0.248”,“root”,“”,“test”);
$conn18=new MySQLi(“172.16.0.243”,“root”,“password”,“test”);
//隨機(jī)生成數(shù)字表示存取錢(qián)
$account=rand(1,1000);
//生成唯一XA的ID編碼
$xid=date(“Ymd”).time();
//lpc開(kāi)始
$conn24 - >query(“XA START $xid”);
$conn18->query(“XA START $xid”);
5 結(jié)束語(yǔ)
綜上所述,計(jì)算機(jī)發(fā)展的后備力量是數(shù)據(jù)庫(kù)的完整性,數(shù)據(jù)庫(kù)建立需要PHP和MySQL,在此基礎(chǔ)上增添了分布式應(yīng)用的操作方法,從而實(shí)現(xiàn)了分布式事務(wù)處理系統(tǒng)。利用PHP和MySQL建立的完整數(shù)據(jù)庫(kù)進(jìn)行數(shù)據(jù)的提交與返回操作,避免了應(yīng)用程序復(fù)雜導(dǎo)致的出現(xiàn)異常情況,分布式事務(wù)處理一定程度的優(yōu)化了系統(tǒng)的運(yùn)行效率,再引入XA的概念,全局事務(wù)將由事務(wù)管理器負(fù)責(zé),應(yīng)用程序只負(fù)責(zé)提交或返回的操作,完全不必考慮其它事務(wù)處理。
參考文獻(xiàn):
[1]朱國(guó)民,賈民平.基于MySQL和VC++的遠(yuǎn)程狀態(tài)監(jiān)測(cè)與故障診斷數(shù)據(jù)庫(kù)的研發(fā)[J].機(jī)械制造與自動(dòng)化,2006(05):127-129-132.
[2]夏玉,宋斌恒.Web Service下的分布式事務(wù)處理研究與實(shí)現(xiàn)——基于Tomcat、Axis和JOTM[J].計(jì)算機(jī)應(yīng)用與軟件,2007(05):84-86.
[3]宣振國(guó).基于Mysql的數(shù)據(jù)庫(kù)集群設(shè)計(jì)與實(shí)現(xiàn)[D].北京郵電大學(xué),2013.
[4]查小科.分布式并行數(shù)據(jù)庫(kù)系統(tǒng)DPSQL中分布式查詢(xún)和分布式事務(wù)的設(shè)計(jì)與實(shí)現(xiàn)[D].電子科技大學(xué),2003.
作者簡(jiǎn)介:周潔(1979.05-),男,浙江余姚人,教師,講師,研究方向:PHP語(yǔ)言相關(guān)。
作者單位:余姚市技工學(xué)校,浙江余姚 315400