專利名稱:在使用商用服務(wù)器的無狀態(tài)體系結(jié)構(gòu)中的事務(wù)保護的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及在網(wǎng)絡(luò)上提供的事務(wù),更特別地涉及在網(wǎng)絡(luò)上提供的 所述事務(wù)的可靠存儲。
背景技術(shù):
在因特網(wǎng)上的事務(wù)正在快速增長。不僅購物站點使用事務(wù),而且 許多其他站點也這樣做用以提供和維護數(shù)據(jù)。然而,在諸如因特網(wǎng)的 網(wǎng)絡(luò)上實現(xiàn)的事務(wù)的一個問題是事務(wù)過程本身的可靠性。在許多情況 下允許事務(wù)被過賬(post)兩次是不可接受的,其中如果事務(wù)實際上已 經(jīng)過賬但是客戶端或始發(fā)者從未接收到過賬的響應(yīng)并重復(fù)事務(wù),就會 發(fā)生兩次過賬。由于這個問題,已經(jīng)發(fā)展了復(fù)雜的技術(shù)來防止雙重過 賬并且通常需要昂貴而且復(fù)雜的計算機硬件。
通??紤]需要對每次事務(wù)進行全狀態(tài)跟蹤(full state tracking), 使得如果發(fā)生響應(yīng)或其他通信的任何損失,可以確定事務(wù)的準(zhǔn)確狀態(tài)。 然而,這要求由客戶端和服務(wù)器端兩者維護狀態(tài)。
一個可選方案是無狀態(tài)環(huán)境,其中客戶端在錯誤檢測之后重新遞 交任何事務(wù)。然而,無狀態(tài)環(huán)境增加了上面討論的雙重過賬問題。在 那些情況中,為了更加可靠,優(yōu)選的是事務(wù)和數(shù)據(jù)庫位于相同的邏輯 單元上,或者是單個單元或者集群(cluster)。示范性系統(tǒng)包括各種主 機、Hewlett-Packard NonStop服務(wù)器和Oracle集群。這樣的問題是所 述系統(tǒng)非常昂貴。在較大的系統(tǒng)中這更嚴(yán)重。通過將服務(wù)器分為兩個 部分、即事務(wù)前端和數(shù)據(jù)庫后端,可以獲得一些成本降低。但是這兩 個部分必須仍然是集群的或者如上所列的冗余系統(tǒng),用以具有所需要 的可靠性,因此成本降低不必非常大。
這與商用服務(wù)器(commodity server)相反,諸如使用Intel體系
結(jié)構(gòu)構(gòu)造的并且運行諸如Linux或Windows之類的不可靠或非容錯操 作系統(tǒng)的那些服務(wù)器。但是運行諸如MySQL、 Postgres或SQL服務(wù)器 的不太可定標(biāo)并且非容錯數(shù)據(jù)庫的Linux和Windows商用硬件系統(tǒng)完 全不能提供處理高可靠性事務(wù)系統(tǒng)所需要的數(shù)據(jù)完整性類型。因此唯 一實際的可選方案是或者放棄事務(wù)可靠性的無狀態(tài)體系結(jié)構(gòu)并且使用 不是如此可接受的其他技術(shù),或者是利用昂貴的硬件環(huán)境。
希望能夠在使用不太昂貴的硬件的無狀態(tài)體系結(jié)構(gòu)中執(zhí)行事務(wù)的 可靠承諾用以對于較低的成本實現(xiàn)較高的吞吐量,同時保持高可靠性 并消除事務(wù)的重復(fù)。
發(fā)明內(nèi)容
在根據(jù)本發(fā)明的系統(tǒng)中,可以使用商用硬件以充當(dāng)數(shù)據(jù)庫系統(tǒng)的 前端,同時保持無狀態(tài)體系結(jié)構(gòu)中事務(wù)提交可靠性。根據(jù)本發(fā)明的系 統(tǒng)使用單獨的表來跟蹤并確定特定的事務(wù)是否已經(jīng)先前被提交給主事 務(wù)數(shù)據(jù)庫。優(yōu)選地,這個單獨的表、即無狀態(tài)事務(wù)協(xié)議(STP (stateless transaction protocol))表使用與用戶和特定請求兩者都有關(guān)的索引來 確定特定的事務(wù)是否已經(jīng)先前被提交并且對于該事務(wù)是否已提供了響 應(yīng)。通過在實際開始對主事務(wù)數(shù)據(jù)庫的任何事務(wù)之前檢查該表,可以 確定事務(wù)是否已經(jīng)先前被提交給主事務(wù)數(shù)據(jù)庫。如果是,只提供同樣 存儲在STP表中的響應(yīng)并且不再需要原始事務(wù)。然而,如果STP表沒 有指示事務(wù)已經(jīng)被先前提交,那么提交該事務(wù)并且在STP表中產(chǎn)生條 目用以指示該提交。在優(yōu)選實施例中主事務(wù)數(shù)據(jù)庫表條目以及進入 STP表中的條目被相同的事務(wù)保護,從而減少了潛在的竟態(tài)條件。
通過利用這個單獨的表來跟蹤事務(wù)的先前提交,不大可靠的可是 相當(dāng)便宜的商用服務(wù)器硬件可以被至少用作連接到客戶端的前端用以 減少計算機系統(tǒng)的整體成本。在某些實施例中,數(shù)據(jù)庫庫服務(wù)器本身 可以是具有商用數(shù)據(jù)庫的商用服務(wù)器而不是主機或如現(xiàn)有技術(shù)中的類 似物。
圖1A和IB是根據(jù)現(xiàn)有技術(shù)的事務(wù)數(shù)據(jù)庫系統(tǒng)的圖示。
圖2是根據(jù)本發(fā)明的利用商用硬件的事務(wù)數(shù)據(jù)庫系統(tǒng)的第一實施例。
圖3是根據(jù)本發(fā)明的利用商用硬件的事務(wù)數(shù)據(jù)庫系統(tǒng)的第二實施 例。
圖4是根據(jù)本發(fā)明的利用商用硬件的事務(wù)數(shù)據(jù)庫系統(tǒng)的第三實施例。
圖5A和5B是根據(jù)本發(fā)明的可靠提交過程的流程圖。 圖6是用在圖5A和5B的過程中的表的圖示。
具體實施例方式
圖1A是現(xiàn)有技術(shù)的事務(wù)數(shù)據(jù)庫系統(tǒng)的圖示。客戶端100連接到主 機/NonStop服務(wù)器/Oracle集群102 (此后為了簡便僅稱作主機)。在 主機102內(nèi)部運行的軟件包括事務(wù)前端模塊104、數(shù)據(jù)庫代碼模塊105 和數(shù)據(jù)庫106,諸如主機數(shù)據(jù)庫、SQL/MX或者Oracle (此后稱為主 機數(shù)據(jù)庫),其包含與事務(wù)相關(guān)的數(shù)據(jù)表107。為了通信的目的,客戶 端100與事務(wù)前端模塊104通信,并且然后事務(wù)前端模塊104與數(shù)據(jù)庫 代碼模塊105通信,數(shù)據(jù)庫代碼模塊105又與數(shù)據(jù)庫106通信,用以實 際提交和存儲事務(wù)。應(yīng)理解的是,數(shù)據(jù)庫代碼模塊105可以是數(shù)據(jù)庫 106的組成部分,但是為了便于理解本發(fā)明,數(shù)據(jù)庫已經(jīng)被分成執(zhí)行前 處理和后處理功能的數(shù)據(jù)庫代碼模塊、以及執(zhí)行實際的表輸入和查找 的數(shù)據(jù)庫核(稱為數(shù)據(jù)庫106)。
在正常操作中可能的是,在事務(wù)提交之后、即在寫操作實際上已 經(jīng)在數(shù)據(jù)庫106中發(fā)生之后,從事務(wù)前端104到客戶端100的響應(yīng)可能 丟失。在大多數(shù)沒有接收到響應(yīng)的情況下,客戶端100將重試響應(yīng), 這將向數(shù)據(jù)庫106提交又一寫操作,從而提供了重復(fù)的條目。這是要 避免的情況。
現(xiàn)有技術(shù)的這個有狀態(tài)主機體系結(jié)構(gòu)的部分問題是隨著客戶端以 及從而事務(wù)數(shù)量增加,主機102中所必需的模塊數(shù)量增長相當(dāng)快。因 為許多能力被事務(wù)前端模塊104用于執(zhí)行通信操作,不認為這是對主 機102的最高效使用。因此,為了處理非常大容量的操作,必然導(dǎo)致 非常大的成本以維持有狀態(tài)體系結(jié)構(gòu)。出現(xiàn)的問題是為什么不簡單地 把事務(wù)前端104從主機102中取出用以幫助減小成本?根據(jù)現(xiàn)有技術(shù) 的有狀態(tài)協(xié)議,這無非是為響應(yīng)失敗(也即如果分成不同的單元,在 數(shù)據(jù)庫代碼模塊105和事務(wù)前端模塊104之間)提供了又一個可能性。 因此這只能潛在地加重問題,因為需要跟蹤更多的狀態(tài),而不是解決 問題。
通過將事務(wù)前端模塊104移到單獨的前端集群105,如圖IB所示, 可以部分地解決所述可定標(biāo)性(scalability)和可靠性。但是由于該移 動還是到集群,定標(biāo)仍限于集群極限并且由于集群的冗余本質(zhì)每事務(wù) 的成本仍舊高。
在圖2中示出了根據(jù)本發(fā)明的系統(tǒng),該系統(tǒng)確實使事務(wù)前端模塊 104移動到外部,而沒有集群,從而以較低的成本提供了最大的可定標(biāo) 性。兩個客戶端100鏈接到運行事務(wù)前端模塊104的商用硬件服務(wù)器 108。第三客戶端100連接到也運行事務(wù)前端模塊104的第二商用硬件 服務(wù)器IIO。優(yōu)選地,這些商用硬件服務(wù)器108和110運行Linux操作 系統(tǒng),雖然如果需要也可以使用Windows或其他操作系統(tǒng)。商用服務(wù) 器108和110以及前端模塊104然后連接到主機112,該主機同前面一 樣運行主機數(shù)據(jù)庫106。從前端模塊104接收通信并且與數(shù)據(jù)庫106通 信的不同的數(shù)據(jù)庫代碼模塊111在這個實施例中運行。在這個和根據(jù) 現(xiàn)有技術(shù)的潛在體系結(jié)構(gòu)之間的差別在于數(shù)據(jù)庫代碼模塊111中所使 用的協(xié)議已經(jīng)被改變用以確保不形成雙重轉(zhuǎn)變(transition)。這將在 下面進行更詳細的描述。此外,在數(shù)據(jù)庫106中提供新的無狀態(tài)事務(wù) 協(xié)議(STP)表113。該新的無狀態(tài)事務(wù)協(xié)議表與數(shù)據(jù)庫代碼模塊111 協(xié)作并且將在下面進行更詳細的描述。
圖3是根據(jù)本發(fā)明的第二實施例。再次客戶端100與商用服務(wù)器 108和110通信。然而,在這種情況下,主機112已經(jīng)被商用服務(wù)器114 替代,該商用服務(wù)器114不運行主機數(shù)據(jù)庫106而是運行商用數(shù)據(jù)庫 116或類似的,示例是MySQL、 Postgres和SQL服務(wù)器?;诟鶕?jù)本 發(fā)明的提交過程的操作,雖然應(yīng)理解的是由于其他可定標(biāo)性、可用性 和可維護性考慮,主機環(huán)境可能是適當(dāng)?shù)?,但如果可以以別的方式維 持對服務(wù)器114的正常運行時間要求,則不需要主機112的可靠性。
圖4示出了根據(jù)本發(fā)明的第三實施例。在這種情況下,客戶端IOO 直接連接到商用服務(wù)器118,商用服務(wù)器118包括事務(wù)前端模塊104、 數(shù)據(jù)庫代碼模塊111和數(shù)據(jù)庫116。在這種情況下,只使用一個服務(wù)器 118,因為客戶端IOO的數(shù)量足夠小,使得可以滿足通信要求而不需要 提供單獨的服務(wù)器來執(zhí)行通信任務(wù)。在具有大量客戶端的完全定標(biāo) (scaled)的環(huán)境中,如圖2或圖3中的體系結(jié)構(gòu)是優(yōu)選的。
如上所述,在事務(wù)系統(tǒng)中主要問題之一是寫事務(wù)的雙重提交的可 能性。在如圖5A和5B中所示的根據(jù)本發(fā)明的系統(tǒng)中,客戶端100在 步驟500提供新的事務(wù)到事務(wù)前端模塊104。事務(wù)前端模塊104然后執(zhí) 行必要的處理操作并且提供該新的事務(wù)給數(shù)據(jù)庫代碼模塊111,在步驟 502執(zhí)行額外操作,設(shè)置開始事務(wù)比特用以指示這是新事務(wù)。在步驟 504,數(shù)據(jù)庫代碼模塊lll接收該事務(wù)。數(shù)據(jù)庫代碼模塊lll的第一操 作是在步驟506確定這是讀還是寫事務(wù)。如果是讀事務(wù),則控制進行 到步驟507,其中執(zhí)行根據(jù)現(xiàn)有技術(shù)的正常處理。本發(fā)明的焦點在于寫 操作,其中可能發(fā)生雙重提交操作的可能性。
如果是寫操作,控制進行到步驟508,其中事務(wù)中的請求信息被哈 希(hash)用以提供唯一值.優(yōu)選地,請求信息包括要放入數(shù)據(jù)庫中 的實際數(shù)據(jù)。這優(yōu)選地被哈希成64或128比特值用以節(jié)省空間并提供 代表該數(shù)據(jù)的唯一值??刂迫缓筮M行到步驟509,其中用戶信息以類似 的方式被哈希。在優(yōu)選實施例中,用戶信息包括允許用戶跟蹤的用戶 標(biāo)識、請求該操作或多個操作所針對的表名或多個表名、以及在正被 影響的該表或多個表中的特定列。如果有多個表或列,作為任務(wù)操作 的一部分提供每一表或列用以提供筒單的哈希值。類似地,從每個表 和列的每個請求值發(fā)展請求哈希。再次,這優(yōu)選利用各種哈希技術(shù)被 哈希成64或128比特值。應(yīng)理解的是,如果希望的話可以使用其他值, 使得既保持了唯一性又優(yōu)化了存儲值。在步驟510執(zhí)行哈希之后,控 制進行到步驟512,用以檢查STP 113表來確定用戶哈希值是否已經(jīng)存 在于STP表113中。這通過數(shù)據(jù)庫代碼模塊111向數(shù)據(jù)庫106或116 提供詢問來實現(xiàn)。在所有類似情況中執(zhí)行這種類型的操作并且此后為 清楚起見省略了該操作。如果是,控制進行到步驟512用以確定請求 哈希是否也存在于STP表113中。如果在步驟510或512中有關(guān)的哈 希不存在,則控制進行到步驟514,其中測試值被設(shè)置為假值。如果在 步驟512中請求哈希存在,其中先前已經(jīng)確定用戶哈希存在,則這表 明試圖要提交的事務(wù)實際上已經(jīng)被提交并且不應(yīng)當(dāng)被重新提交,也即 是雙重事務(wù)請求??刂七M行到步驟515用以從STP表113中檢索來自 先前所提交的操作的響應(yīng)。在步驟516測試值被設(shè)置為真。
在步驟514或516之后,控制進行到步驟518,用以確定是否已經(jīng) 確定出雙重事務(wù)。如果是,控制進行到步驟520,其中已經(jīng)設(shè)置的事務(wù) 開始比特被清除并且在這種情況下已經(jīng)從STP表113中檢索到的響應(yīng)
被返回事務(wù)前端模塊104,該事務(wù)前端模塊104然后將該響應(yīng)返回到客 戶端100。
如果在步驟518沒有確定出雙重事務(wù),控制進行到步驟522,其中 實際上將事務(wù)提供給數(shù)據(jù)庫106或116,并且接收響應(yīng)用以指示數(shù)據(jù)庫 106或116的操作是否已經(jīng)成功。如果是,那么控制進行到步驟526用 以確定用戶哈希值是否已經(jīng)存在于STP表113中。如果是,控制進行 到步驟528,其中在STP表113中只是更新請求哈希和已從數(shù)據(jù)庫106 或116所接收的響應(yīng)。由于用戶哈希已經(jīng)存在,在那里先前請求哈希 的值和響應(yīng)值只需要被更新。然而,如果用戶哈希不存在,控制進行 到步驟530,其中用戶哈希值、請求哈希值和響應(yīng)被插入到STP表113 中。在完成步驟528或530之后,在步驟532評價對更新或插入操作的 響應(yīng)。如果給STP表113提供值的操作不成功,則控制進行到步驟534, 其中重新運行STP操作??刂七M行到步驟536,這也是控制從步驟524 中的不成功插入所進行到的步驟。在步驟536,重新運行數(shù)據(jù)庫操作本 身,使得在這種情況下STP操作和數(shù)據(jù)庫操作本身都從未被提交???制進行到步驟538,其中通過事務(wù)前端模塊104向客戶端100返回錯誤。 通常,然后將重試事務(wù)。如果重試所述事務(wù),則在STP表113中沒有 條目,并且沒有副本,因為它們沒有被提交并且因此這應(yīng)該是正常的 重試響應(yīng)情況。
如果在步驟532中向STP表的信息提供是成功的,則控制進行到 步驟540,其中為事務(wù)值本身和為STP表113值提供提交請求。這些 都被封裝在對數(shù)據(jù)庫106或116的單個事務(wù)中,使得不會產(chǎn)生竟態(tài)條 件。因此在步驟540,數(shù)據(jù)庫106或116實際上提交事務(wù)請求值和STP 表113值給其相應(yīng)的表。控制進行到步驟520,其中完成事務(wù)、清除開 始比特并且返回肯定響應(yīng)。
因此,STP表113被用于跟蹤由特定用戶所嘗試的上一寫事務(wù)的 值,使得不會發(fā)生雙重提交操作。對于大多數(shù)情況來說,認為在STP 表110中跟蹤來自給定用戶的單個事務(wù)是適當(dāng)?shù)?,因為通常兩個事務(wù) 不會是來自單個客戶端的未完成的。然而,必要時可以使用多條目表, 利用剛使用過的代替技術(shù)等來更新給定用戶的表值。
圖6示出了 STP表113的表結(jié)構(gòu)的優(yōu)選實施例。主鍵是用戶哈希 值,備用鍵(alternate key)是請求哈希值,并且每行中的第三條目是
響應(yīng)、即當(dāng)最初提交事務(wù)時從數(shù)據(jù)庫核所提供的響應(yīng)。
因此可以看出使用這個過程允許僅單一地提交事務(wù),而沒有雙重 提交能力,因為如果事務(wù)實際上被提交并且然后在返回客戶端的系統(tǒng) 中的任何位置會發(fā)生響應(yīng)丟失,并且客戶端接著馬上重試,該雙重提 交被檢測并且響應(yīng)只是被重新提供,而不需要實際上執(zhí)行全操作。這 允許事務(wù)前端、即具有最大可定標(biāo)性要求的部件被移動到商用硬件, 而不需要集群。依賴于其他要求,主機或商用服務(wù)器和相關(guān)的數(shù)據(jù)庫 可以結(jié)合事務(wù)前端的商用硬件被使用。
根據(jù)上面的描述應(yīng)理解的是,在不脫離本發(fā)明的真實精神的前提 下可以以本發(fā)明的各種實施例的方式做出修改和變化。本說明書中的 描述僅是為了舉例說明的目的,并不應(yīng)在限制的意義上來解釋。本發(fā) 明的范圍僅由隨附權(quán)利要求書的語言來限定。
權(quán)利要求
1. 一種用于防止從客戶端到數(shù)據(jù)庫雙重提交事務(wù)的方法,該方法包括提供表用以跟蹤所提交的事務(wù),該表包括用于識別事務(wù)的值和指示對提交事務(wù)的響應(yīng)的值的條目;提供要提交到數(shù)據(jù)庫的新事務(wù)并且接收事務(wù)響應(yīng);如果在提供新事務(wù)時接收到成功的響應(yīng),則提供識別新事務(wù)的值和事務(wù)響應(yīng)到該表并且接收響應(yīng);如果在提供識別新事務(wù)的值和事務(wù)響應(yīng)到該表時接收到成功的響應(yīng),提交新事務(wù)到數(shù)據(jù)庫并且提交識別新事務(wù)的值和事務(wù)值到該表;以及提供事務(wù)響應(yīng),用于在提交之后傳遞給客戶端。
2. 權(quán)利要求l的方法,其中識別新事務(wù)的值以識別用戶的值和識別新事務(wù)中的數(shù)據(jù)的值為基礎(chǔ)。
3. 權(quán)利要求2的方法,其中識別用戶的值是用戶標(biāo)識、數(shù)據(jù)庫中 的被請求的表、以及數(shù)據(jù)庫中的被請求的列的哈希。
4. 權(quán)利要求2的方法,其中識別新事務(wù)中的數(shù)據(jù)的值是數(shù)據(jù)的哈希。
5. 權(quán)利要求4的方法,其中識別用戶的值是用戶標(biāo)識、數(shù)據(jù)庫中 的被請求的表、以及數(shù)據(jù)庫中的被請求的列的哈希。
6. 權(quán)利要求2的方法,其中提供識別新事務(wù)的值到該表包括 確定具有與識別新事務(wù)的用戶的值相同的、識別用戶的值的事務(wù)是否存在;如果存在這種事務(wù),在更新操作中提供識別新事務(wù)中的數(shù)據(jù)的值 和事務(wù)響應(yīng);以及如果這種事務(wù)不存在,在插入操作中提供識別用戶的值和識別新 事務(wù)中的數(shù)據(jù)的值和事務(wù)響應(yīng)。
7. 權(quán)利要求l的方法,還包括如果在提供新事務(wù)時所接收的響應(yīng)不成功,重新運行數(shù)據(jù)庫中的 事務(wù)操作;如果在提供識別新事務(wù)的值和事務(wù)響應(yīng)時所接收的響應(yīng)不成功, 重新運行對表的操作以及數(shù)據(jù)庫中的事務(wù)操作;以及如果發(fā)生了任何重新運行,提供錯誤響應(yīng)用于在重新運行之后傳遞給客戶端。
8. —種用于防止從客戶端到數(shù)據(jù)庫雙重提交事務(wù)的方法,該方法 包括提供表用于跟蹤所提交的事務(wù),該表包括識別事務(wù)的值和指示對 提交事務(wù)的響應(yīng)的值的條目; 從客戶端接收新事務(wù);將識別事務(wù)的值的表中的條目和識別新事務(wù)的值進行比較;以及 如果在識別新事務(wù)的值與識別事務(wù)的表中的值之間匹配,不提供 要提交到數(shù)據(jù)庫的新事務(wù)。
9. 權(quán)利要求8的方法,還包括如果在識別新事務(wù)的值與識別事務(wù)的表中的值之間匹配,提供與表中的事務(wù)相關(guān)聯(lián)的響應(yīng)用于傳遞給客戶端。
10. 權(quán)利要求8的方法,其中識別事務(wù)的值以識別用戶的值和識別新事務(wù)中的數(shù)據(jù)的值為基礎(chǔ)。
11. 權(quán)利要求10的方法,其中識別用戶的值是用戶標(biāo)識、數(shù)據(jù)庫 中的被請求的表、以及數(shù)據(jù)庫中的被請求的列的哈希。
12. 權(quán)利要求10的方法,其中識別新事務(wù)中的數(shù)據(jù)的值是數(shù)據(jù)的 哈希。
13. 權(quán)利要求12的方法,其中識別用戶的值是用戶標(biāo)識、數(shù)據(jù)庫 中的被請求的表、以及數(shù)據(jù)庫中的被請求的列的哈希。
14. 一種用于防止從客戶端到數(shù)據(jù)庫雙重提交事務(wù)的方法,該方 法包括提供表用以跟蹤所提交的事務(wù),該表包括用于識別事務(wù)的值和指 示對提交事務(wù)的響應(yīng)的值的條目; 從客戶端接收新事務(wù);將識別事務(wù)的值的表中的條目和識別新事務(wù)的值進行比較; 如果在識別新事務(wù)的值與識別事務(wù)的表中的值之間匹配,不提供要提交到數(shù)據(jù)庫的新事務(wù),并且提供與表中的事務(wù)相關(guān)聯(lián)的響應(yīng)用于 傳遞給客戶端;如果在識別新事務(wù)的值與識別事務(wù)的表中的值之間不匹配,提供 要提交到數(shù)據(jù)庫的新事務(wù)并且接收事務(wù)響應(yīng);如果在提交新事務(wù)時接收到成功的響應(yīng),提供識別新事務(wù)的值和 事務(wù)響應(yīng)到該表并且接收響應(yīng);如果在提供識別新事務(wù)的值和事務(wù)響應(yīng)到該表時接收到成功的響 應(yīng),提交新事務(wù)到數(shù)據(jù)庫并且提交識別新事務(wù)的值和事務(wù)值到該表;以及提供事務(wù)響應(yīng)用于在提交之后傳遞給客戶端。
15. 權(quán)利要求14的方法,其中識別事務(wù)的值以識別用戶的值和識別新事務(wù)中的數(shù)據(jù)的值為基礎(chǔ)。
16. 權(quán)利要求15的方法,其中識別用戶的值是用戶標(biāo)識、數(shù)據(jù)庫 中的被請求的表、以及數(shù)據(jù)庫中的被請求的列的哈希。
17. 權(quán)利要求15的方法,其中識別新事務(wù)中的數(shù)據(jù)的值是數(shù)據(jù)的 哈希。
18. 權(quán)利要求17的方法,其中識別用戶的值是用戶標(biāo)識、數(shù)據(jù)庫 中的被請求的表、以及數(shù)據(jù)庫中的被請求的列的哈希。
19. 權(quán)利要求15的方法,其中提供識別新事務(wù)的值到該表包括 確定具有與識別新事務(wù)的用戶的值相同的、識別用戶的值的事務(wù)是否存在;如果存在這種事務(wù),在更新操作中提供識別新事務(wù)中的數(shù)據(jù)的值和事務(wù)響應(yīng);以及如果這種事務(wù)不存在,在插入操作中提供識別用戶的值和識別新 事務(wù)中的數(shù)據(jù)的值和事務(wù)響應(yīng)。
20. 權(quán)利要求14的方法,還包括如果在提供新事務(wù)時所接收的響應(yīng)不成功,重新運行數(shù)據(jù)庫中的事務(wù)操作;如果在提供識別新事務(wù)的值和事務(wù)響應(yīng)時所接收的響應(yīng)不成功,重新運行對表的操作以及數(shù)據(jù)庫中的事務(wù)操作;以及如果發(fā)生了任何重新運行,提供錯誤響應(yīng)用于在重新運行之后傳 遞給客戶端。
21. —種用于防止從客戶端到數(shù)據(jù)庫雙重提交事務(wù)的系統(tǒng),具有執(zhí) 行與客戶端的通信的前端模塊,該系統(tǒng)包括數(shù)據(jù)庫服務(wù)器,其耦合到商用服務(wù)器并且包括耦合到前端模塊的 數(shù)據(jù)庫代碼模塊和耦合到數(shù)據(jù)庫代碼模塊的數(shù)據(jù)庫,其中數(shù)據(jù)庫包括表用以跟蹤所提交的事務(wù),該表包括用于識別事務(wù)的值和指示對提交事務(wù)的響應(yīng)的值的條目;以及 其中數(shù)據(jù)庫代碼模塊提供要提交到數(shù)據(jù)庫的新事務(wù)并且接收事務(wù)響應(yīng); 如果在提供新事務(wù)時,接收到成功的響應(yīng),提供識別新事務(wù)的值 和事務(wù)響應(yīng)到該表并且接收響應(yīng);如果在提供識別新事務(wù)的值和事務(wù)響應(yīng)到該表時接收到成功的響應(yīng),提交新事務(wù)到數(shù)據(jù)庫并且提交識別新事務(wù)的值和事務(wù)值到該表; 以及提供事務(wù)響應(yīng)用于在提交之后傳遞給前端模塊。
22. 權(quán)利要求21的系統(tǒng),其中數(shù)據(jù)庫服務(wù)器是商用服務(wù)器。
23. 權(quán)利要求21的系統(tǒng),其中數(shù)據(jù)庫服務(wù)器是主機、NonStop服 務(wù)器或Oracle集群之一。
24. 權(quán)利要求21的系統(tǒng),該系統(tǒng)還包括商用服務(wù)器,用于耦合到客戶端并且接收來自客戶端的新事務(wù), 該商用服務(wù)器包括前端模塊并且耦合到數(shù)據(jù)庫服務(wù)器。
25. 權(quán)利要求21的系統(tǒng),其中有多個客戶端,該系統(tǒng)還包括 多個商用服務(wù)器,用于耦合到多個客戶端并且接收來自多個客戶端的新事務(wù),多個商用服務(wù)器的每一個都包括前端模塊用以執(zhí)行與多 個客戶端中的至少一部分的通信,其中多個客戶端被分布在多個商用 服務(wù)器之中,其中數(shù)據(jù)庫服務(wù)器耦合到多個商用服務(wù)器的每一個并且數(shù)據(jù)庫代 碼模塊耦合到前端模塊的每一個。
26. 權(quán)利要求21的系統(tǒng),其中識別新事務(wù)的值以識別用戶的值和 識別新事務(wù)中的數(shù)據(jù)的值為基礎(chǔ)。
27. 權(quán)利要求26的系統(tǒng),其中識別用戶的值是用戶標(biāo)識、數(shù)據(jù)庫 中的被請求的表、以及數(shù)據(jù)庫中的被請求的列的哈希。
28. 權(quán)利要求26的系統(tǒng),其中識別新事務(wù)中的數(shù)據(jù)的值是數(shù)據(jù)的 哈希。
29. 權(quán)利要求28的系統(tǒng),其中識別用戶的值是用戶標(biāo)識、數(shù)據(jù)庫 中的被請求的表、以及數(shù)據(jù)庫中的被請求的列的哈希。
30. 權(quán)利要求26的系統(tǒng),其中提供識別新事務(wù)的值到該表包括 確定具有與識別新事務(wù)的用戶的值相同的、識別用戶的值的事務(wù)是否存在;如果存在這種事務(wù),在更新操作中提供識別新事務(wù)中的數(shù)據(jù)的值 和事務(wù)響應(yīng);以及如果這種事務(wù)不存在,在插入操作中提供識別用戶的值和識別新 事務(wù)中的數(shù)據(jù)的值和事務(wù)響應(yīng)。
31. 權(quán)利要求25的系統(tǒng),其中數(shù)據(jù)庫代碼模塊還 如果在提供新事務(wù)時所接收的響應(yīng)不成功,重新運行數(shù)據(jù)庫中的事務(wù)操作;如果在提供識別新事務(wù)的值和事務(wù)響應(yīng)時所接收的響應(yīng)不成功, 請求重新運行對表的操作以及數(shù)據(jù)庫中的事務(wù)操作;以及如果發(fā)生了任何重新運行,在重新運行之后提供錯誤響應(yīng)給客戶。
32. —種用于防止從客戶端到數(shù)據(jù)庫雙重提交事務(wù)的系統(tǒng),具有 執(zhí)行與客戶端的通信的前端模塊,該系統(tǒng)包括數(shù)據(jù)庫服務(wù)器,其耦合到商用服務(wù)器并且包括耦合到前端模塊的 數(shù)據(jù)庫代碼模塊和耦合到數(shù)據(jù)庫代碼模塊的數(shù)據(jù)庫,其中數(shù)據(jù)庫包括表用于跟蹤所提交的事務(wù),該表包括識別事務(wù)的 值和指示對提交事務(wù)的響應(yīng)的值的條目;以及 其中數(shù)據(jù)庫代碼模塊 從客戶端接收新事務(wù);將識別事務(wù)的值的表中的條目和識別新事務(wù)的值進行比較;以及 如果在識別新事務(wù)的值與識別事務(wù)的表中的值之間匹配,不提供要提交到數(shù)據(jù)庫的新事務(wù)。
33. 權(quán)利要求32的系統(tǒng),其中數(shù)據(jù)庫代碼模塊還 如果在識別新事務(wù)的值與識別事務(wù)的表中的值之間匹配,提供與表中的事務(wù)相關(guān)聯(lián)的響應(yīng)用于傳遞給前端模塊。
34. 權(quán)利要求32的系統(tǒng),其中識別事務(wù)的值以識別用戶的值和識別新事務(wù)中的數(shù)據(jù)的值為基礎(chǔ)。
35. 權(quán)利要求34的系統(tǒng),其中識別用戶的值是用戶標(biāo)識、數(shù)據(jù)庫 中的被請求的表、以及數(shù)據(jù)庫中的被請求的列的哈希。
36. 權(quán)利要求34的系統(tǒng),其中識別新事務(wù)中的數(shù)據(jù)的值是數(shù)據(jù)的 哈希。
37. 權(quán)利要求36的系統(tǒng),其中識別用戶的值是用戶標(biāo)識、數(shù)據(jù)庫 中的被請求的表、以及數(shù)據(jù)庫中的被請求的列的哈希。
38. 權(quán)利要求32的系統(tǒng),該系統(tǒng)還包括商用服務(wù)器,用于耦合到客戶端并且接收來自客戶端的新事務(wù), 該商用服務(wù)器包括前端模塊并且耦合到數(shù)據(jù)庫服務(wù)器。
39. 權(quán)利要求32的系統(tǒng),其中有多個客戶端,該系統(tǒng)還包括 多個商用服務(wù)器,用于耦合到多個客戶端并且接收來自多個客戶端的新事務(wù),多個商用服務(wù)器中的每一個都包括前端模塊用以執(zhí)行與 多個客戶端中的至少一部分的通信,其中多個客戶端分布在多個商用 服務(wù)器之中,其中數(shù)據(jù)庫服務(wù)器耦合到多個商用服務(wù)器中的每一個并且數(shù)據(jù)庫 代碼模塊耦合到前端模塊中的每一個。
40. —種用于防止從客戶端到數(shù)據(jù)庫雙重提交事務(wù)的系統(tǒng),具有 執(zhí)行與客戶端的通信的前端模塊,該系統(tǒng)包括數(shù)據(jù)庫服務(wù)器,其耦合到商用服務(wù)器并且包括耦合到前端模塊的 數(shù)據(jù)庫代碼模塊和耦合到數(shù)據(jù)庫代碼模塊的數(shù)據(jù)庫,其中數(shù)據(jù)庫包括表用以跟蹤所提交的事務(wù),該表包括用于識別事 務(wù)的值和指示對提交事務(wù)的響應(yīng)的值的條目;以及其中數(shù)據(jù)庫代碼模塊從客戶端接收新事務(wù);將識別事務(wù)的值的表中的條目和識別新事務(wù)的值進行比較; 如果在識別新事務(wù)的值與識別事務(wù)的表中的值之間匹配,不提供要提交到數(shù)據(jù)庫的新事務(wù),并且提供與表中的事務(wù)相關(guān)聯(lián)的響應(yīng)給客戶端;如果在識別新事務(wù)的值與識別事務(wù)的表中的值之間不匹配,提供 要提交到數(shù)據(jù)庫的新事務(wù)并且接收事務(wù)響應(yīng);如果在提交新事務(wù)時接收到成功的響應(yīng),提供識別新事務(wù)的值和 事務(wù)響應(yīng)到該表并且接收響應(yīng);如果在提供識別新事務(wù)的值和事務(wù)響應(yīng)到該表時接收到成功的響 應(yīng),提交新事務(wù)到數(shù)據(jù)庫并且提交識別新事務(wù)的值和事務(wù)值到該表; 以及提供事務(wù)響應(yīng)用于在提交之后傳遞給前端模塊。
41. 權(quán)利要求40的系統(tǒng),其中識別事務(wù)的值以識別用戶的值和識別新事務(wù)中的數(shù)據(jù)的值為基礎(chǔ)。
42. 權(quán)利要求41的系統(tǒng),其中識別用戶的值是用戶標(biāo)識、數(shù)據(jù)庫 中的被請求的表、以及數(shù)據(jù)庫中的被請求的列的哈希。
43. 權(quán)利要求41的系統(tǒng),其中識別新事務(wù)中的數(shù)據(jù)的值是數(shù)據(jù)的 哈希。
44. 權(quán)利要求43的系統(tǒng),其中識別用戶的值是用戶標(biāo)識、數(shù)據(jù)庫 中的被請求的表、以及數(shù)據(jù)庫中的被請求的列的哈希。
45. 權(quán)利要求41的系統(tǒng),其中提供識別新事務(wù)的值到該表包括 確定具有與識別新事務(wù)的用戶的值相同的、識別用戶的值的事務(wù)是否存在;如果存在這種事務(wù),在更新操作中提供識別新事務(wù)中的數(shù)據(jù)的值和事務(wù)響應(yīng);以及如果這種事務(wù)不存在,在插入操作中提供識別用戶的值和識別新 事務(wù)中的數(shù)據(jù)的值和事務(wù)響應(yīng)。
46. 權(quán)利要求40的系統(tǒng),其中數(shù)據(jù)庫代碼模塊還 如果在提供新事務(wù)時所接收的響應(yīng)不成功,請求重新運行數(shù)據(jù)庫中的事務(wù)操作;如果在提供識別新事務(wù)的值和事務(wù)響應(yīng)時所接收的響應(yīng)不成功, 請求重新運行對表的操作以及數(shù)據(jù)庫中的事務(wù)操作;以及如果發(fā)生了任何重新運行,提供錯誤響應(yīng)用于在重新運行之后傳 遞給客戶端。
47. 權(quán)利要求40的系統(tǒng),該系統(tǒng)還包括商用服務(wù)器,用于耦合到客戶端并且接收來自客戶端的新事務(wù), 該商用服務(wù)器包括前端模塊并且耦合到數(shù)據(jù)庫服務(wù)器。
48. 權(quán)利要求40的系統(tǒng),其中有多個客戶端,該系統(tǒng)還包括 多個商用服務(wù)器,用于耦合到多個客戶端并且接收來自多個客戶端的新事務(wù),多個商用服務(wù)器中的每一個都包括前端模塊用以執(zhí)行與 多個客戶端中的至少一部分的通信,其中多個客戶端分布在多個商用 服務(wù)器之中,其中數(shù)據(jù)庫服務(wù)器耦合到多個商用服務(wù)器中的每一個并且數(shù)據(jù)庫 代碼模塊耦合到前端模塊中的每一個。
49. 一種計算機可讀介質(zhì)或媒介,具有存儲在其中的計算機可執(zhí) 行指令用于應(yīng)用,其執(zhí)行用以防止從客戶端到數(shù)據(jù)庫雙重提交事務(wù)的 以下方法,該方法包括提供表用以跟蹤所提交的事務(wù),該表包括用于識別事務(wù)的值和指 示對提交事務(wù)的響應(yīng)的值的條目;提供要提交到數(shù)據(jù)庫的新事務(wù)并且接收事務(wù)響應(yīng);如果在提供新事務(wù)時接收到成功的響應(yīng),提供識別新事務(wù)的值和 事務(wù)響應(yīng)到該表并且接收響應(yīng);如果在提供識別新事務(wù)的值和事務(wù)響應(yīng)到該表時接收到成功的響應(yīng),提交新事務(wù)到數(shù)據(jù)庫并且提交識別新事務(wù)的值和事務(wù)值到該表; 以及提供事務(wù)響應(yīng)用于在提交之后傳遞給客戶端。
50. 權(quán)利要求49的計算機可讀介質(zhì)或媒介,其中識別新事務(wù)的值 以識別用戶的值和識別新事務(wù)中的的數(shù)據(jù)的值為基礎(chǔ)。
51. 權(quán)利要求50的計算機可讀介質(zhì)或媒介,其中識別用戶的值是 用戶標(biāo)識、數(shù)據(jù)庫中的被請求的表、以及數(shù)據(jù)庫中的被請求的列的哈 希。
52. 權(quán)利要求50的計算機可讀介質(zhì)或媒介,其中識別新事務(wù)中的 數(shù)據(jù)的值是數(shù)據(jù)的哈希。
53. 權(quán)利要求52的計算機可讀介質(zhì)或媒介,其中識別用戶的值是 用戶標(biāo)識、數(shù)據(jù)庫中的被請求的表、以及數(shù)據(jù)庫中的被請求的列的哈 希。
54. 權(quán)利要求50的計算機可讀介質(zhì)或媒介,其中提供識別新事務(wù) 的值到該表包括確定具有與識別新事務(wù)的用戶的值相同的、識別用戶的值的事務(wù) 是否存在;如果存在這種事務(wù),在更新操作中提供識別新事務(wù)中的數(shù)據(jù)的值 和事務(wù)響應(yīng);以及如果這種事務(wù)不存在,在插入操作中提供識別用戶的值和識別新 事務(wù)中的數(shù)據(jù)的值和事務(wù)響應(yīng)。
55. 權(quán)利要求49的計算機可讀介質(zhì)或媒介,該方法還包括 如果在提供新事務(wù)時所接收的響應(yīng)不成功,重新運行數(shù)據(jù)庫中的 事務(wù)操作;如果在提供識別新事務(wù)的值和事務(wù)響應(yīng)時所接收的響應(yīng)不成功, 重新運行對表的操作以及數(shù)據(jù)庫中的事務(wù)操作;以及如果發(fā)生了任何重新運行,提供錯誤響應(yīng)用于在重新運行之后傳 遞給客戶端。
56. —種計算機可讀介質(zhì)或媒介,具有存儲在其中的計算機可執(zhí) 行指令用于應(yīng)用,其執(zhí)行用于防止從客戶端到數(shù)據(jù)庫雙重提交事務(wù)的 以下方法,該方法包括提供跟蹤所提交的事務(wù)的表,該表包括識別事務(wù)的值和指示對提 交事務(wù)的響應(yīng)的值的條目; 從客戶端接收新事務(wù);將識別事務(wù)的值的表中的條目和識別新事務(wù)的值進行比較;以及 如果在識別新事務(wù)的值與識別事務(wù)的表中的值之間匹配,不提供要提交到數(shù)據(jù)庫的新事務(wù)。
57. 權(quán)利要求56的計算機可讀介質(zhì)或媒介,該方法還包括 如果在識別新事務(wù)的值與識別事務(wù)的表中的值之間匹配,提供與表中的事務(wù)相關(guān)聯(lián)的響應(yīng)用于傳遞給客戶端。
58. 權(quán)利要求56的計算機可讀介質(zhì)或媒介,其中識別事務(wù)的值以識別用戶的值和識別新事務(wù)中的數(shù)據(jù)的值為基礎(chǔ)。
59. 權(quán)利要求58的計算機可讀介質(zhì)或媒介,其中識別用戶的值是 用戶標(biāo)識、數(shù)據(jù)庫中的被請求的表、以及數(shù)據(jù)庫中被請求的列的哈希。
60. 權(quán)利要求58的計算機可讀介質(zhì)或媒介,其中識別新事務(wù)中的 數(shù)據(jù)的值是數(shù)據(jù)的哈希。
61. 權(quán)利要求60的計算機可讀介質(zhì)或媒介,其中識別用戶的值是 用戶標(biāo)識、數(shù)據(jù)庫中的被請求的表、以及數(shù)據(jù)庫中的被請求的列的哈 希。
62. —種計算機可讀介質(zhì)或媒介,具有存儲在其中的計算機可執(zhí) 行指令用于應(yīng)用,其執(zhí)行用于防止從客戶端到數(shù)據(jù)庫雙重提交事務(wù)的 以下方法,該方法包4舌提供表用以跟蹤所提交的事務(wù),該表包括用于識別事務(wù)的值和指 示對提交事務(wù)的響應(yīng)的值的條目; 從客戶端接收新事務(wù);將識別事務(wù)的值的表中的條目和識別新事務(wù)的值進行比較; 如果在識別新事務(wù)的值與識別事務(wù)的表中的值之間匹配,不提供要提交到數(shù)據(jù)庫的新事務(wù),并且提供與表中的事務(wù)相關(guān)聯(lián)的響應(yīng)用于傳遞給客戶端;如果在識別新事務(wù)的值與識別事務(wù)的表中的值之間不匹配,提供要提交到數(shù)據(jù)庫的新事務(wù)并且接收事務(wù)響應(yīng);如果在提交新事務(wù)時接收到成功的響應(yīng),提供識別新事務(wù)的值和 事務(wù)響應(yīng)到該表并且接收響應(yīng);如果在提供識別新事務(wù)的值和事務(wù)響應(yīng)到該表時接收到成功的響應(yīng),提交新事務(wù)到數(shù)據(jù)庫并且提交識別新事務(wù)的值和事務(wù)值到該表; 以及提供事務(wù)響應(yīng)用于在提交之后傳遞給客戶端。
63. 權(quán)利要求62的計算機可讀介質(zhì)或媒介,其中識別事務(wù)的值以 識別用戶的值和識別新事務(wù)中的數(shù)據(jù)的值為基礎(chǔ)。
64. 權(quán)利要求63的計算機可讀介質(zhì)或媒介,其中識別用戶的值是 用戶標(biāo)識、數(shù)據(jù)庫中的被請求的表、以及數(shù)據(jù)庫中的被請求的列的哈 希。
65. 權(quán)利要求63的計算機可讀介質(zhì)或媒介,其中識別新事務(wù)中數(shù) 據(jù)的值是數(shù)據(jù)的哈希。
66. 權(quán)利要求65的計算機可讀介質(zhì)或媒介,其中識別用戶的值是 用戶標(biāo)識、數(shù)據(jù)庫中的被請求的表、以及數(shù)據(jù)庫中的被請求的列的哈 希。
67. 權(quán)利要求63的計算機可讀介質(zhì)或媒介,其中提供識別新事務(wù) 的值到該表包括確定具有與識別新事務(wù)的用戶的值相同的、識別用戶的值的事務(wù) 是否存在;如果存在這種事務(wù),在更新操作中提供識別新事務(wù)中的數(shù)據(jù)的值和事務(wù)響應(yīng);以及如果這種事務(wù)不存在,在插入操作中提供識別用戶的值和識別新 事務(wù)中的數(shù)據(jù)的值和事務(wù)響應(yīng)。
68. 權(quán)利要求62的計算機可讀介質(zhì)或媒介,該方法還包括 如果在提供新事務(wù)時所接收的響應(yīng)不成功,重新運行數(shù)據(jù)庫中的事務(wù)操作;如果在提供識別新事務(wù)的值和事務(wù)響應(yīng)時所接收的響應(yīng)不成功, 重新運行對表的操作以及數(shù)據(jù)庫中的事務(wù)操作;以及如果發(fā)生了任何重新運行,提供錯誤響應(yīng)用于在重新運行之后傳 遞給客戶端。
全文摘要
公開了一種系統(tǒng),其中商用硬件可以用于至少充當(dāng)對數(shù)據(jù)庫系統(tǒng)的前端,同時維持事務(wù)提交可靠性。提供單獨的表,用以跟蹤事務(wù)之前是否已經(jīng)被提交。優(yōu)選地,這個單獨的無狀態(tài)事務(wù)協(xié)議(STP)表使用與用戶和特定請求有關(guān)的索引用以確定特定的事務(wù)之前是否已經(jīng)被提交。通過在提供事務(wù)到主事務(wù)數(shù)據(jù)庫之前檢查該表,可以確定該事務(wù)之前是否已經(jīng)被提交。如果是,只是提供存儲在STP表中的響應(yīng)。如果不是,那么提交事務(wù)并且在STP表中產(chǎn)生條目用以指示提交。在優(yōu)選實施例中,主事務(wù)數(shù)據(jù)庫表條目和進入STP表的條目利用相同的事務(wù)來提交。
文檔編號G06F7/00GK101390044SQ200680036539
公開日2009年3月18日 申請日期2006年7月21日 優(yōu)先權(quán)日2005年8月8日
發(fā)明者D·B·格雷 申請人:西姆德斯克技術(shù)公司