本發(fā)明涉及電子商務(wù)技術(shù)領(lǐng)域,特別涉及一種并發(fā)交易數(shù)據(jù)處理方法及裝置。
背景技術(shù):
電子商務(wù)是交易雙方通過計算機網(wǎng)絡(luò)所進行的所有交易活動,即通過交易發(fā)生實物性商品(如服裝、家用電器等)所有權(quán)的轉(zhuǎn)移,或?qū)崿F(xiàn)了服務(wù)性商品(如金融服務(wù)網(wǎng)絡(luò)信息咨詢服務(wù)等)的有償消費。在電子商務(wù)中,商家一方為了提高商品銷售量或擴大該商品的影響力,商家會不定時的推出限量的低價產(chǎn)品用來進行秒殺或者限時搶購,對于現(xiàn)有的秒殺或者限時搶購數(shù)據(jù)處理系統(tǒng),其使用一個事務(wù)(事務(wù)是一步或幾步基本操作組成的邏輯執(zhí)行單元,這些基本操作作為一個整體執(zhí)行單元,它們要么全部執(zhí)行,要么全部取消,決不能僅僅執(zhí)行部分。一般而言,每次客戶請求,對應(yīng)一個業(yè)務(wù)邏輯方法,一個業(yè)務(wù)邏輯方法往往具有邏輯上的原子性,應(yīng)該使用事務(wù)。例如一個轉(zhuǎn)賬操作,對應(yīng)修改兩個賬戶的余額,這兩個賬戶的修改要么同時生效,要么同時取消——同時生效是轉(zhuǎn)賬成功,同時取消是轉(zhuǎn)賬失敗;但不可只修改一個賬戶,那將破壞數(shù)據(jù)庫的完整性)控制提交交易,即使用一個事務(wù)來控制扣減額度操作和生成交易操作,這樣會將額度表和交易表同時鎖定,可以保證扣減額度和生成交易要么同時成功,要么同時失敗。但是這樣存在以下缺點:在有多個客戶進行秒殺或者限時搶購請求時,秒殺或者限時搶購數(shù)據(jù)處理系統(tǒng)必須在處理完成前一個客戶的扣減額度和生成交易這兩個操作之后,才會響應(yīng)下一個客戶的請求,這樣會花費很多的時間來響應(yīng)多個客戶請求,從而降低交易處理效率。
技術(shù)實現(xiàn)要素:
本發(fā)明實施例提供了一種并發(fā)交易數(shù)據(jù)處理方法,可以減少響應(yīng)多個客戶請求的時間,提高交易處理效率。該方法包括:
接收多個客戶提交的并發(fā)交易數(shù)據(jù),所述并發(fā)交易數(shù)據(jù)中包括預(yù)購商品標識和預(yù)購商品數(shù)量;
根據(jù)所述多個客戶中的一個客戶提交的并發(fā)交易數(shù)據(jù)中的商品標識和預(yù)購商品數(shù)量,從額度表中扣減相應(yīng)預(yù)購商品的剩余數(shù)量;所述額度表包括商品標識和對應(yīng)的商品剩余數(shù)量;
當扣減預(yù)購商品的剩余數(shù)量失敗時,響應(yīng)客戶交易失??;
當扣減預(yù)購商品的剩余數(shù)量成功時,根據(jù)并發(fā)交易數(shù)據(jù)生成交易;
當生成交易成功時,響應(yīng)客戶交易成功;
當生成交易失敗時,響應(yīng)客戶交易失?。?/p>
在對當前客戶進行扣減預(yù)購商品的剩余數(shù)量操作完成之后,對下一個客戶進行扣減預(yù)購商品的剩余數(shù)量操作,無需等待當前客戶完成生成交易操作;
所述扣減預(yù)購商品的剩余數(shù)量和生成交易由兩個獨立的事務(wù)控制。
在一個實施例中,根據(jù)所述多個客戶中的一個客戶提交的并發(fā)交易數(shù)據(jù)中的商品標識和預(yù)購商品數(shù)量,從額度表中扣減相應(yīng)預(yù)購商品的剩余數(shù)量,具體包括:
根據(jù)所述商品標識從額度表中查找到對應(yīng)的商品標識和對應(yīng)的商品剩余數(shù)量;
用對應(yīng)的商品剩余數(shù)量減去預(yù)購商品數(shù)量,如果扣減結(jié)果大于等于0,則扣減預(yù)購商品的剩余數(shù)量成功;如果扣減結(jié)果小于0,則扣減預(yù)購商品的剩余數(shù)量失敗。
在一個實施例中,所述根據(jù)并發(fā)交易數(shù)據(jù)生成交易,具體包括:
將并發(fā)交易數(shù)據(jù)插入交易表中,生成交易;
如果并發(fā)交易數(shù)據(jù)插入成功,響應(yīng)客戶交易成功;
如果并發(fā)交易數(shù)據(jù)插入失敗,響應(yīng)客戶交易失??;
所述交易表中包括客戶信息、商品標識和對應(yīng)的預(yù)購商品數(shù)量。
在一個實施例中,還包括:
當扣減預(yù)購商品的剩余數(shù)量操作成功,而生成交易操作失敗時,商品可售最大數(shù)量減去預(yù)購商品的實際購買總量不等于商品剩余數(shù)量,進行額度補償操作。
在一個實施例中,按照如下方式進行額度補償:
確定額度表中商品剩余數(shù)量為0,且對應(yīng)的商品銷售狀態(tài)為未售罄的商品標識和商品可售最大數(shù)量;
根據(jù)所述商品標識,確定交易表中對應(yīng)的預(yù)購商品的實際購買總量;
將所述商品可售最大數(shù)量與所述實際購買總量進行比較,如果兩者不等,將相應(yīng)的商品剩余數(shù)量修改為所述商品可售最大數(shù)量減去所述實際購買總量;如果兩者相等,將對應(yīng)的商品銷售狀態(tài)修改為已售罄;
所述額度表還包括對應(yīng)的商品可售最大數(shù)量和對應(yīng)的商品銷售狀態(tài);所述對應(yīng)的商品銷售狀態(tài)包括已售罄狀態(tài)和未售罄狀態(tài)。
本發(fā)明實施例還提供了一種并發(fā)交易數(shù)據(jù)處理系統(tǒng),可以減少響應(yīng)多個客戶請求的時間,提高交易處理效率。該系統(tǒng)包括:
接收模塊,用于接收多個客戶提交的并發(fā)交易數(shù)據(jù),所述并發(fā)交易數(shù)據(jù)包括預(yù)購商品標識和預(yù)購商品數(shù)量;
交易數(shù)據(jù)處理模塊,用于根據(jù)所述多個客戶中的一個客戶提交的并發(fā)交易數(shù)據(jù)中的商品標識和預(yù)購商品數(shù)量,從額度表中扣減相應(yīng)預(yù)購商品的剩余數(shù)量;所述額度表包括商品標識和對應(yīng)的商品剩余數(shù)量;
當扣減預(yù)購商品的剩余數(shù)量失敗時,響應(yīng)客戶交易失?。?/p>
當扣減預(yù)購商品的剩余數(shù)量成功時,根據(jù)并發(fā)交易數(shù)據(jù)生成交易;
當生成交易成功時,響應(yīng)客戶交易成功;
當生成交易失敗時,響應(yīng)客戶交易失敗;
在對當前客戶進行扣減預(yù)購商品的剩余數(shù)量操作完成之后,對下一個客戶進行扣減預(yù)購商品的剩余數(shù)量操作,無需等待當前客戶完成生成交易操作;
所述扣減預(yù)購商品的剩余數(shù)量和生成交易由兩個獨立的事務(wù)控制。
在一個實施例中,所述交易數(shù)據(jù)處理模塊具體用于:
按照如下方式扣減預(yù)購商品的剩余數(shù)量:
根據(jù)所述商品標識從額度表中查找到對應(yīng)的商品標識和對應(yīng)的商品剩余數(shù)量;
用對應(yīng)的商品剩余數(shù)量減去預(yù)購商品數(shù)量,如果扣減結(jié)果大于等于0,則扣減預(yù)購商品的剩余數(shù)量成功;如果扣減結(jié)果小于0,則扣減預(yù)購商品的剩余數(shù)量失敗。
在一個實施例中,所述交易數(shù)據(jù)處理模塊具體用于:
按照如下方式生成交易:
將并發(fā)交易數(shù)據(jù)插入交易表中,生成交易;
如果并發(fā)交易數(shù)據(jù)插入成功,響應(yīng)客戶交易成功;
如果并發(fā)交易數(shù)據(jù)插入失敗,響應(yīng)客戶交易失??;
所述交易表中包括客戶信息、商品標識和對應(yīng)的預(yù)購商品數(shù)量。
在一個實施例中,還包括:
額度補償模塊,用于當扣減預(yù)購商品的剩余數(shù)量操作成功,而生成交易操作失敗,商品可售最大數(shù)量減去預(yù)購商品的實際購買總量不等于商品剩余數(shù)量時,進行額度補償操作。
在一個實施例中,所述額度補償模塊具體用于:
按照如下方式進行額度補償:
確定額度表中商品剩余數(shù)量為0,且對應(yīng)的商品銷售狀態(tài)為未售罄的商品標識和商品可售最大數(shù)量;
根據(jù)所述商品標識,確定交易表中對應(yīng)的預(yù)購商品的實際購買總量;
將所述商品可售最大數(shù)量與所述實際購買總量進行比較,如果兩者不等,將相應(yīng)的商品剩余數(shù)量修改為所述商品可售最大數(shù)量減去所述實際購買總量;如果兩者相等,將對應(yīng)的商品銷售狀態(tài)修改為已售罄;
所述額度表還包括對應(yīng)的商品可售最大數(shù)量和對應(yīng)的商品銷售狀態(tài);所述對應(yīng)的商品銷售狀態(tài)包括已售罄狀態(tài)和未售罄狀態(tài)。
在本發(fā)明實施例中,相對于傳統(tǒng)的扣減預(yù)購商品的剩余數(shù)量和生成交易使用同一個事務(wù)控制,本發(fā)明中扣減相應(yīng)的商品剩余數(shù)量和生成交易由兩個獨立的事務(wù)控制,當大量交易并發(fā)時,對當前客戶進行扣減商品的剩余數(shù)量操作完成之后,即可對下一個客戶進行扣減預(yù)購商品的剩余數(shù)量操作,無需等待當前客戶完成生成交易操作,這樣可以減少響應(yīng)多個客戶請求的時間,從而提高交易處理效率。
附圖說明
為了更清楚地說明本發(fā)明實施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對實施例或現(xiàn)有技術(shù)描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明的一些實施例,對于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動的前提下,還可以根據(jù)這些附圖獲得其他的附圖。
圖1是一種現(xiàn)有的在線秒殺系統(tǒng)處理交易數(shù)據(jù)的流程圖;
圖2是一種現(xiàn)有的在線秒殺系統(tǒng)響應(yīng)客戶的提交交易詳細流程圖;
圖3是本發(fā)明提出的交易數(shù)據(jù)處理系統(tǒng)處理交易數(shù)據(jù)的具體流程圖;
圖4是本發(fā)明提出的交易數(shù)據(jù)處理系統(tǒng)的在線銷售的時序圖;
圖5是本發(fā)明提出的交易數(shù)據(jù)處理系統(tǒng)的提交買賣交易的詳細流程圖;
圖6是本發(fā)明提出的交易數(shù)據(jù)處理系統(tǒng)的額度補償?shù)臅r序圖;
圖7是一種現(xiàn)有的在線秒殺系統(tǒng)響應(yīng)客戶所需時間示意圖;
圖8是本發(fā)明提出的交易數(shù)據(jù)處理系統(tǒng)響應(yīng)客戶所需時間示意圖一;
圖9是本發(fā)明提出的交易數(shù)據(jù)處理系統(tǒng)響應(yīng)客戶所需時間示意圖二。
具體實施方式
下面將結(jié)合本發(fā)明實施例中的附圖,對本發(fā)明實施例中的技術(shù)方案進行清楚、完整地描述,顯然,所描述的實施例僅是本發(fā)明一部分實施例,而不是全部的實施例?;诒景l(fā)明中的實施例,本領(lǐng)域普通技術(shù)人員在沒有做出創(chuàng)造性勞動前提下所獲得的所有其他實施例,都屬于本發(fā)明保護的范圍。
現(xiàn)有的在線秒殺系統(tǒng)使用同一個事務(wù)來控制扣減額度和生成交易,保證扣減額度和生成交易要么同時成功,要么同時失敗。假設(shè)在線秒殺系統(tǒng)主要由2張數(shù)據(jù)庫表組成,一個是額度表(記錄最大可售額度(即最大可售數(shù)量)和當前剩余額度(即當前剩余數(shù)量)),另一個是交易表(用于記錄客戶提交的交易數(shù)據(jù))?,F(xiàn)有的在線秒殺系統(tǒng)處理交易數(shù)據(jù)的流程圖如圖1所示,該系統(tǒng)的基本流程為:
1、客戶登錄在線秒殺系統(tǒng);
2、查詢可預(yù)約的商品(主要是在數(shù)據(jù)庫中查詢商品剩余額度/數(shù)量不為0的商品);
3、客戶選擇商品,填寫預(yù)購數(shù)據(jù);
4、提交交易;
5、在線秒殺系統(tǒng)扣減額度(從數(shù)據(jù)庫的額度表中),插入客戶提交的交易數(shù)據(jù),生成交易(插入到數(shù)據(jù)庫中的交易表中);
6、如果扣減額度,插入客戶提交的交易數(shù)據(jù)均成功,則響應(yīng)客戶交易成功;
7、如果扣減額度、插入交易數(shù)據(jù)其中一個操作失敗,數(shù)據(jù)庫進行數(shù)據(jù)回滾,響應(yīng)客戶交易失敗。
其中,在線秒殺系統(tǒng)響應(yīng)客戶的提交交易的詳細流程如圖2所示,包括:
1、交易開始,在線秒殺系統(tǒng)獲取數(shù)據(jù)連接;
2、鎖定額度表,扣減商品剩余額度;
3、如果扣減商品剩余額度操作失敗,響應(yīng)客戶交易失敗,交易結(jié)束;
4、如果扣減商品剩余額度操作成功,則鎖定交易表,插入交易數(shù)據(jù);
5、如果插入數(shù)據(jù)操作成功,則響應(yīng)客戶交易成功;
6、如果插入數(shù)據(jù)操作失敗,則回滾額度表,響應(yīng)客戶交易失敗,交易結(jié)束;
7、如果扣減商品剩余額度操作和插入數(shù)據(jù)操作均成功,則提交數(shù)據(jù)(commit),響應(yīng)客戶交易成功,交易結(jié)束。
由上可知,現(xiàn)有的在線秒殺系統(tǒng)存在以下缺點:在有多個客戶進行秒殺或者限時搶購請求時,該系統(tǒng)必須在處理完成前一個客戶的扣減額度和生成交易這兩個操作之后,才會響應(yīng)下一個客戶的請求,這樣會花費很多的時間來響應(yīng)多個客戶請求,從而降低交易處理效率。
針對現(xiàn)有技術(shù)中存在的問題,本發(fā)明提出一種并發(fā)交易數(shù)據(jù)處理裝置,該并發(fā)交易數(shù)據(jù)處理裝置包括:
接收模塊,用于接收多個客戶提交的并發(fā)交易數(shù)據(jù),所述并發(fā)交易數(shù)據(jù)包括預(yù)購商品標識和預(yù)購商品數(shù)量;
交易數(shù)據(jù)處理模塊,用于根據(jù)所述多個客戶中的一個客戶提交的并發(fā)交易數(shù)據(jù)中的商品標識和預(yù)購商品數(shù)量,從額度表中扣減相應(yīng)預(yù)購商品的剩余數(shù)量;所述額度表包括商品標識和對應(yīng)的商品剩余數(shù)量;
當扣減預(yù)購商品的剩余數(shù)量失敗時,響應(yīng)客戶交易失??;
當扣減預(yù)購商品的剩余數(shù)量成功時,根據(jù)并發(fā)交易數(shù)據(jù)生成交易;
當生成交易成功時,響應(yīng)客戶交易成功;
當生成交易失敗時,響應(yīng)客戶交易失??;
在對當前客戶進行扣減預(yù)購商品的剩余數(shù)量操作完成之后,對下一個客戶進行扣減預(yù)購商品的剩余數(shù)量操作,無需等待當前客戶完成生成交易操作;
所述扣減預(yù)購商品的剩余數(shù)量和生成交易由兩個獨立的事務(wù)控制。
具體實施時,交易數(shù)據(jù)處理模塊的提交交易包括兩個原子交易,分別為扣減商品剩余額度(即商品剩余數(shù)量)和生成交易。本發(fā)明的關(guān)鍵點是對提交交易進行縱向事務(wù)分離(把業(yè)務(wù)流程中的m個原子交易分割成m個事務(wù)),就是說,把提交交易的扣減商品剩余額度和生成交易這兩個原子交易分割成2個事務(wù),系統(tǒng)先扣減預(yù)購商品的剩余額度,如果扣減商品剩余額度失敗,則響應(yīng)客戶交易失?。蝗绻蹨p商品剩余額度成功,則生成交易。如果生成交易成功,則響應(yīng)客戶交易成功;如果生成交易失敗,則相應(yīng)客戶交易失敗。通過進行縱向事務(wù)分離,在多個客戶進行交易請求時,本發(fā)明系統(tǒng)可以在處理成功前一個客戶的扣減額度之后,就響應(yīng)下一個客戶的交易請求,無需在處理完前一個客戶的扣減額度和生成交易這兩個操作之后,才響應(yīng)下一個客戶的交易請求,也就是說本發(fā)明系統(tǒng)支持下一客戶最早操作的時間點可以是上一個客戶剛扣減額度成功的時間點。
另外,本發(fā)明還可以對提交交易進行橫向事務(wù)分離(把1條記錄分割成x份,那么就將原來只能支持的一個并發(fā)增加到了x個并發(fā)),就是說,把扣減商品剩余額度這個原子交易所對應(yīng)的額度記錄分割成x份記錄,響應(yīng)客戶時通過哈西算法將客戶請求映射到這x份記錄上,那么就將原來只能支持的1個并發(fā)增加到了x個并發(fā)。
具體實施時,交易數(shù)據(jù)處理模塊具體用于:
按照如下方式扣減預(yù)購商品的剩余數(shù)量:
根據(jù)所述商品標識從額度表中查找到對應(yīng)的商品標識和對應(yīng)的商品剩余數(shù)量;
用對應(yīng)的商品剩余數(shù)量減去預(yù)購商品數(shù)量,如果扣減結(jié)果大于等于0,則扣減預(yù)購商品的剩余數(shù)量成功;如果扣減結(jié)果小于0,則扣減預(yù)購商品的剩余數(shù)量失敗。
交易數(shù)據(jù)處理模塊具體用于:
按照如下方式生成交易:
將并發(fā)交易數(shù)據(jù)插入交易表中,生成交易;
如果并發(fā)交易數(shù)據(jù)插入成功,響應(yīng)客戶交易成功;
如果并發(fā)交易數(shù)據(jù)插入失敗,響應(yīng)客戶交易失敗;
所述交易表中包括客戶信息、商品標識和對應(yīng)的預(yù)購商品數(shù)量。
具體實施時,由于本發(fā)明在提交交易中使用了縱向事務(wù)分離,那么就有可能存在當額度扣減成功,插入交易失敗的時候額度表中的商品剩余額度與實際剩余額度不一致。為了解決此問題,本發(fā)明引入額度補償機制,通過定時自動處理來補償無效的額度,以保證數(shù)據(jù)的一致。即本發(fā)明系統(tǒng)還包括額度補償模塊,用于當扣減預(yù)購商品的剩余數(shù)量操作成功,而生成交易操作失敗,商品可售最大數(shù)量減去預(yù)購商品的實際購買總量不等于商品剩余數(shù)量時,進行額度補償操作。
具體的,額度補償模塊按照如下方式進行額度補償:
確定額度表中商品剩余數(shù)量為0,且對應(yīng)的商品銷售狀態(tài)為未售罄的商品標識和商品可售最大數(shù)量;
根據(jù)所述商品標識,確定交易表中對應(yīng)的預(yù)購商品的實際購買總量;
將所述商品可售最大數(shù)量與所述實際購買總量進行比較,如果兩者不等,將相應(yīng)的商品剩余數(shù)量修改為所述商品可售最大數(shù)量減去所述實際購買總量;如果兩者相等,將對應(yīng)的商品銷售狀態(tài)修改為已售罄;
額度表還包括對應(yīng)的商品可售最大數(shù)量和對應(yīng)的商品銷售狀態(tài);對應(yīng)的商品銷售狀態(tài)包括已售罄狀態(tài)和未售罄狀態(tài)。
其中,額度表中的商品標識可以是商品的名稱,也可以是商品的編號,可以是任何能對商品進行識別的形式;額度表中的可售最大數(shù)量(也可以說是可售最大額度)是固定值;額度表中的商品銷售狀態(tài)用于標志該商品是否真正售完,是否仍需要進行額度補償,默認初始值為未售罄。額度表中的數(shù)據(jù)在系統(tǒng)上線前已通過業(yè)務(wù)事先維護。而交易表是記錄客戶買賣的信息。
具體實施時,交易數(shù)據(jù)處理模塊與額度補償模塊在不同的進程中運行,并且只有額度表中記錄的商品剩余額度為0,但銷售狀態(tài)為未售罄才會進行額度補償操作,而在線銷售交易不能對額度表中記錄的商品剩余額度為0的商品進行買賣,因此額度補償模塊不會對交易數(shù)據(jù)處理模塊造成影響。
以上所使用的,術(shù)語“單元”或者“模塊”可以實現(xiàn)預(yù)定功能的軟件和/或硬件的組合。盡管以上實施例所描述的系統(tǒng)較佳地以軟件來實現(xiàn),但是硬件,或者軟件和硬件的組合的實現(xiàn)也是可能并被構(gòu)想的。
具體實施時,圖3是本發(fā)明提出的并發(fā)交易數(shù)據(jù)處理裝置處理并發(fā)交易數(shù)據(jù)的具體流程圖,由圖4可知,裝置中包括的在線銷售模塊即為交易數(shù)據(jù)處理模塊。該裝置的基本流程為:
1、客戶登錄系統(tǒng);
2、查詢可預(yù)約的商品(主要是在數(shù)據(jù)庫中查詢商品剩余額度不為0的商品);
3、客戶選擇商品,填寫預(yù)購數(shù)據(jù);
4、提交交易;
在線銷售模塊處理:
5、扣減額度(從數(shù)據(jù)庫的額度表中);
6、插入客戶提交的交易數(shù)據(jù),生成交易(插入到數(shù)據(jù)庫中的交易表中);
7、如果扣減額度,插入客戶提交的交易數(shù)據(jù)均成功,則提交交易;
額度補償模塊處理:
8、如果扣減額度成功、插入交易失敗,進行定時處理,對額度為0的商品進行額度補償。
具體實施時,在線銷售模塊(即交易數(shù)據(jù)處理模塊)為WEB應(yīng)用,主要包括2支交易,分別為查詢剩余額度信息和買賣交易。其在線銷售的時序圖如圖4所示,包括:
1:用戶:登錄系統(tǒng);
1.1:前端頁面:請求在線銷售APP查詢可售商品信息;
1.1.1:在線銷售APP:查詢數(shù)據(jù)庫中的商品信息,過濾剩余額度不為0的可售商品;
3:客戶:選擇要進行買賣的商品,并填寫客戶相關(guān)的信息;(4:屬于返回流程)
5:客戶:提交買賣交易;
5.1:前端頁面:響應(yīng)客戶請求,調(diào)用在線銷售APP進行提交交易;
5.1.1:在線銷售APP:響應(yīng)頁面請求,通過哈西算法獲取x份記錄中一份用于響應(yīng)客戶,扣減剩余額度,即將該份記錄的商品的剩余額度減去客戶買賣的數(shù)量。如果扣減成功,進行后續(xù)操作。如果扣減失敗,直接響應(yīng)客戶交易失敗。
5.1.3:在線銷售APP:將客戶的交易信息插入數(shù)據(jù)庫。如果插入成功,則響應(yīng)客戶交易成功返回結(jié)果信息。如果插入失敗,則響應(yīng)客戶交易失敗。
其中,1.1.2:查詢商品信息,過濾恪守商品;1.2:查詢可售商品信息;2:登錄系統(tǒng);5.1.2:扣減剩余額度;5.1.4:插入交易數(shù)據(jù);5.2:提交交易;6:提交交易屬于返回流程。
具體實施時,提交買賣交易的詳細流程如圖5所示,包括:
1、交易開始;
2、進行扣減額度操作(一個事務(wù)控制);
當包括橫向事務(wù)分離時:系統(tǒng)獲取數(shù)據(jù)連接,鎖定額度表,通過哈希算法獲取x份記錄中的一份用于響應(yīng)客戶,將該份記錄的商品的剩余額度減去客戶買賣的數(shù)量;
當不包括橫向事務(wù)分離時:系統(tǒng)獲取數(shù)據(jù)連接,鎖定額度表,扣減剩余額度,如果扣減商品剩余額度操作失敗,響應(yīng)客戶交易失敗,交易結(jié)束;
如果扣減商品剩余額度操作成功,提交交易(commit);
3、進行生成交易操作(另一個事務(wù)控制):
獲取數(shù)據(jù)連接;
鎖定交易表,插入交易數(shù)據(jù),將分隔額度表對應(yīng)的記錄放入同意分區(qū),如果插入數(shù)據(jù)操作失敗,響應(yīng)客戶交易失敗,交易結(jié)束;
如果插入數(shù)據(jù)操作成功,提交交易(commit),同時響應(yīng)客戶交易成功,交易結(jié)束。
具體實施時,額度補償模塊為定時自動處理應(yīng)用,是為了彌補在線銷售模塊中由于提交買賣交易使用去事務(wù)化控制帶來的數(shù)據(jù)不一致問題。額度補償?shù)牡臅r序圖如圖6所示,包括:
1:時鐘:定時循環(huán)調(diào)用額度補償交易;
1.1:額度補償APP:查詢數(shù)據(jù)庫中的商品信息,過濾剩余額度為0,且狀態(tài)為未售罄的商品;
1.3:額度補償APP:對每個商品,分別根據(jù)該買賣交易表中的商品計算交易表中的已售總額;
1.5:額度補償APP:判斷商品實際已售總額與商品的最大可售額度是否相等。如果相等,則表明該商品確實已真正售完,1:將該商品狀態(tài)置為已售罄。如果不相等,則表明該商品曾經(jīng)出現(xiàn)過已被扣減額度但是沒有成功插入交易數(shù)據(jù)的情況,需要將已被進行無效扣減的額度補償?shù)绞S囝~度中,即2:修改剩余額度:最大可售額-實際已售總額。
2:額度補償。
其中,1.2:查詢商品信息,過濾剩余額度為0的商品;1.4:根據(jù)商品計算交易表中的已售總額;1.6:判斷商品最大可售額度與實際已售總額是否相等;1:將商品狀態(tài)置為已售罄;2:修改剩余額度:最大可售額-實際已售總額屬于返回流程。
具體實施時,圖7是一種現(xiàn)有的在線秒殺系統(tǒng)響應(yīng)客戶所需時間示意圖,如圖7所示,假設(shè)扣減商品剩余額度占用的時間為a秒,插入交易數(shù)據(jù)占用的時間為b秒,則響應(yīng)客戶一個交易的時間為a+b秒。假設(shè)在高并發(fā)的情況下,系統(tǒng)無閑置時間,則響應(yīng)n個客戶的請求需要的時間為n*(a+b)秒。
當本發(fā)明單獨采用了橫向事務(wù)分離時,由于一條記錄被拆分成了x份,并通過哈西算法將客戶請求映射到x份記錄上,那么即可支持同時對x條記錄的同時鎖定,即并發(fā)數(shù)最大可支持x個。假設(shè)扣減額度占用的時間為a秒,插入交易數(shù)據(jù)占用的時間為b秒,則響應(yīng)n個客戶的請求需要的時間為n*(a+b)/x。
當本發(fā)明單獨采用了縱向事務(wù)分離時,假設(shè)扣減額度占用的時間為a秒,插入交易數(shù)據(jù)占用的時間為b秒,則響應(yīng)客戶一個交易的時間為a+b秒。假設(shè)a<b,在高并發(fā)的情況下,系統(tǒng)無閑置時間,則響應(yīng)n個客戶的請求需要的時間為n*b+a秒,如圖8所示。假設(shè)a>b,在高并發(fā)的情況下,系統(tǒng)無閑置時間,則響應(yīng)n個客戶的請求需要的時間為n*a+b秒,如圖9所示。
如果本發(fā)明同時進行橫向事務(wù)分離和縱向事務(wù)分離,則響應(yīng)n個客戶請求需要(n*a+b)/x秒或者(n*b+a)/x秒。
根據(jù)以上分析可知,相對現(xiàn)有技術(shù)響應(yīng)n個客戶請求需要n(a+b)秒,本發(fā)明大概提高了2x倍,在高并發(fā)的情況下,本發(fā)明比現(xiàn)有技術(shù)性能更高。
基于同一發(fā)明構(gòu)思,本發(fā)明實施例中還提供了一種并發(fā)交易數(shù)據(jù)處理方法,如下面的實施例所述。由于并發(fā)交易數(shù)據(jù)處理方法解決問題的原理與并發(fā)交易數(shù)據(jù)處理裝置相似,因此并發(fā)交易數(shù)據(jù)處理方法的實施可以參見并發(fā)交易數(shù)據(jù)處理裝置的實施,重復(fù)之處不再贅述。
本發(fā)明提出的并發(fā)交易數(shù)據(jù)處理方法包括:
接收多個客戶提交的并發(fā)交易數(shù)據(jù),所述并發(fā)交易數(shù)據(jù)中包括預(yù)購商品標識和預(yù)購商品數(shù)量;
根據(jù)所述多個客戶中的一個客戶提交的并發(fā)交易數(shù)據(jù)中的商品標識和預(yù)購商品數(shù)量,從額度表中扣減相應(yīng)預(yù)購商品的剩余數(shù)量;所述額度表包括商品標識和對應(yīng)的商品剩余數(shù)量;
當扣減預(yù)購商品的剩余數(shù)量失敗時,響應(yīng)客戶交易失??;
當扣減預(yù)購商品的剩余數(shù)量成功時,根據(jù)并發(fā)交易數(shù)據(jù)生成交易;
當生成交易成功時,響應(yīng)客戶交易成功;
當生成交易失敗時,響應(yīng)客戶交易失??;
在對當前客戶進行扣減預(yù)購商品的剩余數(shù)量操作完成之后,對下一個客戶進行扣減預(yù)購商品的剩余數(shù)量操作,無需等待當前客戶完成生成交易操作;
所述扣減預(yù)購商品的剩余數(shù)量和生成交易由兩個獨立的事務(wù)控制。
具體實施時,根據(jù)所述多個客戶中的一個客戶提交的并發(fā)交易數(shù)據(jù)中的商品標識和預(yù)購商品數(shù)量,從額度表中扣減相應(yīng)預(yù)購商品的剩余數(shù)量,具體包括:
根據(jù)所述商品標識從額度表中查找到對應(yīng)的商品標識和對應(yīng)的商品剩余數(shù)量;
用對應(yīng)的商品剩余數(shù)量減去預(yù)購商品數(shù)量,如果扣減結(jié)果大于等于0,則扣減預(yù)購商品的剩余數(shù)量成功;如果扣減結(jié)果小于0,則扣減預(yù)購商品的剩余數(shù)量失敗。
具體實施時,根據(jù)并發(fā)交易數(shù)據(jù)生成交易,具體包括:
將并發(fā)交易數(shù)據(jù)插入交易表中,生成交易;
如果并發(fā)交易數(shù)據(jù)插入成功,響應(yīng)客戶交易成功;
如果并發(fā)交易數(shù)據(jù)插入失敗,響應(yīng)客戶交易失??;
所述交易表中包括客戶信息、商品標識和對應(yīng)的預(yù)購商品數(shù)量。
具體實施時,還包括:
當扣減預(yù)購商品的剩余數(shù)量操作成功,而生成交易操作失敗時,商品可售最大數(shù)量減去預(yù)購商品的實際購買總量不等于商品剩余數(shù)量,進行額度補償操作。
在一個實施例中,按照如下方式進行額度補償:
具體實施時,按照如下方式進行額度補償:
確定額度表中商品剩余數(shù)量為0,且對應(yīng)的商品銷售狀態(tài)為未售罄的商品標識和商品可售最大數(shù)量;
根據(jù)所述商品標識,確定交易表中對應(yīng)的預(yù)購商品的實際購買總量;
將所述商品可售最大數(shù)量與所述實際購買總量進行比較,如果兩者不等,將相應(yīng)的商品剩余數(shù)量修改為所述商品可售最大數(shù)量減去所述實際購買總量;如果兩者相等,將對應(yīng)的商品銷售狀態(tài)修改為已售罄;
所述額度表還包括對應(yīng)的商品可售最大數(shù)量和對應(yīng)的商品銷售狀態(tài);所述對應(yīng)的商品銷售狀態(tài)包括已售罄狀態(tài)和未售罄狀態(tài)。
綜上所述,本發(fā)明的優(yōu)點是:
1、本發(fā)明對交易使用了事務(wù)分離,這樣可以縮短交易處理時間,提高交易處理能力。
2、通過額度補償機制來彌補縱向事務(wù)分離帶來的數(shù)據(jù)不一致問題。
本領(lǐng)域內(nèi)的技術(shù)人員應(yīng)明白,本發(fā)明的實施例可提供為方法、系統(tǒng)、或計算機程序產(chǎn)品。因此,本發(fā)明可采用完全硬件實施例、完全軟件實施例、或結(jié)合軟件和硬件方面的實施例的形式。而且,本發(fā)明可采用在一個或多個其中包含有計算機可用程序代碼的計算機可用存儲介質(zhì)(包括但不限于磁盤存儲器、CD-ROM、光學(xué)存儲器等)上實施的計算機程序產(chǎn)品的形式。
本發(fā)明是參照根據(jù)本發(fā)明實施例的方法、設(shè)備(系統(tǒng))、和計算機程序產(chǎn)品的流程圖和/或方框圖來描述的。應(yīng)理解可由計算機程序指令實現(xiàn)流程圖和/或方框圖中的每一流程和/或方框、以及流程圖和/或方框圖中的流程和/或方框的結(jié)合??商峁┻@些計算機程序指令到通用計算機、專用計算機、嵌入式處理機或其他可編程數(shù)據(jù)處理設(shè)備的處理器以產(chǎn)生一個機器,使得通過計算機或其他可編程數(shù)據(jù)處理設(shè)備的處理器執(zhí)行的指令產(chǎn)生用于實現(xiàn)在流程圖一個流程或多個流程和/或方框圖一個方框或多個方框中指定的功能的裝置。
這些計算機程序指令也可存儲在能引導(dǎo)計算機或其他可編程數(shù)據(jù)處理設(shè)備以特定方式工作的計算機可讀存儲器中,使得存儲在該計算機可讀存儲器中的指令產(chǎn)生包括指令裝置的制造品,該指令裝置實現(xiàn)在流程圖一個流程或多個流程和/或方框圖一個方框或多個方框中指定的功能。
這些計算機程序指令也可裝載到計算機或其他可編程數(shù)據(jù)處理設(shè)備上,使得在計算機或其他可編程設(shè)備上執(zhí)行一系列操作步驟以產(chǎn)生計算機實現(xiàn)的處理,從而在計算機或其他可編程設(shè)備上執(zhí)行的指令提供用于實現(xiàn)在流程圖一個流程或多個流程和/或方框圖一個方框或多個方框中指定的功能的步驟。
以上所述僅為本發(fā)明的優(yōu)選實施例而已,并不用于限制本發(fā)明,對于本領(lǐng)域的技術(shù)人員來說,本發(fā)明實施例可以有各種更改和變化。凡在本發(fā)明的精神和原則之內(nèi),所作的任何修改、等同替換、改進等,均應(yīng)包含在本發(fā)明的保護范圍之內(nèi)。