對(duì)象管理方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明的實(shí)施例涉及對(duì)象管理,具體涉及基于最后使用用戶信息對(duì)對(duì)象的剩余數(shù)進(jìn)行扣減的方法和裝置。
【背景技術(shù)】
[0002]在對(duì)象管理領(lǐng)域中,當(dāng)用戶請(qǐng)求對(duì)象時(shí)需要扣減對(duì)象的剩余數(shù),并且當(dāng)用戶取消請(qǐng)求時(shí)需要還原對(duì)象的剩余數(shù)。為了順利實(shí)現(xiàn)對(duì)象的調(diào)整,在現(xiàn)有技術(shù)中,提出了兩種方案,涉及將對(duì)象相關(guān)參數(shù)存儲(chǔ)在一張表或者一個(gè)緩存中,當(dāng)需要調(diào)整對(duì)象時(shí)對(duì)相關(guān)字段或?qū)傩赃M(jìn)行修改。具體地,在第一種方案中,將對(duì)象的標(biāo)識(shí)和剩余數(shù)作為一條記錄存儲(chǔ)在數(shù)據(jù)庫表中,每當(dāng)用戶請(qǐng)求對(duì)象時(shí),首先根據(jù)對(duì)象標(biāo)識(shí)查詢并判斷剩余數(shù)是否足夠扣減,然后再更新剩余數(shù);當(dāng)用戶取消請(qǐng)求時(shí),根據(jù)對(duì)象標(biāo)識(shí)還原剩余數(shù)。在第二種方案中,將對(duì)象標(biāo)識(shí)、對(duì)象總數(shù)、已用總數(shù)作為一條記錄存儲(chǔ)在數(shù)據(jù)庫表中,每當(dāng)用戶請(qǐng)求對(duì)象時(shí),首先根據(jù)對(duì)象標(biāo)識(shí)查詢并判斷對(duì)象總數(shù)與已用總數(shù)之差是否足夠扣減,然后再更新已用總數(shù);當(dāng)用戶取消請(qǐng)求時(shí),根據(jù)對(duì)象標(biāo)識(shí)還原已用總數(shù)。
[0003]然而,第一種方案和第二種方案都存在可能導(dǎo)致剩余數(shù)為負(fù)(即,已用總數(shù)超過對(duì)象總數(shù)或者稱作對(duì)象超額扣減)的問題。第一種方案是在扣減剩余數(shù)時(shí)判斷剩余數(shù)是否大于或等于請(qǐng)求數(shù),第二種方案是判斷已用總數(shù)與請(qǐng)求數(shù)之和是否小于或等于對(duì)象總數(shù)。但是,兩個(gè)方案都存在一個(gè)共同的問題,即當(dāng)同時(shí)存在還原剩余數(shù)和扣減剩余數(shù)的情況時(shí),可能出現(xiàn)對(duì)象超額扣減和剩余部分對(duì)象但用戶無法請(qǐng)求使用的情況。
[0004]例如,當(dāng)對(duì)象的剩余數(shù)為20、線程A的請(qǐng)求數(shù)為15、并且線程B的請(qǐng)求數(shù)為10時(shí),可能出現(xiàn)以下幾種情況:剩余數(shù)為5 (線程A扣減成功,然后線程B判斷剩余數(shù)不夠因此扣減失敗);剩余數(shù)為10(線程B扣減成功,然后線程A判斷剩余數(shù)不夠因此扣減失敗);以及剩余數(shù)為-5 (線程A判斷剩余數(shù)足夠扣減,線程B判斷剩余數(shù)足夠扣減,然后線程A和線程B分別進(jìn)行對(duì)象扣減)。此外,如果此時(shí)出現(xiàn)線程C還原剩余數(shù),則情況會(huì)更加復(fù)雜。
[0005]為了解決可能出現(xiàn)的對(duì)象超額扣減的問題,在現(xiàn)有技術(shù)中提出了通過增加一個(gè)字段進(jìn)行逐次輪訓(xùn)的方法。在該方法中,先查詢剩余數(shù),然后逐個(gè)線程進(jìn)行對(duì)象扣減。在該方法中,可能需要更新多次數(shù)據(jù)庫,即,對(duì)數(shù)據(jù)庫進(jìn)行多次寫操作。然而,這種方式性能較低且資源消耗較大。
[0006]因此,在對(duì)象管理中,當(dāng)同時(shí)存在多個(gè)用戶請(qǐng)求對(duì)象及取消請(qǐng)求時(shí),由于并發(fā)導(dǎo)致扣減和還原剩余數(shù)時(shí)出現(xiàn)對(duì)象超額扣減的概率很高,使得用戶在請(qǐng)求對(duì)象之后被告知沒有對(duì)象的情況的出現(xiàn)。為了解決對(duì)象超額扣減和剩余部分對(duì)象但用戶無法請(qǐng)求使用的問題,需要提出一種簡單實(shí)用的方式來杜絕對(duì)象超額扣減的出現(xiàn)以及充分利用剩余對(duì)象,從而實(shí)現(xiàn)較高的對(duì)象管理效率同時(shí)消耗較少的資源。
【發(fā)明內(nèi)容】
[0007]鑒于現(xiàn)有技術(shù)中的一個(gè)或多個(gè)問題,提出了一種用于對(duì)用戶請(qǐng)求的對(duì)象的剩余數(shù)進(jìn)行扣減的方法和裝置,能夠解決現(xiàn)有技術(shù)中存在對(duì)象超額扣減和剩余部分對(duì)象但用戶無法請(qǐng)求的問題。
[0008]在本發(fā)明的一個(gè)方面,提出了一種用于對(duì)用戶請(qǐng)求的對(duì)象的剩余數(shù)進(jìn)行扣減的方法,所述方法包括:
[0009]根據(jù)所述對(duì)象的標(biāo)識(shí)從數(shù)據(jù)庫表中獲取對(duì)象總數(shù)、已用總數(shù)和最后使用用戶信息;
[0010]如果所述對(duì)象總數(shù)與所述已用總數(shù)之差delta大于0,則將所述已用總數(shù)更新為已用總數(shù)與所述用戶的請(qǐng)求數(shù)η之和,并且使用所述用戶的標(biāo)識(shí)和所述用戶請(qǐng)求對(duì)象的時(shí)間戳來更新所述最后使用用戶信息;
[0011]根據(jù)所述對(duì)象的標(biāo)識(shí)和更新后的最后使用用戶信息從所述數(shù)據(jù)庫表中查詢更新后的已用總數(shù);以及
[0012]如果查詢到更新后的已用總數(shù)并且更新后的已用總數(shù)與所述對(duì)象總數(shù)之差m大于0,則將所述數(shù)據(jù)庫表中的已用總數(shù)更新為已用總數(shù)與m之差,并且向所述用戶返回請(qǐng)求成功消息,所述請(qǐng)求成功消息包含指示所述用戶的請(qǐng)求數(shù)為n-m的信息。
[0013]優(yōu)選地,在根據(jù)所述對(duì)象的標(biāo)識(shí)從數(shù)據(jù)庫表中獲取對(duì)象總數(shù)、已用總數(shù)和最后使用用戶信息之前,所述方法還包括:
[0014]創(chuàng)建數(shù)據(jù)庫表,所述數(shù)據(jù)庫表包括標(biāo)識(shí)、對(duì)象總數(shù)、已用總數(shù)、以及最后使用用戶信息。
[0015]優(yōu)選地,所述方法還包括:如果delta小于或等于0,則不進(jìn)行對(duì)象扣減,并且向所述用戶返回請(qǐng)求失敗消息。
[0016]優(yōu)選地,所述方法還包括:如果未查詢到更新后的已用總數(shù),則不更新所述數(shù)據(jù)庫表,并且向所述用戶返回請(qǐng)求成功消息,所述請(qǐng)求成功消息包含指示所述用戶的請(qǐng)求數(shù)為η的信息。
[0017]優(yōu)選地,所述方法還包括:如果m小于或等于0,則不更新所述數(shù)據(jù)庫表,并且向所述用戶返回請(qǐng)求成功消息,所述請(qǐng)求成功消息包含指示所述用戶的請(qǐng)求數(shù)為η的信息。
[0018]優(yōu)選地,所述最后使用用戶信息包括最后使用用戶標(biāo)識(shí)和最后使用用戶請(qǐng)求對(duì)象的時(shí)間戳。
[0019]優(yōu)選地,根據(jù)所述對(duì)象的標(biāo)識(shí)從數(shù)據(jù)庫表中獲取對(duì)象總數(shù)、已用總數(shù)和最后使用用戶信息包括:
[0020]從所述數(shù)據(jù)庫表中查詢與所述對(duì)象的標(biāo)識(shí)相同的標(biāo)識(shí),并且根據(jù)查詢到的標(biāo)識(shí)從所述數(shù)據(jù)庫表中獲取與所述對(duì)象相對(duì)應(yīng)的對(duì)象總數(shù)、已用總數(shù)、以及最后使用用戶信息。
[0021]在本發(fā)明的另一個(gè)方面,提出了一種用于對(duì)用戶請(qǐng)求的對(duì)象的剩余數(shù)進(jìn)行扣減的裝置,所述裝置包括:
[0022]用于根據(jù)所述對(duì)象的標(biāo)識(shí)從數(shù)據(jù)庫表中獲取對(duì)象總數(shù)、已用總數(shù)和最后使用用戶信息的模塊;
[0023]用于如果所述對(duì)象總數(shù)與所述已用總數(shù)之差delta大于0,則將所述已用總數(shù)更新為已用總數(shù)與所述用戶的請(qǐng)求數(shù)η之和,并且使用所述用戶的標(biāo)識(shí)和所述用戶請(qǐng)求對(duì)象的時(shí)間戳來更新所述最后使用用戶信息的模塊;
[0024]用于根據(jù)所述對(duì)象的標(biāo)識(shí)和更新后的最后使用用戶信息從所述數(shù)據(jù)庫表中查詢更新后的已用總數(shù)的模塊;以及
[0025]用于如果查詢到更新后的已用總數(shù)并且更新后的已用總數(shù)與所述對(duì)象總數(shù)之差m大于0,則將所述數(shù)據(jù)庫表中的已用總數(shù)更新為已用總數(shù)與m之差,并且向所述用戶返回請(qǐng)求成功消息的模塊,所述請(qǐng)求成功消息包含指示所述用戶的請(qǐng)求數(shù)為n-m的信息。
[0026]優(yōu)選地,所述裝置還包括:
[0027]用于創(chuàng)建數(shù)據(jù)庫表的模塊,所述數(shù)據(jù)庫表包括標(biāo)識(shí)、對(duì)象總數(shù)、已用總數(shù)、以及最后使用用戶信息。
[0028]優(yōu)選地,所述裝置還包括:
[0029]用于如果delta小于或等于0,則不進(jìn)行對(duì)象扣減,并且向所述用戶返回請(qǐng)求失敗消息的t吳塊。
[0030]優(yōu)選地,所述裝置還包括:
[0031]用于如果未查詢到更新后的已用總數(shù),則不更新所述數(shù)據(jù)庫表,并且向所述用戶返回請(qǐng)求成功消息的模塊,所述請(qǐng)求成功消息包含指示所述用戶的請(qǐng)求數(shù)為η的信息。
[0032]優(yōu)選地,所述裝置還包括:
[0033]用于如果m小于或等于0,則不更新所述數(shù)據(jù)庫表,并且向所述用戶返回請(qǐng)求成功消息的模塊,所述請(qǐng)求成功消息包含指示所述用戶的請(qǐng)求數(shù)為η的信息。
[0034]優(yōu)選地,所述最后使用用戶信息包括最后使用用戶標(biāo)識(shí)和最后使用用戶請(qǐng)求對(duì)象的時(shí)間戳。
[0035]優(yōu)選地,用于根據(jù)所述對(duì)象的標(biāo)識(shí)從數(shù)據(jù)庫表中獲取對(duì)象總數(shù)、已用總數(shù)和最后使用用戶信息的模塊包括:
[0036]用于從所述數(shù)據(jù)庫表中查詢與所述對(duì)象的標(biāo)識(shí)相同的標(biāo)識(shí),并且根據(jù)查詢到的標(biāo)識(shí)從所述數(shù)據(jù)庫表中獲取與所述對(duì)象相對(duì)應(yīng)的對(duì)象總數(shù)、已用總數(shù)、以及最后使用用戶信息的t吳塊。
當(dāng)前第1頁
1 
2 
3