基于mysql和php的分布式事务处理1,基于MySQL和PHP的分布式事务处理
PHP(超級(jí)文本預(yù)處理語(yǔ)言)是一種基于服務(wù)器端、執(zhí)行效率高且易于開(kāi)發(fā)的HTML內(nèi)嵌式語(yǔ)言,是用戶生成動(dòng)態(tài)網(wǎng)頁(yè)的工具之一[1].MySQL是全球最受歡迎的小型開(kāi)放源碼的關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng),其體積小、速度快、總體擁有成本低[2].很多基于PHP技術(shù)開(kāi)發(fā)的中小型網(wǎng)站都采用MySQL作為其后臺(tái)數(shù)據(jù)庫(kù).當(dāng)數(shù)據(jù)庫(kù)分布在幾個(gè)遠(yuǎn)程服務(wù)器上時(shí),會(huì)增加由于網(wǎng)絡(luò)或通信故障所致錯(cuò)誤的可能性.因此,探討與實(shí)現(xiàn)基于PHP和MySQL的分布式事務(wù)處理方法,以保證分布在多個(gè)站點(diǎn)上數(shù)據(jù)的正確性和一致性,對(duì)共享與協(xié)作要求日益增加的現(xiàn)代商業(yè)信息系統(tǒng)具有十分重要的意義.1分布式事務(wù)處理1.1分布式事務(wù)處理模型分布式事務(wù)是指一個(gè)事務(wù)可能涉及多個(gè)異地?cái)?shù)據(jù)庫(kù)操作,由于數(shù)據(jù)的分散性,使得事務(wù)在多個(gè)數(shù)據(jù)庫(kù)上執(zhí)行,即分布式事務(wù)的執(zhí)行也是分布的.分布式數(shù)據(jù)庫(kù)系統(tǒng)中的一次事務(wù)處理被稱為全局事務(wù),全局事務(wù)是由若干個(gè)不同節(jié)點(diǎn)上的子事務(wù)組成,這些子事務(wù)不僅要與本地其他事務(wù)協(xié)調(diào),還要與全局事務(wù)所產(chǎn)生的其他子事務(wù)協(xié)調(diào).分布式事務(wù)處理模型如圖1所示,其包括應(yīng)用程序(AP)、事務(wù)管理器(TM)和資源管理器(RM).應(yīng)用程序定義事務(wù)邊界和構(gòu)成該事務(wù)的特定于應(yīng)用程序的操作;事務(wù)管理器包括用于運(yùn)行用戶應(yīng)用程序的事務(wù)處理監(jiān)視器,其向事務(wù)指定標(biāo)識(shí),監(jiān)視用戶應(yīng)用程序的進(jìn)程,并負(fù)責(zé)處理事務(wù)的完成或失敗.當(dāng)用戶應(yīng)用程序請(qǐng)求提交或回滾時(shí),事務(wù)管理器使用事務(wù)處理監(jiān)視器提供的應(yīng)用程序接口在所有參與的資源管理間協(xié)調(diào)提交或回滾;常見(jiàn)的資源管理器是數(shù)據(jù)庫(kù).XA是事務(wù)管理器與資源管理器之間的接口規(guī)范,XA接口規(guī)范提供事務(wù)管理器與資源管理器之間的雙向通信.事務(wù)管理器通過(guò)XA接口規(guī)范通知數(shù)據(jù)庫(kù)事務(wù)的開(kāi)始、結(jié)束、提交以及回滾等.圖1分布式事務(wù)處理模型Fig.1Modelofdistributedtransactionprocessing1.2兩階段提交協(xié)議與XA接口規(guī)范1.2.1兩階段提交協(xié)議當(dāng)使用多個(gè)資源合作解決一個(gè)問(wèn)題時(shí),必須使得這些資源在一個(gè)事務(wù)中進(jìn)行合作.為實(shí)現(xiàn)這一目的,將事務(wù)提交分為兩個(gè)階段進(jìn)行.(1)表決階段,目的是形成一個(gè)共同的決定.事務(wù)開(kāi)始時(shí),事務(wù)管理器向事務(wù)相關(guān)數(shù)據(jù)庫(kù)發(fā)送準(zhǔn)備提交各分支事務(wù)的信息,以確認(rèn)是否所有相關(guān)數(shù)據(jù)庫(kù)均可提交各自的事務(wù)分支.當(dāng)數(shù)據(jù)庫(kù)收到預(yù)提交信息后,若其可以提交事務(wù)分支,則將對(duì)該事務(wù)分支所做的操作記錄下來(lái),并返回給事務(wù)管理器一個(gè)同意提交的應(yīng)答,此時(shí)數(shù)據(jù)庫(kù)將不再對(duì)該事務(wù)分支做任何操作,但此時(shí)數(shù)據(jù)庫(kù)并沒(méi)有真正提交該事務(wù),數(shù)據(jù)庫(kù)對(duì)共享資源的操作尚未釋放,處于上鎖狀態(tài).如果由于某種原因,數(shù)據(jù)庫(kù)無(wú)法提交其事務(wù)分支,將回滾所有操作,釋放共享資源,并返回給事務(wù)管理器失敗應(yīng)答.(2)執(zhí)行階段,目的是實(shí)現(xiàn)第一階段的決定.若所有數(shù)據(jù)庫(kù)都可以提交,則事務(wù)管理器將要求所有數(shù)據(jù)庫(kù)做正式提交,這樣該全局事務(wù)被提交.而若任一數(shù)據(jù)庫(kù)預(yù)提交返回失敗,則事務(wù)管理器將要求所有其他數(shù)據(jù)庫(kù)回滾其操作,這樣該全局事務(wù)被回滾.圖2(a)和(b)分別示出了兩階段事務(wù)提交成功和失敗回滾的模型[4-5].圖2兩階段提交模型Fig.2Modeloftwo-phasecommit1.2.2XA接口規(guī)范XA接口規(guī)范的基礎(chǔ)是兩階段提交協(xié)議[6].對(duì)一個(gè)全局事務(wù),應(yīng)用程序首先通知事務(wù)管理器開(kāi)始一個(gè)全局事務(wù),事務(wù)管理器通過(guò)XA接口規(guī)范通知數(shù)據(jù)庫(kù)開(kāi)始事務(wù),然后應(yīng)用程序?qū)?shù)據(jù)庫(kù)管理的資源進(jìn)行操作,數(shù)據(jù)庫(kù)系統(tǒng)記錄事務(wù)對(duì)本地資源的所有操作,操作完成后事務(wù)管理器通過(guò)XA接口規(guī)范通知數(shù)據(jù)庫(kù)操作完成,并記錄應(yīng)用程序操作過(guò)哪些數(shù)據(jù)庫(kù),即事務(wù)分支.應(yīng)用程序根據(jù)具體操作情況通知事務(wù)管理器提交全
總結(jié)
以上是生活随笔為你收集整理的基于mysql和php的分布式事务处理1,基于MySQL和PHP的分布式事务处理的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: python tk下拉列表_如何从Tki
- 下一篇: postgres 把一个表的值转成另一个