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