一種保持?jǐn)?shù)據(jù)一致性的方法、裝置、系統(tǒng)和應(yīng)用服務(wù)器的制造方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及數(shù)據(jù)庫(kù)技術(shù)領(lǐng)域,具體涉及一種保持?jǐn)?shù)據(jù)一致性的方法、裝置、系統(tǒng)和應(yīng)用服務(wù)器。
【背景技術(shù)】
[0002]由于單臺(tái)數(shù)據(jù)庫(kù)服務(wù)器的性能及容量限制,當(dāng)業(yè)務(wù)發(fā)展到一定程度時(shí),不得不對(duì)業(yè)務(wù)數(shù)據(jù)進(jìn)行切分,使業(yè)務(wù)數(shù)據(jù)分別存儲(chǔ)到多臺(tái)數(shù)據(jù)庫(kù)服務(wù)器的多個(gè)數(shù)據(jù)庫(kù)中。
[0003]當(dāng)業(yè)務(wù)需要同時(shí)向多個(gè)數(shù)據(jù)庫(kù)寫入數(shù)據(jù)時(shí),若部分?jǐn)?shù)據(jù)庫(kù)提交失敗,而另外的數(shù)據(jù)庫(kù)提交成功,則會(huì)出現(xiàn)業(yè)務(wù)數(shù)據(jù)不一致的問(wèn)題,導(dǎo)致最終存儲(chǔ)的數(shù)據(jù)無(wú)法保證一致性而出現(xiàn)錯(cuò)誤,給業(yè)務(wù)造成損失。
[0004]圖1為現(xiàn)有技術(shù)中對(duì)兩個(gè)數(shù)據(jù)庫(kù)同時(shí)進(jìn)行操作的流程圖。如圖1所示,Web服務(wù)器需要進(jìn)行跨庫(kù)操作,將業(yè)務(wù)數(shù)據(jù)同時(shí)寫入到數(shù)據(jù)庫(kù)A和數(shù)據(jù)庫(kù)B,其流程如下:
[0005]步驟S101、創(chuàng)建與數(shù)據(jù)庫(kù)A的數(shù)據(jù)庫(kù)連接;
[0006]步驟S102、啟動(dòng)數(shù)據(jù)庫(kù)事務(wù)A ;
[0007]步驟S103、對(duì)數(shù)據(jù)庫(kù)A執(zhí)行一系列讀寫操作,以便將業(yè)務(wù)數(shù)據(jù)寫入到數(shù)據(jù)庫(kù)A ;
[0008]步驟S104、如果對(duì)數(shù)據(jù)庫(kù)A的操作成功,提交數(shù)據(jù)庫(kù)事務(wù)A (Commit),對(duì)數(shù)據(jù)庫(kù)A的操作完成;
[0009]步驟S105、創(chuàng)建與數(shù)據(jù)庫(kù)B的數(shù)據(jù)庫(kù)連接;
[0010]步驟S106、啟動(dòng)數(shù)據(jù)庫(kù)事務(wù)B ;
[0011]步驟S107、對(duì)數(shù)據(jù)庫(kù)B執(zhí)行一系列讀寫操作,以便將業(yè)務(wù)數(shù)據(jù)寫入到數(shù)據(jù)庫(kù)B ;
[0012]步驟S108、如果對(duì)數(shù)據(jù)庫(kù)B的操作成功,提交數(shù)據(jù)庫(kù)事務(wù)B (Commit),對(duì)數(shù)據(jù)庫(kù)B的操作完成;
[0013]至此,對(duì)數(shù)據(jù)庫(kù)A、B的全部操作執(zhí)行完畢,操作結(jié)果為:對(duì)數(shù)據(jù)庫(kù)A的操作執(zhí)行成功,對(duì)數(shù)據(jù)庫(kù)B的操作執(zhí)行成功。
[0014]在步驟S109中,如果對(duì)數(shù)據(jù)庫(kù)B的操作失敗,則回滾(Rollback)數(shù)據(jù)庫(kù)事務(wù)B。全部操作執(zhí)行完畢,執(zhí)行結(jié)果為:對(duì)數(shù)據(jù)庫(kù)A的操作執(zhí)行成功,對(duì)數(shù)據(jù)庫(kù)B的操作執(zhí)行失敗,此時(shí),數(shù)據(jù)庫(kù)A和數(shù)據(jù)庫(kù)B出現(xiàn)數(shù)據(jù)不一致。
[0015]在步驟SllO中,如果對(duì)數(shù)據(jù)庫(kù)A操作失敗,回滾數(shù)據(jù)庫(kù)事務(wù)A。全部操作執(zhí)行完畢,執(zhí)行結(jié)果為:對(duì)數(shù)據(jù)庫(kù)A的操作執(zhí)行失敗,對(duì)數(shù)據(jù)庫(kù)B的操作未執(zhí)行。
[0016]可以看出,根據(jù)步驟S109的執(zhí)行結(jié)果,對(duì)數(shù)據(jù)庫(kù)A的操作執(zhí)行成功,對(duì)數(shù)據(jù)庫(kù)B的操作執(zhí)行失敗,因?yàn)閷?duì)數(shù)據(jù)庫(kù)A的操作已提交到數(shù)據(jù)庫(kù)A,無(wú)法回退,會(huì)導(dǎo)致數(shù)據(jù)庫(kù)A數(shù)據(jù)與數(shù)據(jù)庫(kù)B數(shù)據(jù)在邏輯上不一致。
【發(fā)明內(nèi)容】
[0017]鑒于上述問(wèn)題,提出了本發(fā)明以便提供一種克服上述問(wèn)題或者至少部分地解決上述問(wèn)題的一種保持?jǐn)?shù)據(jù)一致性的方法、裝置、系統(tǒng)和應(yīng)用服務(wù)器。
[0018]根據(jù)本發(fā)明的一個(gè)方面,提供了一種保持?jǐn)?shù)據(jù)一致性的方法,在應(yīng)用服務(wù)器中執(zhí)行,適于將業(yè)務(wù)數(shù)據(jù)同時(shí)寫入到第一數(shù)據(jù)庫(kù)和第二數(shù)據(jù)庫(kù),所述方法包括:創(chuàng)建與第一數(shù)據(jù)庫(kù)的第一數(shù)據(jù)庫(kù)連接,并在第一數(shù)據(jù)庫(kù)連接下啟動(dòng)第一數(shù)據(jù)庫(kù)事務(wù),執(zhí)行對(duì)第一數(shù)據(jù)庫(kù)的第一讀寫操作,以便將業(yè)務(wù)數(shù)據(jù)寫入到第一數(shù)據(jù)庫(kù);創(chuàng)建與第二數(shù)據(jù)庫(kù)的第二數(shù)據(jù)庫(kù)連接,并在第二數(shù)據(jù)庫(kù)連接下啟動(dòng)第二數(shù)據(jù)庫(kù)事務(wù),執(zhí)行對(duì)第二數(shù)據(jù)庫(kù)的第二讀寫操作,以便將業(yè)務(wù)數(shù)據(jù)寫入到第二數(shù)據(jù)庫(kù);當(dāng)?shù)谝蛔x寫操作對(duì)應(yīng)的第一操作結(jié)果以及第二讀寫操作對(duì)應(yīng)的第二操作結(jié)果均為成功時(shí),分別執(zhí)行對(duì)第一數(shù)據(jù)庫(kù)事務(wù)和第二數(shù)據(jù)庫(kù)事務(wù)的提交操作。
[0019]可選地,根據(jù)本發(fā)明的保持?jǐn)?shù)據(jù)一致性的方法,還包括:當(dāng)?shù)谝徊僮鹘Y(jié)果和第二操作結(jié)果中的任意一個(gè)為失敗時(shí),分別執(zhí)行對(duì)第一數(shù)據(jù)庫(kù)事務(wù)和第二數(shù)據(jù)庫(kù)事務(wù)的回滾操作。
[0020]可選地,在根據(jù)本發(fā)明的保持?jǐn)?shù)據(jù)一致性的方法中,第一數(shù)據(jù)庫(kù)事務(wù)和第二數(shù)據(jù)庫(kù)事務(wù)均為基于預(yù)寫式日志的事務(wù)。
[0021]可選地,在根據(jù)本發(fā)明的保持?jǐn)?shù)據(jù)一致性的方法中,所述應(yīng)用服務(wù)器為Web服務(wù)器。
[0022]根據(jù)本發(fā)明的另一方面,提供了一種保持?jǐn)?shù)據(jù)一致性的裝置,駐留在應(yīng)用服務(wù)器中,適于將業(yè)務(wù)數(shù)據(jù)同時(shí)寫入到第一數(shù)據(jù)庫(kù)和第二數(shù)據(jù)庫(kù),所述裝置包括:第一操作單元,適于創(chuàng)建與第一數(shù)據(jù)庫(kù)的第一數(shù)據(jù)庫(kù)連接,并在第一數(shù)據(jù)庫(kù)連接下啟動(dòng)第一數(shù)據(jù)庫(kù)事務(wù),執(zhí)行對(duì)第一數(shù)據(jù)庫(kù)的第一讀寫操作,以便將業(yè)務(wù)數(shù)據(jù)寫入到第一數(shù)據(jù)庫(kù);第二操作單元,適于創(chuàng)建與第二數(shù)據(jù)庫(kù)的第二數(shù)據(jù)庫(kù)連接,并在第二數(shù)據(jù)庫(kù)連接下啟動(dòng)第二數(shù)據(jù)庫(kù)事務(wù),執(zhí)行對(duì)第二數(shù)據(jù)庫(kù)的第二讀寫操作,以便將業(yè)務(wù)數(shù)據(jù)寫入到第二數(shù)據(jù)庫(kù);提交單元,適于當(dāng)?shù)谝蛔x寫操作對(duì)應(yīng)的第一操作結(jié)果以及第二讀寫操作對(duì)應(yīng)的第二操作結(jié)果均為成功時(shí),分別執(zhí)行對(duì)第一數(shù)據(jù)庫(kù)事務(wù)和第二數(shù)據(jù)庫(kù)事務(wù)的提交操作。
[0023]可選地,根據(jù)本發(fā)明的保持?jǐn)?shù)據(jù)一致性的裝置,還包括:回滾單元,適于當(dāng)?shù)谝徊僮鹘Y(jié)果和第二操作結(jié)果中的任意一個(gè)為失敗時(shí),分別執(zhí)行對(duì)第一數(shù)據(jù)庫(kù)事務(wù)和第二數(shù)據(jù)庫(kù)事務(wù)的回滾操作。
[0024]可選地,在根據(jù)本發(fā)明的保持?jǐn)?shù)據(jù)一致性的裝置中,第一數(shù)據(jù)庫(kù)事務(wù)和第二數(shù)據(jù)庫(kù)事務(wù)均為基于預(yù)寫式日志的事務(wù)。
[0025]可選地,在根據(jù)本發(fā)明的保持?jǐn)?shù)據(jù)一致性的裝置中,所述應(yīng)用服務(wù)器為Web服務(wù)器。
[0026]根據(jù)本發(fā)明的又一方面,提供了一種應(yīng)用服務(wù)器,所述應(yīng)用服務(wù)器中駐留有根據(jù)本發(fā)明的保持?jǐn)?shù)據(jù)一致性的裝置。
[0027]根據(jù)本發(fā)明的再一方面,提供了一種保持?jǐn)?shù)據(jù)一致性的系統(tǒng),包括根據(jù)本發(fā)明的應(yīng)用服務(wù)器以及第一數(shù)據(jù)庫(kù)服務(wù)器和第二數(shù)據(jù)庫(kù)服務(wù)器,第一數(shù)據(jù)庫(kù)服務(wù)器中包括第一數(shù)據(jù)庫(kù),第二數(shù)據(jù)庫(kù)服務(wù)器中包括第二數(shù)據(jù)庫(kù)。
[0028]根據(jù)本發(fā)明的保持?jǐn)?shù)據(jù)一致性的方案,當(dāng)業(yè)務(wù)需要同時(shí)向多個(gè)數(shù)據(jù)庫(kù)寫入數(shù)據(jù)時(shí),通過(guò)對(duì)數(shù)據(jù)庫(kù)事務(wù)提交的時(shí)機(jī)進(jìn)行控制,僅當(dāng)對(duì)第一數(shù)據(jù)庫(kù)和第二數(shù)據(jù)庫(kù)的操作結(jié)果均為成功時(shí),才執(zhí)行對(duì)第一數(shù)據(jù)庫(kù)事務(wù)和第二數(shù)據(jù)庫(kù)事務(wù)的提交操作,只要第一數(shù)據(jù)庫(kù)和第二數(shù)據(jù)庫(kù)的操作結(jié)果中任意一個(gè)失敗,都會(huì)對(duì)第一數(shù)據(jù)庫(kù)事務(wù)和第二數(shù)據(jù)庫(kù)事務(wù)執(zhí)行回滾操作,在較大程度上保證了跨數(shù)據(jù)庫(kù)數(shù)據(jù)的一致性。
[0029]上述說(shuō)明僅是本發(fā)明技術(shù)方案的概述,為了能夠更清楚了解本發(fā)明的技術(shù)手段,而可依照說(shuō)明書的內(nèi)容予以實(shí)施,并且為了讓本發(fā)明的上述和其它目的、特征和優(yōu)點(diǎn)能夠更明顯易懂,以下特舉本發(fā)明的【具體實(shí)施方式】。
【附圖說(shuō)明】
[0030]通過(guò)閱讀下文優(yōu)選實(shí)施方式的詳細(xì)描述,各種其他的優(yōu)點(diǎn)和益處對(duì)于本領(lǐng)域普通技術(shù)人員將變得清楚明了。附圖僅用于示出優(yōu)選實(shí)施方式的目的,而并不認(rèn)為是對(duì)本發(fā)明的限制。而且在整個(gè)附圖中,用相同的參考符號(hào)表示相同的部件。在附圖中:
[0031]圖1為現(xiàn)有技術(shù)中對(duì)兩個(gè)數(shù)據(jù)庫(kù)同時(shí)進(jìn)行操作的流程圖;
[0032]圖2示出了根據(jù)本發(fā)明一個(gè)實(shí)施例的保持?jǐn)?shù)據(jù)一致性的方法流程圖;以及
[0033]圖3示出了根據(jù)本發(fā)明一個(gè)實(shí)施例的保持?jǐn)?shù)據(jù)一致性的系統(tǒng)結(jié)構(gòu)圖。
【具體實(shí)施方式】
[0034]下面將參照附圖更詳細(xì)地描述本公開(kāi)的示例性實(shí)施例。雖然附圖中顯示了本公開(kāi)的示例性實(shí)施例,然而應(yīng)當(dāng)理解,可以以各種形式實(shí)現(xiàn)本公開(kāi)而不應(yīng)被這里闡述的實(shí)施例所限制。相反,提供這些實(shí)施例是為了能夠更透徹地理解本公開(kāi),并且能夠?qū)⒈竟_(kāi)的范圍完整的傳達(dá)給本領(lǐng)域的技術(shù)人員。
[0035]圖2示出了根據(jù)本發(fā)明一個(gè)實(shí)施例的保持?jǐn)?shù)據(jù)一致性的方法流程圖,該方法在應(yīng)用服務(wù)器(例如Web服務(wù)器)中執(zhí)行,適于將業(yè)務(wù)數(shù)據(jù)同時(shí)寫入到數(shù)據(jù)庫(kù)A和第二數(shù)據(jù)庫(kù)B。
[0036]參照?qǐng)D2,該方法始于步驟S201。在步驟S201中,創(chuàng)建與數(shù)據(jù)庫(kù)A的數(shù)據(jù)庫(kù)連接A,創(chuàng)建數(shù)據(jù)庫(kù)連接A的示例性語(yǔ)句如下:
[0037]string connect1nStringA = "Server = 192.168.0.1 ;Database = TestA ;UserID = TestA ;Password = TestA ;〃 ;
[0038]SqlConnect1n connA = new SqlConnect1n (connect1nStringA);
[0039]創(chuàng)建數(shù)據(jù)庫(kù)連接A之后,方法進(jìn)入步驟S202。在步驟S202中,在數(shù)據(jù)庫(kù)連接A下,啟動(dòng)數(shù)據(jù)庫(kù)事務(wù)A,啟動(dòng)數(shù)據(jù)庫(kù)事務(wù)A的示例性語(yǔ)句如下:
[0040]SqlTransact1n transact1nA = connA.BeginTransact