基于分布式內(nèi)存和數(shù)據(jù)庫(kù)的數(shù)據(jù)處理方法、裝置和系統(tǒng)的制作方法
【技術(shù)領(lǐng)域】
[0001] 本申請(qǐng)涉及互聯(lián)網(wǎng)領(lǐng)域,特別涉及一種基于分布式內(nèi)存和數(shù)據(jù)庫(kù)DB的數(shù)據(jù)處理 方法、裝置和系統(tǒng)。
【背景技術(shù)】
[0002] 在互聯(lián)網(wǎng)越來(lái)越發(fā)達(dá)的現(xiàn)在,越來(lái)越多的用戶借助于互聯(lián)網(wǎng)處理數(shù)據(jù),例如,企業(yè) 報(bào)表或者word文檔等。再例如,也有很多用戶通過(guò)服務(wù)器來(lái)對(duì)一些數(shù)據(jù)進(jìn)行存儲(chǔ)、管理或 者更新等。如果數(shù)據(jù)量大,可以將數(shù)據(jù)存儲(chǔ)到多個(gè)服務(wù)器的數(shù)據(jù)庫(kù)中。例如,在電子商務(wù)中, 假設(shè)對(duì)于在售產(chǎn)品的數(shù)量,其總量為100,那么如果每次對(duì)總量扣減1的話,在扣減100次之 后,總量為零,將不再允許對(duì)該在售產(chǎn)品的數(shù)量的扣減。其中,在售產(chǎn)品的總量叫做"預(yù)算"。
[0003] 在現(xiàn)有技術(shù)中,服務(wù)器在采用數(shù)據(jù)庫(kù)DB(Database)來(lái)存儲(chǔ)預(yù)算數(shù)據(jù)并對(duì)其進(jìn)行 處理時(shí),一般分為兩種方式,第一種方式為:通過(guò)一個(gè)DB的一條記錄來(lái)存放預(yù)算數(shù)據(jù),每次 對(duì)該預(yù)算數(shù)據(jù)進(jìn)行扣減時(shí)可以通過(guò)DB的SQL語(yǔ)句在同一個(gè)事務(wù)中進(jìn)行,這種方式稱為單DB 方式。第二種方式為:將預(yù)算數(shù)據(jù)拆分到不同服務(wù)器的不同的DB中,每次對(duì)預(yù)算數(shù)據(jù)需要 扣減時(shí)可以將扣減請(qǐng)求負(fù)載均衡到不同的DB上。例如,數(shù)量為1000的預(yù)算數(shù)據(jù)由分布在 10個(gè)DB的10條記錄存放,每條記錄100 ;而一次數(shù)量為3的扣減操作會(huì)被路由到10個(gè)DB 的其中一個(gè)(例如第二個(gè))上,扣減后,第二個(gè)DB的預(yù)算余額變?yōu)?7,剩余的9個(gè)DB中的 9條記錄的預(yù)算余額仍為100。
[0004] 但是發(fā)明人發(fā)現(xiàn)現(xiàn)有技術(shù)存在以下問(wèn)題:對(duì)于第一種單個(gè)DB的數(shù)據(jù)處理方式來(lái) 說(shuō):由于讀寫(xiě)都需要訪問(wèn)DB,所以對(duì)DB性能要求較高,特別是以磁盤(pán)作為存儲(chǔ)介質(zhì)的DB,而 磁盤(pán)的讀寫(xiě)性能相對(duì)較低,因此這種方式不能滿足高并發(fā)的數(shù)據(jù)處理請(qǐng)求的需求。對(duì)于第 二種多DB的分布式數(shù)據(jù)處理方式來(lái)說(shuō):多DB的分布式數(shù)據(jù)處理方式通過(guò)增加DB的數(shù)量解 決了單DB性能過(guò)低的問(wèn)題,可以滿足高并發(fā)需求,但是需要使用大量的DB,就造成成本過(guò) 高的現(xiàn)象。
【發(fā)明內(nèi)容】
[0005] 基于發(fā)明人發(fā)現(xiàn)的目前數(shù)據(jù)處理中存在的問(wèn)題,本申請(qǐng)?zhí)峁┮环N基于分布式內(nèi)存 和數(shù)據(jù)庫(kù)的數(shù)據(jù)處理方法,用以解決現(xiàn)有技術(shù)中進(jìn)行數(shù)據(jù)處理時(shí)采用單個(gè)DB進(jìn)行數(shù)據(jù)處 理導(dǎo)致的不能滿足高并發(fā)請(qǐng)求的問(wèn)題,同時(shí)也解決了采用大量的DB導(dǎo)致的成本過(guò)高的問(wèn) 題,從而在降低成本的同時(shí),滿足高并發(fā)請(qǐng)求的實(shí)際需求。進(jìn)一步的,還能在服務(wù)器發(fā)生宕 機(jī)的情況下,也能保證數(shù)據(jù)的一致性。
[0006] 本申請(qǐng)還提供了基于分布式內(nèi)存和數(shù)據(jù)庫(kù)的數(shù)據(jù)處理裝置及系統(tǒng),用以保證上述 方法在實(shí)際中的實(shí)現(xiàn)及應(yīng)用。
[0007] 為了解決上述問(wèn)題,本申請(qǐng)公開(kāi)了一種基于分布式內(nèi)存和數(shù)據(jù)庫(kù)的數(shù)據(jù)處理方 法,該方法包括 :
[0008] 接收用戶觸發(fā)的數(shù)據(jù)處理請(qǐng)求,其中,所述數(shù)據(jù)處理請(qǐng)求包括:當(dāng)前預(yù)算數(shù)據(jù)的預(yù) 算標(biāo)識(shí)和預(yù)算額度;
[0009] 依據(jù)所述預(yù)算標(biāo)識(shí)判斷存儲(chǔ)所述當(dāng)前預(yù)算數(shù)據(jù)的當(dāng)前內(nèi)存分片中的內(nèi)存額度是 否大于所述預(yù)算額度,如果是,則直接在所述當(dāng)前內(nèi)存分片中將所述內(nèi)存額度扣減所述預(yù) 算額度;
[0010] 如果否,則依據(jù)所述預(yù)算標(biāo)識(shí)判斷所述當(dāng)前內(nèi)存分片中存儲(chǔ)的當(dāng)前數(shù)據(jù)庫(kù)剩余額 度和所述內(nèi)存額度之和是否大于所述預(yù)算額度,如果是,則依據(jù)所述當(dāng)前數(shù)據(jù)庫(kù)剩余額度 和內(nèi)存額度扣減所述預(yù)算額度;
[0011] 將所述扣減所述預(yù)算額度的扣減記錄存儲(chǔ)至所述當(dāng)前數(shù)據(jù)庫(kù)中,所述當(dāng)前數(shù)據(jù)庫(kù) 與所述當(dāng)前內(nèi)存分片對(duì)應(yīng)保存相同預(yù)算標(biāo)識(shí)的預(yù)算數(shù)據(jù)。
[0012] 本申請(qǐng)?zhí)峁┮环N基于分布式內(nèi)存和數(shù)據(jù)庫(kù)的數(shù)據(jù)補(bǔ)償方法,該方法包括:數(shù)據(jù)處 理過(guò)程和數(shù)據(jù)補(bǔ)償過(guò)程;
[0013] 其中,所述數(shù)據(jù)處理過(guò)程包括:
[0014] 接收用戶觸發(fā)的數(shù)據(jù)處理請(qǐng)求,其中,所述數(shù)據(jù)處理請(qǐng)求包括:當(dāng)前預(yù)算數(shù)據(jù)的預(yù) 算標(biāo)識(shí)和預(yù)算額度;
[0015] 依據(jù)所述預(yù)算標(biāo)識(shí)判斷存儲(chǔ)所述當(dāng)前預(yù)算數(shù)據(jù)的當(dāng)前內(nèi)存分片中的內(nèi)存額度是 否大于所述預(yù)算額度,如果是,則直接在所述當(dāng)前內(nèi)存分片中將所述內(nèi)存額度扣減所述預(yù) 算額度;
[0016] 如果否,則依據(jù)所述預(yù)算標(biāo)識(shí)判斷存儲(chǔ)所述當(dāng)前內(nèi)存分片中存儲(chǔ)的當(dāng)前數(shù)據(jù)庫(kù)剩 余額度和所述內(nèi)存額度之和是否大于所述預(yù)算額度,如果是,則從所述當(dāng)前數(shù)據(jù)庫(kù)剩余額 度和內(nèi)存額度中扣減所述預(yù)算額度;
[0017] 將所述扣減所述預(yù)算額度的記錄存儲(chǔ)至所述當(dāng)前數(shù)據(jù)庫(kù)中,所述當(dāng)前數(shù)據(jù)庫(kù)與所 述當(dāng)前內(nèi)存分片對(duì)應(yīng)保存相同預(yù)算標(biāo)識(shí)的預(yù)算數(shù)據(jù);
[0018] 其中,所述數(shù)據(jù)補(bǔ)償過(guò)程包括:
[0019] 依據(jù)待同步的預(yù)算標(biāo)識(shí)確定待處理的目標(biāo)數(shù)據(jù)庫(kù);
[0020] 從所述目標(biāo)數(shù)據(jù)庫(kù)中獲取該預(yù)算標(biāo)識(shí)對(duì)應(yīng)的所有扣減記錄和轉(zhuǎn)移記錄,其中,所 述轉(zhuǎn)移記錄表示將額度從數(shù)據(jù)庫(kù)轉(zhuǎn)移至與內(nèi)存分片的記錄;
[0021] 判斷所述所有轉(zhuǎn)移記錄所表示的轉(zhuǎn)移總額度值是否大于所述扣減記錄所表示的 扣減總額度值,如果是,則將所述轉(zhuǎn)移總額度值與所述扣減總額度值的差值作為數(shù)據(jù)庫(kù)補(bǔ) 償額度存儲(chǔ)至所述目標(biāo)數(shù)據(jù)庫(kù)中;
[0022] 將存儲(chǔ)所述差值的記錄更新在所述目標(biāo)數(shù)據(jù)庫(kù)中。
[0023] 本申請(qǐng)還提供一種基于分布式內(nèi)存和數(shù)據(jù)庫(kù)的數(shù)據(jù)處理裝置,所述裝置包括:
[0024] 接收請(qǐng)求單元,用于接收用戶觸發(fā)的數(shù)據(jù)處理請(qǐng)求,其中,所述數(shù)據(jù)處理請(qǐng)求包 括:當(dāng)前預(yù)算數(shù)據(jù)的預(yù)算標(biāo)識(shí)和預(yù)算額度;
[0025] 第一判斷單元,用于依據(jù)所述預(yù)算標(biāo)識(shí)判斷存儲(chǔ)所述當(dāng)前預(yù)算數(shù)據(jù)的當(dāng)前內(nèi)存分 片中的內(nèi)存額度是否大于所述預(yù)算額度;
[0026] 第一扣減單元,用于在所述第一判斷單元的結(jié)果為是的情況下,直接在所述當(dāng)前 內(nèi)存分片中將所述內(nèi)存額度扣減所述預(yù)算額度;
[0027] 第二判斷單元,用于在所述第一判斷單元的結(jié)果為否的情況下,依據(jù)所述預(yù)算標(biāo) 識(shí)判斷所述當(dāng)前內(nèi)存分片中存儲(chǔ)的當(dāng)前數(shù)據(jù)庫(kù)剩余額度和所述內(nèi)存額度之和是否大于所 述預(yù)算額度;
[0028] 第二扣減單元,用于在所述第二判斷模塊的結(jié)果為是的情況下,依據(jù)所述當(dāng)前數(shù) 據(jù)庫(kù)剩余額度和內(nèi)存額度扣減所述預(yù)算額度;
[0029] 存儲(chǔ)扣減記錄單元,用于將所述扣減所述預(yù)算額度的扣減記錄存儲(chǔ)至所述當(dāng)前數(shù) 據(jù)庫(kù)中,所述當(dāng)前數(shù)據(jù)庫(kù)與所述當(dāng)前內(nèi)存分片對(duì)應(yīng)保存相同預(yù)算標(biāo)識(shí)的預(yù)算數(shù)據(jù)。
[0030] 本申請(qǐng)還提供了一種數(shù)據(jù)處理系統(tǒng),該系統(tǒng)包括:數(shù)據(jù)處理裝置和數(shù)據(jù)補(bǔ)償裝置, 其中,所述數(shù)據(jù)處理裝置包括:
[0031] 接收請(qǐng)求單元,用于接收用戶觸發(fā)的數(shù)據(jù)處理請(qǐng)求,其中,所述數(shù)據(jù)處理請(qǐng)求包 括:當(dāng)前預(yù)算數(shù)據(jù)的預(yù)算標(biāo)識(shí)和預(yù)算額度;
[0032] 第一判斷單元,用于依據(jù)所述預(yù)算標(biāo)識(shí)判斷存儲(chǔ)所述當(dāng)前預(yù)算數(shù)據(jù)的當(dāng)前內(nèi)存分 片中的內(nèi)存額度是否大于所述預(yù)算額度;
[0033] 第一扣減單元,用于在所述第一判斷單元的結(jié)果為是的情況下,直接在所述當(dāng)前 內(nèi)存分片中將所述內(nèi)存額度扣減所述預(yù)算額度;
[0034] 第二判斷單元,用于在所述第一判斷單元的結(jié)果為否的情況下,依據(jù)所述預(yù)算標(biāo) 識(shí)判斷所述當(dāng)前內(nèi)存分片中存儲(chǔ)的當(dāng)前數(shù)據(jù)庫(kù)剩余額度和所述內(nèi)存額度之和是否大于所 述預(yù)算額度;
[0035] 第二扣減單元,用于在所述第二判斷模塊的結(jié)果為是的情況下,依據(jù)所述當(dāng)前數(shù) 據(jù)庫(kù)剩余額度和內(nèi)存額度扣減所述預(yù)算額度;
[0036] 存儲(chǔ)扣減記錄單元,用于將所述扣減所述預(yù)算額度的扣減記錄存儲(chǔ)至所述當(dāng)前數(shù) 據(jù)庫(kù)中,所述當(dāng)前數(shù)據(jù)庫(kù)與所述當(dāng)前內(nèi)存分片對(duì)應(yīng)保存相同預(yù)算標(biāo)識(shí)的預(yù)算數(shù)據(jù);
[0037] 所述數(shù)據(jù)補(bǔ)償裝置包括:
[0038] 確定單元,用于依據(jù)待同步的預(yù)算標(biāo)識(shí)確定待處理的目標(biāo)數(shù)據(jù)庫(kù);
[0039] 獲取記錄單元,用于從所述目標(biāo)數(shù)據(jù)庫(kù)中獲取該預(yù)算標(biāo)識(shí)對(duì)應(yīng)的所有扣減記錄和 轉(zhuǎn)移記錄,其中,所述轉(zhuǎn)移記錄表示將額度從數(shù)據(jù)庫(kù)轉(zhuǎn)移至與內(nèi)存分片的記錄;
[0040] 第六判斷單元,用于判斷所述所有轉(zhuǎn)移記錄所表示的轉(zhuǎn)移總額度值是否大于所述 扣減記錄所表示的扣減總額度值;
[0041] 存儲(chǔ)補(bǔ)償額度單元,用于在所述第六判斷單元的結(jié)果為是的情況下,將所述轉(zhuǎn)移 總額度值與所述扣減總額度值的差值作為數(shù)據(jù)庫(kù)補(bǔ)償額度存儲(chǔ)至所述目標(biāo)數(shù)據(jù)庫(kù)中; [0042] 更新單元,用于將存儲(chǔ)所述差值的記錄更新在所述目標(biāo)數(shù)據(jù)庫(kù)中。
[0043] 與現(xiàn)有技術(shù)相比,本申請(qǐng)包括以下優(yōu)點(diǎn):
[0044] 采用本申請(qǐng)實(shí)施例,可以大大減少對(duì)DB的訪問(wèn)次數(shù),而因?yàn)閮?nèi)存相對(duì)于DB的性能 較高,一方面可以利用對(duì)內(nèi)存的訪問(wèn)提升數(shù)據(jù)處理性能,一方面也會(huì)因?yàn)闇p少了DB的訪問(wèn) 次數(shù)從而降低DB對(duì)于數(shù)據(jù)處理請(qǐng)求的影響。因此,本申請(qǐng)實(shí)施例采用的分布式內(nèi)存和分布 式DB的方式,既能提升數(shù)據(jù)處理性能,滿足高并發(fā)請(qǐng)求,并且也能節(jié)省DB的數(shù)量,從而節(jié)省 成本。
[0045] 本申請(qǐng)的有益效果還在于:在扣減預(yù)算額度的操作成功的情況下,可以通知用戶 預(yù)算額度扣減成功,反之則用戶預(yù)算額度扣減失敗。從而將扣減結(jié)果實(shí)時(shí)反饋給用戶,方便 用戶了解預(yù)算額度的扣減情況。
[0046] 本申請(qǐng)的有益效果還在于:方便在內(nèi)存余額和DB額度的總額度不足時(shí)直接告知 用戶額度不足,從而可以減少對(duì)DB的訪問(wèn)。
[0047] 本申請(qǐng)的有益效果還在于:大幅提升服務(wù)器宕機(jī)后在內(nèi)存分片中恢復(fù)數(shù)據(jù)的速 度。
[0048] 當(dāng)然,實(shí)施本申請(qǐng)的任一產(chǎn)