本申請(qǐng)實(shí)施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對(duì)實(shí)施例或現(xiàn)有技術(shù)描述中所需要使用的附圖作簡(jiǎn)單地介紹,顯而易見地,對(duì)于本領(lǐng)域普通技術(shù)人員而言,在不付出創(chuàng)造性勞動(dòng)性的前提下,還可以根據(jù)這些附圖獲得其他的附圖。
[0073]圖1為本申請(qǐng)一示例性實(shí)施例示出的一種基于數(shù)據(jù)庫的數(shù)據(jù)控制方法的流程示意圖。
[0074]圖2為本申請(qǐng)另一示例性實(shí)施例示出的一種基于數(shù)據(jù)庫的數(shù)據(jù)控制方法的流程示意圖。
[0075]圖3為本申請(qǐng)一示例性實(shí)施例示出的一種基于數(shù)據(jù)庫的數(shù)據(jù)控制系統(tǒng)的框圖。
[0076]圖4為本申請(qǐng)一示例性實(shí)施例示出的圖3所示系統(tǒng)中余值碎片合并單元的框圖。
[0077]圖5為本申請(qǐng)另一示例性實(shí)施例示出的圖3所示系統(tǒng)中余值碎片合并單元的框圖。
[0078]圖6為本申請(qǐng)一示例性實(shí)施例示出的圖3所示系統(tǒng)中扣減單元的框圖。
【具體實(shí)施方式】
[0079]這里將詳細(xì)地對(duì)示例性實(shí)施例進(jìn)行說明,其示例表示在附圖中。下面的描述涉及附圖時(shí),除非另有表示,不同附圖中的相同數(shù)字表示相同或相似的要素。以下示例性實(shí)施例中所描述的實(shí)施方式并不代表與本申請(qǐng)相一致的所有實(shí)施方式。相反,它們僅是與如所附權(quán)利要求書中所詳述的、本申請(qǐng)的一些方面相一致的裝置和方法的例子。
[0080]為了全面理解本申請(qǐng),在以下詳細(xì)描述中提到了眾多具體的細(xì)節(jié),但是本領(lǐng)域技術(shù)人員應(yīng)該理解,本申請(qǐng)可以無需這些具體細(xì)節(jié)而實(shí)現(xiàn)。在其他實(shí)施例中,不詳細(xì)描述公知的方法、過程、組件和電路,以免不必要地導(dǎo)致實(shí)施例模糊。
[0081]為更好地說明本申請(qǐng)的實(shí)施例,先對(duì)一些常規(guī)的數(shù)據(jù)庫技術(shù)作簡(jiǎn)單說明如下。
[0082]數(shù)據(jù)庫事務(wù)(Database Transact1n)是指作為單個(gè)邏輯工作單元執(zhí)行的一系列操作,一個(gè)數(shù)據(jù)庫事務(wù)要么完整地執(zhí)行,要么完全地不執(zhí)行。使用數(shù)據(jù)庫事務(wù)可以確保工作單元內(nèi)的所有操作都成功完成,才會(huì)更新面向數(shù)據(jù)的資源。通過將一組相關(guān)操作組合為一個(gè)數(shù)據(jù)庫事務(wù),可以使應(yīng)用程序更加可靠。數(shù)據(jù)庫事務(wù)是進(jìn)行數(shù)據(jù)庫處理的基本操作元素。
[0083]數(shù)據(jù)庫流水表,用于記錄數(shù)據(jù)庫業(yè)務(wù)處理的流水日志信息,流水表中一條記錄對(duì)應(yīng)一個(gè)流水(或稱為業(yè)務(wù))。當(dāng)發(fā)生一個(gè)操作時(shí),可以在流水表中插入對(duì)應(yīng)的流水信息,作為回滾或者后續(xù)操作的參考。
[0084]圖1為本申請(qǐng)一示例性實(shí)施例示出的一種基于數(shù)據(jù)庫的數(shù)據(jù)控制方法的流程示意圖。如圖1所示,所述方法包括:
[0085]在步驟S101中,將數(shù)據(jù)總值分為多個(gè)子值,將子值分別存放于水平拆分的子值數(shù)據(jù)塊中;
[0086]其中,數(shù)據(jù)總值可以為數(shù)量,也可以為金額等,因此本申請(qǐng)實(shí)施例中不對(duì)數(shù)據(jù)總值的單位做限定。步驟S101將數(shù)據(jù)總值分為多個(gè)子值,子值的個(gè)數(shù)可以根據(jù)數(shù)據(jù)總值和扣減額的最大值確定,較優(yōu)的,子值的個(gè)數(shù)小于數(shù)據(jù)總值除以最大扣減額所得的除數(shù)。這是因?yàn)?,若子值的個(gè)數(shù)過大,不僅會(huì)因?yàn)樽又禂?shù)據(jù)塊太分散耗費(fèi)過多數(shù)據(jù)庫空間和處理資源,而且可能使子值的額度(此時(shí)也可以稱為余值)小于扣減額,例如最大扣減額為5,數(shù)據(jù)總值為1000,分為250個(gè)子值,若平均分配子值,則每個(gè)子值為4,當(dāng)發(fā)起扣減額為5的扣減時(shí),扣減不能進(jìn)行,若不平均分配每個(gè)子值,使部分子值大于扣減額,則會(huì)出現(xiàn)很多空的數(shù)據(jù)塊,兩種分配方式都可能造成很大的空間和資源浪費(fèi)。由于本領(lǐng)域技術(shù)人員根據(jù)常識(shí)可以推斷出本申請(qǐng)中子值個(gè)數(shù)的選擇情況,故不贅述。
[0087]在優(yōu)選的實(shí)施方式中,可以根據(jù)數(shù)據(jù)總值平均分配子值,選擇的子值的個(gè)數(shù)可以實(shí)現(xiàn)平均分配,且使每個(gè)子值都大于扣減額的若干倍數(shù),例如,數(shù)據(jù)總值為1000,扣減額為3,子值的個(gè)數(shù)為10,則每個(gè)子值為100,此種情況下每個(gè)子值都能參加扣減,且能進(jìn)行多次扣減,既能避免熱點(diǎn)問題,也使處理過程避免在過多的數(shù)據(jù)塊中進(jìn)行,且每個(gè)子值的扣減次數(shù)相同,使處理過程更簡(jiǎn)潔。在一種可能的實(shí)施方式中,扣減額有多個(gè),則可以選擇子值的個(gè)數(shù),使每個(gè)子值都大于最大扣減額的若干倍數(shù),但不平均分配子值,例如數(shù)據(jù)總值為100,子值個(gè)數(shù)為4,扣減額為2和3,子值分別為15、20、30、35,此種實(shí)施方式中每個(gè)子值可以實(shí)現(xiàn)的扣減次數(shù)不一樣,但并不影響本申請(qǐng)技術(shù)方案的技術(shù)效果。
[0088]在另一種可能的實(shí)施方式中,選定子值個(gè)數(shù)后,根據(jù)數(shù)據(jù)總值隨機(jī)分配子值,這種情況下,部分子值可能小于扣減額,小于扣減額的子值在后續(xù)步驟S102中可以合并到合并子值數(shù)據(jù)塊中,其合并處理過程和扣減后余值小于或等于閾值時(shí)的處理過程相同,因此該實(shí)施方式已包含在本申請(qǐng)所保護(hù)的范圍之內(nèi)。
[0089]將數(shù)據(jù)總值分為多個(gè)子值后,將子值分別存放至水平拆分的子值數(shù)據(jù)塊中,子值數(shù)據(jù)塊根據(jù)子值的個(gè)數(shù)在不同的數(shù)據(jù)庫中開辟空間并建立。所述水平拆分為常規(guī)的數(shù)據(jù)庫技術(shù)手段,用于將數(shù)據(jù)表拆分并在不同的數(shù)據(jù)庫的數(shù)據(jù)塊中存儲(chǔ)。通過將數(shù)據(jù)總值分散,存放于多個(gè)分布于不同數(shù)據(jù)庫的數(shù)據(jù)塊中,使得扣減等操作也被分散,從而避免產(chǎn)生熱點(diǎn)問題,提高數(shù)據(jù)處理效率。
[0090]在步驟S102中,當(dāng)子值數(shù)據(jù)塊的余值小于或等于閾值時(shí),合并余值碎片,所述合并余值碎片包括:將所述子值數(shù)據(jù)塊的余值合并至合并子值數(shù)據(jù)塊中,且設(shè)置所述子值數(shù)據(jù)塊的余值為零;
[0091]在步驟S103中,當(dāng)進(jìn)行扣減時(shí),合并子值數(shù)據(jù)塊參與扣減。
[0092]其中,步驟S103中,扣減時(shí),在合并子值數(shù)據(jù)塊中也進(jìn)行扣減,從而保證總余值達(dá)到最小,最大程度地減少余值碎片的產(chǎn)生。對(duì)于子值數(shù)據(jù)塊的扣減為隱含公開的常規(guī)的步驟??蹨p時(shí),可以先在子值數(shù)據(jù)塊中進(jìn)行扣減,當(dāng)所有子值數(shù)據(jù)塊都不能扣減時(shí)或者子值數(shù)據(jù)塊的余值為零時(shí)(所有子值數(shù)據(jù)塊的余值都被合并完畢),然后在合并子值數(shù)據(jù)塊中扣減;也可以扣減時(shí)在可扣減(余值大于閾值)在子值數(shù)據(jù)塊和合并子值數(shù)據(jù)塊中選取其中之一進(jìn)行扣減,當(dāng)所有子值數(shù)據(jù)塊都不能扣減時(shí)或者子值數(shù)據(jù)塊的余值為零時(shí),只有合并子值數(shù)據(jù)塊可選,因此最后自然地在合并子值數(shù)據(jù)塊中扣減??蹨p時(shí),優(yōu)選在可扣減(余值大于閾值)在子值數(shù)據(jù)塊和合并子值數(shù)據(jù)塊中選取其中之一進(jìn)行扣減,以防止最后集中地在合并子值數(shù)據(jù)塊中進(jìn)行扣減造成一定程度的熱點(diǎn)問題,下面主要以該種扣減方式對(duì)本申請(qǐng)進(jìn)行說明,根據(jù)本申請(qǐng)的以下說明,本領(lǐng)域技術(shù)人員可以容易地推斷出其他扣減方式時(shí)本申請(qǐng)的過程、原理和應(yīng)用。
[0093]對(duì)于步驟S103,在一種優(yōu)選的實(shí)施方式中,當(dāng)進(jìn)行扣減時(shí),在余值大于或等于閾值的子值數(shù)據(jù)塊和合并子值數(shù)據(jù)塊中選取其中之一進(jìn)行扣減。在該實(shí)施方式中,當(dāng)步驟S102中為當(dāng)子值數(shù)據(jù)塊的余值小于閾值時(shí),合并余值碎片,則步驟S103中選取余值大于或等于閾值的子值數(shù)據(jù)塊或合并子值數(shù)據(jù)塊進(jìn)行扣減;當(dāng)步驟S102中為當(dāng)子值數(shù)據(jù)塊的余值小于或等于閾值時(shí),合并余值碎片,則步驟S103中選取余值大于閾值的子值數(shù)據(jù)塊或合并子值數(shù)據(jù)塊進(jìn)行扣減。
[0094]其中,在一種可能的實(shí)施方式中,步驟S102可以在步驟S103之前執(zhí)行,例如,當(dāng)子值在子值數(shù)據(jù)塊中存放后,可以先掃描各個(gè)子值數(shù)據(jù)塊,判斷是否有余值小于或等于閾值的子值數(shù)據(jù)塊,對(duì)余值小于或等于閾值的子值數(shù)據(jù)塊,將其余值合并至合并子值數(shù)據(jù)塊中,之后當(dāng)進(jìn)行扣減時(shí),例如用戶申請(qǐng)空間時(shí),執(zhí)行步驟S103。在另一種可能的實(shí)施方式中,步驟S102在步驟S103之后執(zhí)行,例如,當(dāng)子值在子值數(shù)據(jù)塊中存放后,進(jìn)行扣減時(shí),先執(zhí)行步驟S103,選取子值數(shù)據(jù)塊和合并子值數(shù)據(jù)塊其中之一進(jìn)行扣減,被選取進(jìn)行扣減的子值數(shù)據(jù)塊或合并子值數(shù)據(jù)的余值大于或等于閾值,之后執(zhí)行步驟S102。在又一種可能的實(shí)施方式中,步驟S102和步驟S103并發(fā)進(jìn)行,因?yàn)橛脩敉ǔJ遣l(fā)地發(fā)起扣減,例如多個(gè)用戶在同一時(shí)間搶購商品或者申請(qǐng)空間,因此可以由多個(gè)線程并發(fā)地對(duì)不同的子值數(shù)據(jù)塊執(zhí)行步驟S103,同時(shí)執(zhí)行步驟S102,以判斷是否有余值小于或等于閾值的子值數(shù)據(jù)塊,當(dāng)存在余值小于或等于閾值的子值數(shù)據(jù)塊時(shí),將其余值合并至合并子值數(shù)據(jù)塊中。
[0095]其中,對(duì)合并子值數(shù)據(jù)塊而言,可以在子值數(shù)據(jù)塊之外,另外開辟數(shù)據(jù)塊作為合并子值數(shù)據(jù)塊,其初始余值為零;或者,選取子值數(shù)據(jù)塊其中之一作為合并子值數(shù)據(jù)塊,選取方式可以為隨機(jī)選取,也可以選擇余值最小的子值數(shù)據(jù)塊為合并子值數(shù)據(jù)塊。選取子值數(shù)據(jù)塊其中之一作為合并子值數(shù)據(jù)塊為優(yōu)選方式,有利于節(jié)省數(shù)據(jù)庫空間。合并子值數(shù)據(jù)塊建立的時(shí)間為在發(fā)生第一次合并余值碎片操作之前,因此合并子值數(shù)據(jù)塊可以在步驟S101中建立,例如在建立子值數(shù)據(jù)塊的同時(shí)開辟數(shù)據(jù)庫空間建立合并子值數(shù)據(jù)塊,也可以在步驟S101之前建立,也可以在步驟S101之后且在步驟S102之前建立。合并子值數(shù)據(jù)塊在選定或建立后不變,所有小于或等于閾值的余值都被合并到該合并子值數(shù)據(jù)塊中。合并子值數(shù)據(jù)塊和子值數(shù)據(jù)塊都參與扣減。
[0096]其中,閾值選取大于或等于最大扣減額且小于數(shù)據(jù)總值的值。所述閾值的范圍在最小扣減額和數(shù)據(jù)總值之間,較優(yōu)的是閾值大于或等于最大扣減額,當(dāng)子值數(shù)據(jù)塊中不能扣減最大扣減額時(shí)便進(jìn)彳丁合并,以減少扣減最大扣減額的失敗次數(shù)和等待時(shí)間,例如,所有子值數(shù)據(jù)塊和合并子值數(shù)據(jù)塊中的余值都小于最大扣減額但大于閾值時(shí),將不能進(jìn)行最大扣減額的扣減,只有合并子值數(shù)據(jù)庫中的余值通過合并增加至大于最大扣減額后,才能進(jìn)行扣減最大扣減額的操作。
[0097]優(yōu)選的是閾值大于最大扣減額且小于兩倍的最大扣減額,這是因?yàn)椋绻撝颠^大,例如大于兩倍或更多倍的扣減額,則被合并的余值較大,使合并后合并子值數(shù)據(jù)塊的余值過高,轉(zhuǎn)移到合并子值數(shù)據(jù)塊上的扣減操作增加,可能使合并子值數(shù)據(jù)塊成為熱點(diǎn)數(shù)據(jù)塊;如果閾值較小,例如等于最大扣減額,則對(duì)每個(gè)子值數(shù)據(jù)塊,當(dāng)子值數(shù)據(jù)塊中的余值小于最大扣減額時(shí)才進(jìn)行合并時(shí),雖然該方式使每個(gè)子值數(shù)據(jù)塊的扣減次數(shù)較大,降低合并子值數(shù)據(jù)塊的扣減次數(shù),但由于線程沖突等原因發(fā)生操作錯(cuò)誤時(shí),對(duì)余值小于最大扣減額的子值數(shù)據(jù)塊發(fā)生扣減誤操作的風(fēng)險(xiǎn)增加,容易產(chǎn)生錯(cuò)誤數(shù)據(jù)(例如出現(xiàn)負(fù)值),例如有大量用戶不斷申請(qǐng)大小為最大扣減額的空間時(shí),出現(xiàn)對(duì)余值小于最大扣減額的子值數(shù)據(jù)塊的誤扣減。因此閾值優(yōu)選為閾值大于最大扣減額且小于兩倍的最大扣減額,即使發(fā)生誤扣減,由于余值大于最大扣減額,也可以避免產(chǎn)生錯(cuò)誤數(shù)據(jù)。
[0098]其中,步驟S102中,對(duì)余值小于或等于閾值的子值數(shù)據(jù)塊,將所述子值數(shù)據(jù)塊的余值合并至合并子值數(shù)據(jù)塊中,可以為:在合并子值數(shù)據(jù)塊中加上和所述子值數(shù)據(jù)塊的余值相同的值。并且可以在合并后,設(shè)置所述子值數(shù)據(jù)塊的余值為零,消除所述子值數(shù)據(jù)塊中的余值,優(yōu)選的是,在設(shè)置所述子值數(shù)據(jù)塊的余值為零后,設(shè)置所述子值數(shù)據(jù)塊的狀態(tài)為失效(Disabled),在后續(xù)的步驟中將忽略失效的子值數(shù)據(jù)塊,以簡(jiǎn)化操作過程,節(jié)省資源占用。同時(shí),本領(lǐng)域技術(shù)人員根據(jù)常識(shí)可以了知,未將狀態(tài)設(shè)置為失效的子值數(shù)據(jù)塊默認(rèn)為有效(Enabled)子值數(shù)據(jù)塊。步驟S102中,當(dāng)子值數(shù)據(jù)塊的余值大于或等于閾值時(shí),不進(jìn)行人
? 7Τ ο
[0099]其中,步驟S103中,當(dāng)進(jìn)行扣減時(shí),例如用戶發(fā)起扣減時(shí),可以在余值大于或等于閾值的子值數(shù)據(jù)塊和合并子值數(shù)據(jù)塊中隨機(jī)選取其一進(jìn)行扣減,當(dāng)所有子值數(shù)據(jù)塊的余值為零時(shí),選取合并子值數(shù)據(jù)塊進(jìn)行扣減,最后,合并子值數(shù)據(jù)塊中余值為零(扣減盡)或者余值小于最小扣減額時(shí),流程結(jié)束。進(jìn)行扣減時(shí),也可以使用其他方式來選取,例如,每次在子值數(shù)據(jù)塊和合并子值數(shù)據(jù)塊中選取余值最大的進(jìn)行扣減,或者,先在子值數(shù)據(jù)塊中隨機(jī)選取一個(gè)或者選取余值最大的進(jìn)行扣減,當(dāng)所有數(shù)據(jù)塊余值都為零時(shí),才選取合并子值數(shù)據(jù)塊進(jìn)行扣減。所述扣減為將被選取的子值數(shù)據(jù)塊或合并子值數(shù)據(jù)塊的余值減去扣減額。