數(shù)據(jù)處理方法和裝置制造方法
【專利摘要】本發(fā)明公開了一種數(shù)據(jù)處理方法和裝置。其中,數(shù)據(jù)處理的方法包括:獲取待處理數(shù)據(jù);分別運(yùn)行多個(gè)事務(wù)來處理待處理數(shù)據(jù),其中,多個(gè)事務(wù)為從預(yù)設(shè)事務(wù)中預(yù)先拆分出的相互之間獨(dú)立的多個(gè)事務(wù),預(yù)設(shè)事務(wù)為用于處理待處理數(shù)據(jù)的事務(wù),預(yù)設(shè)事務(wù)包括多個(gè)子事務(wù),多個(gè)事務(wù)中的每一個(gè)事務(wù)對(duì)應(yīng)多個(gè)子事務(wù)中的一個(gè)子事務(wù);判斷多個(gè)事務(wù)中是否存在運(yùn)行異常的事務(wù);以及如果判斷出多個(gè)事務(wù)中存在運(yùn)行異常的事務(wù),則重新運(yùn)行該運(yùn)行異常的事務(wù)。通過本發(fā)明,解決了現(xiàn)有技術(shù)中數(shù)據(jù)處理效率低的問題,達(dá)到了提高數(shù)據(jù)處理的效率的效果。
【專利說明】數(shù)據(jù)處理方法和裝置
【技術(shù)領(lǐng)域】
[0001] 本發(fā)明涉及數(shù)據(jù)處理領(lǐng)域,具體而言,涉及一種數(shù)據(jù)處理方法和裝置。
【背景技術(shù)】
[0002] 事務(wù)是數(shù)據(jù)庫程序執(zhí)行的基本單元,當(dāng)一個(gè)事務(wù)內(nèi)容全部執(zhí)行完后會(huì)統(tǒng)一提交執(zhí) 行結(jié)果,程序中任何步驟執(zhí)行異常會(huì)導(dǎo)致數(shù)據(jù)狀態(tài)回滾到事務(wù)執(zhí)行之前,進(jìn)而導(dǎo)致重新執(zhí) 行該事務(wù)。事務(wù)在關(guān)系數(shù)據(jù)庫(如SQL server)中可以是一條結(jié)構(gòu)化查詢語言(Structured Query Language,簡(jiǎn)稱為SQL)語句,也可以是一個(gè)程序。
[0003] 事務(wù)中通??梢园ǘ鄠€(gè)子事務(wù),在一個(gè)事務(wù)中可以把功能相互獨(dú)立的部分分成 多個(gè)子事務(wù),并行執(zhí)行這些子事務(wù),從而有效的提高數(shù)據(jù)處理性能。子事務(wù)是指包含在一個(gè) 事務(wù)中的事務(wù),如某個(gè)事務(wù)程序中的一條SQL語句。
[0004] 當(dāng)前為保證程序并行且不破環(huán)完整功能,采用并行子事務(wù)的方法來實(shí)現(xiàn)數(shù)據(jù)庫程 序的并行處理。即在一個(gè)功能完整的事務(wù)中,將內(nèi)部功能相互獨(dú)立的部分分成多個(gè)子事務(wù) 并行執(zhí)行。如在多維建模工程的數(shù)據(jù)倉庫寫入過程中,當(dāng)數(shù)據(jù)倉庫中的維度表數(shù)據(jù)填充完 畢后,可以并行填充事實(shí)表的數(shù)據(jù),各個(gè)事實(shí)表之間數(shù)據(jù)相互獨(dú)立,但全部依賴維度表中的 數(shù)據(jù)。將整個(gè)填充數(shù)據(jù)倉庫的過程作為一個(gè)完整的事務(wù),那么可以把維度數(shù)據(jù)的處理和各 個(gè)事實(shí)表數(shù)據(jù)的處理看作是子事務(wù),而各個(gè)事實(shí)表數(shù)據(jù)可以并行寫入,即是多個(gè)并行子事 務(wù)。通過子事務(wù)的并行處理可以提高數(shù)據(jù)倉庫的寫入效率。
[0005] 然而,由于事務(wù)具有原子性的特點(diǎn),即需要等全部執(zhí)行完成后統(tǒng)一提交執(zhí)行結(jié)果。 在這期間任何步驟出現(xiàn)異常會(huì)導(dǎo)致數(shù)據(jù)回滾到事務(wù)開始之前的狀態(tài)。例如,在并行子事務(wù) 中,雖然子事務(wù)功能相互獨(dú)立,但是如果任何一個(gè)子事務(wù)中出現(xiàn)處理異常,則會(huì)影響其他所 有并行子事務(wù),某個(gè)子事務(wù)重新處理時(shí),需要重新處理事務(wù)內(nèi)的所有子事務(wù),而不僅僅處理 出現(xiàn)異常的子事務(wù)。這樣,由于某子事務(wù)異常后導(dǎo)致該子事務(wù)所屬的事務(wù)需全部重新執(zhí)行, 最終導(dǎo)致數(shù)據(jù)處理效率低。
[0006] 針對(duì)現(xiàn)有技術(shù)中數(shù)據(jù)處理效率低的問題,目前尚未提出有效的解決方案。
【發(fā)明內(nèi)容】
[0007] 本發(fā)明的主要目的在于提供一種數(shù)據(jù)處理方法和裝置,以解決數(shù)據(jù)處理效率低的 問題。
[0008] 為了實(shí)現(xiàn)上述目的,根據(jù)本發(fā)明實(shí)施例的一個(gè)方面,提供了一種數(shù)據(jù)處理方法。 根據(jù)本發(fā)明的數(shù)據(jù)處理的方法包括:獲取待處理數(shù)據(jù);分別運(yùn)行多個(gè)事務(wù)來處理待處理數(shù) 據(jù),其中,多個(gè)事務(wù)為從預(yù)設(shè)事務(wù)中預(yù)先拆分出的相互之間獨(dú)立的多個(gè)事務(wù),預(yù)設(shè)事務(wù)為用 于處理待處理數(shù)據(jù)的事務(wù),預(yù)設(shè)事務(wù)包括多個(gè)子事務(wù),多個(gè)事務(wù)中的每一個(gè)事務(wù)對(duì)應(yīng)多個(gè) 子事務(wù)中的一個(gè)子事務(wù);判斷多個(gè)事務(wù)中是否存在運(yùn)行異常的事務(wù);以及如果判斷出多個(gè) 事務(wù)中存在運(yùn)行異常的事務(wù),則重新運(yùn)行該運(yùn)行異常的事務(wù)。
[0009] 進(jìn)一步地,在分別運(yùn)行多個(gè)事務(wù)來處理待處理數(shù)據(jù)之前,數(shù)據(jù)處理方法還包括:獲 取預(yù)設(shè)事務(wù)中的多個(gè)子事務(wù);以及將多個(gè)子事務(wù)提取為多個(gè)獨(dú)立的事務(wù),得到多個(gè)事務(wù)。
[0010] 進(jìn)一步地,判斷多個(gè)事務(wù)中是否存在運(yùn)行異常的事務(wù)包括:記錄多個(gè)事務(wù)中每個(gè) 事務(wù)對(duì)應(yīng)的狀態(tài)位,狀態(tài)位用于反映多個(gè)事務(wù)中每個(gè)事務(wù)的運(yùn)行狀態(tài),其中,當(dāng)狀態(tài)位為預(yù) 設(shè)標(biāo)識(shí)時(shí),狀態(tài)位對(duì)應(yīng)的事務(wù)運(yùn)行異常;通過判斷狀態(tài)位是否為預(yù)設(shè)標(biāo)識(shí)來判斷多個(gè)事務(wù) 中是否存在運(yùn)行異常的事務(wù)。
[0011] 進(jìn)一步地,在分別運(yùn)行多個(gè)事務(wù)來處理待處理數(shù)據(jù)之前,數(shù)據(jù)處理方法還包括:創(chuàng) 建用于標(biāo)記狀態(tài)位的狀態(tài)表;更新狀態(tài)表中的狀態(tài)位為開始運(yùn)行時(shí)間,開始運(yùn)行時(shí)間為多 個(gè)事務(wù)開始運(yùn)行的時(shí)間,其中,當(dāng)多個(gè)事務(wù)中每個(gè)事務(wù)運(yùn)行結(jié)束時(shí),在狀態(tài)表上將運(yùn)行結(jié)束 的事務(wù)的狀態(tài)位更新為運(yùn)行結(jié)束的事務(wù)的運(yùn)行結(jié)束時(shí)間,判斷狀態(tài)位是否為預(yù)設(shè)標(biāo)識(shí)包 括:判斷狀態(tài)位是否是開始運(yùn)行時(shí)間,其中,如果判斷出狀態(tài)位是開始運(yùn)行時(shí)間,則確定狀 態(tài)位對(duì)應(yīng)的事務(wù)運(yùn)行異常。
[0012] 進(jìn)一步地,狀態(tài)位為數(shù)字狀態(tài)位,其中,當(dāng)數(shù)字狀態(tài)位是第一數(shù)值時(shí),數(shù)字狀態(tài)位 對(duì)應(yīng)的事務(wù)運(yùn)行結(jié)束,當(dāng)數(shù)字狀態(tài)位是第二數(shù)值時(shí),數(shù)字狀態(tài)位對(duì)應(yīng)的事務(wù)運(yùn)行異常,判斷 多個(gè)事務(wù)中是否存在運(yùn)行異常的事務(wù)包括:判斷數(shù)字狀態(tài)位是第一數(shù)值還是第二數(shù)值,其 中,如果判斷出數(shù)字狀態(tài)位是第一數(shù)值時(shí),確定數(shù)字狀態(tài)位對(duì)應(yīng)的事務(wù)運(yùn)行結(jié)束;如果判斷 出數(shù)字狀態(tài)位是第二數(shù)值時(shí),確定數(shù)字狀態(tài)位對(duì)應(yīng)的事務(wù)運(yùn)行異常。
[0013] 為了實(shí)現(xiàn)上述目的,根據(jù)本發(fā)明實(shí)施例的另一方面,提供了一種數(shù)據(jù)處理裝置。根 據(jù)本發(fā)明的數(shù)據(jù)處理裝置包括:第一獲取單元,用于獲取待處理數(shù)據(jù);處理單元,用于分別 運(yùn)行多個(gè)事務(wù)來處理待處理數(shù)據(jù),其中,多個(gè)事務(wù)為從預(yù)設(shè)事務(wù)中預(yù)先拆分出的相互之間 獨(dú)立的多個(gè)事務(wù),預(yù)設(shè)事務(wù)為用于處理待處理數(shù)據(jù)的事務(wù),預(yù)設(shè)事務(wù)包括多個(gè)子事務(wù),多個(gè) 事務(wù)中的每一個(gè)事務(wù)對(duì)應(yīng)多個(gè)子事務(wù)中的一個(gè)子事務(wù);判斷單元,用于判斷多個(gè)事務(wù)中是 否存在運(yùn)行異常的事務(wù);以及運(yùn)行單元,用于如果判斷出多個(gè)事務(wù)中存在運(yùn)行異常的事務(wù), 則重新運(yùn)行該運(yùn)行異常的事務(wù)。
[0014] 進(jìn)一步地,數(shù)據(jù)處理裝置還包括:第二獲取單元,用于在分別運(yùn)行多個(gè)事務(wù)來處理 待處理數(shù)據(jù)之前,獲取預(yù)設(shè)事務(wù)中的多個(gè)子事務(wù);以及提取單元,用于將多個(gè)子事務(wù)提取為 多個(gè)獨(dú)立的事務(wù),得到多個(gè)事務(wù)。
[0015] 進(jìn)一步地,判斷單元包括:記錄模塊,用于記錄多個(gè)事務(wù)中每個(gè)事務(wù)對(duì)應(yīng)的狀態(tài) 位,狀態(tài)位用于反映多個(gè)事務(wù)中每個(gè)事務(wù)的運(yùn)行狀態(tài),其中,當(dāng)狀態(tài)位為預(yù)設(shè)標(biāo)識(shí)時(shí),狀態(tài) 位對(duì)應(yīng)的事務(wù)運(yùn)行異常;第一判斷模塊,用于通過判斷狀態(tài)位是否為預(yù)設(shè)標(biāo)識(shí)來判斷多個(gè) 事務(wù)中是否存在運(yùn)行異常的事務(wù)。
[0016] 進(jìn)一步地,數(shù)據(jù)處理裝置還包括:創(chuàng)建單元,用于在分別運(yùn)行多個(gè)事務(wù)來處理待處 理數(shù)據(jù)之前,創(chuàng)建用于標(biāo)記狀態(tài)位的狀態(tài)表;更新單元,用于更新狀態(tài)表中的狀態(tài)位為開始 運(yùn)行時(shí)間,開始運(yùn)行時(shí)間為多個(gè)事務(wù)開始運(yùn)行的時(shí)間,其中,當(dāng)多個(gè)事務(wù)中每個(gè)事務(wù)運(yùn)行結(jié) 束時(shí),在狀態(tài)表上將運(yùn)行結(jié)束的事務(wù)的狀態(tài)位更新為運(yùn)行結(jié)束的事務(wù)的運(yùn)行結(jié)束時(shí)間,判 斷模塊還用于判斷狀態(tài)位是否是開始運(yùn)行時(shí)間,其中,如果判斷出狀態(tài)位是開始運(yùn)行時(shí)間, 則確定狀態(tài)位對(duì)應(yīng)的事務(wù)運(yùn)行異常。
[0017] 進(jìn)一步地,狀態(tài)位為數(shù)字狀態(tài)位,其中,當(dāng)數(shù)字狀態(tài)位是第一數(shù)值時(shí),數(shù)字狀態(tài)位 對(duì)應(yīng)的事務(wù)運(yùn)行結(jié)束,當(dāng)數(shù)字狀態(tài)位是第二數(shù)值時(shí),數(shù)字狀態(tài)位對(duì)應(yīng)的事務(wù)運(yùn)行異常,判斷 單元包括:第二判斷模塊,用于判斷數(shù)字狀態(tài)位是第一數(shù)值還是第二數(shù)值,其中,如果判斷 出數(shù)字狀態(tài)位是第一數(shù)值時(shí),確定數(shù)字狀態(tài)位對(duì)應(yīng)的事務(wù)運(yùn)行結(jié)束;如果判斷出數(shù)字狀態(tài) 位是第二數(shù)值時(shí),確定數(shù)字狀態(tài)位對(duì)應(yīng)的事務(wù)運(yùn)行異常。
[0018] 根據(jù)本發(fā)明實(shí)施例,通過分別運(yùn)行多個(gè)事務(wù)來處理待處理數(shù)據(jù),其中,多個(gè)事務(wù)為 從預(yù)設(shè)事務(wù)中預(yù)先拆分出的相互之間獨(dú)立的多個(gè)事務(wù),預(yù)設(shè)事務(wù)為用于處理待處理數(shù)據(jù)的 事務(wù),預(yù)設(shè)事務(wù)包括多個(gè)并行的子事務(wù),多個(gè)事務(wù)中的每一個(gè)事務(wù)對(duì)應(yīng)多個(gè)子事務(wù)中的一 個(gè)子事務(wù),在判斷出多個(gè)事務(wù)中存在運(yùn)行異常的事務(wù)時(shí),則只需重新運(yùn)行該異常的事務(wù),無 需運(yùn)行其他的事務(wù)。而現(xiàn)有技術(shù)中采用一個(gè)事務(wù)如預(yù)設(shè)事務(wù)來處理待處理數(shù)據(jù)時(shí),當(dāng)其中 某個(gè)子事務(wù)出現(xiàn)異常,由于事務(wù)具有原子性,需要重新運(yùn)行所有的子事務(wù),在本發(fā)明實(shí)施例 中,只需重新運(yùn)行出現(xiàn)異常的事務(wù),這樣大大提高了數(shù)據(jù)處理的效率,解決了現(xiàn)有技術(shù)中數(shù) 據(jù)處理效率低的問題,達(dá)到了提高數(shù)據(jù)處理的效率的效果。
【專利附圖】
【附圖說明】
[0019] 構(gòu)成本申請(qǐng)的一部分的附圖用來提供對(duì)本發(fā)明的進(jìn)一步理解,本發(fā)明的示意性實(shí) 施例及其說明用于解釋本發(fā)明,并不構(gòu)成對(duì)本發(fā)明的不當(dāng)限定。在附圖中:
[0020] 圖1是根據(jù)本發(fā)明實(shí)施例的數(shù)據(jù)處理方法的流程圖;
[0021] 圖2是根據(jù)本發(fā)明實(shí)施例優(yōu)選的數(shù)據(jù)處理方法的流程圖;
[0022] 圖3是根據(jù)本發(fā)明實(shí)施例又一優(yōu)選的數(shù)據(jù)處理方法的流程圖;
[0023] 圖4是根據(jù)本發(fā)明實(shí)施例的多個(gè)事務(wù)的示意圖;以及
[0024] 圖5是根據(jù)本發(fā)明實(shí)施例的數(shù)據(jù)處理裝置的示意圖。
【具體實(shí)施方式】
[0025] 需要說明的是,在不沖突的情況下,本申請(qǐng)中的實(shí)施例及實(shí)施例中的特征可以相 互組合。下面將參考附圖并結(jié)合實(shí)施例來詳細(xì)說明本發(fā)明。
[0026] 為了使本【技術(shù)領(lǐng)域】的人員更好地理解本發(fā)明方案,下面將結(jié)合本發(fā)明實(shí)施例中的 附圖,對(duì)本發(fā)明實(shí)施例中的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,所描述的實(shí)施例僅僅是 本發(fā)明一部分的實(shí)施例,而不是全部的實(shí)施例。基于本發(fā)明中的實(shí)施例,本領(lǐng)域普通技術(shù) 人員在沒有做出創(chuàng)造性勞動(dòng)前提下所獲得的所有其他實(shí)施例,都應(yīng)當(dāng)屬于本發(fā)明保護(hù)的范 圍。
[0027] 需要說明的是,本發(fā)明的說明書和權(quán)利要求書及上述附圖中的術(shù)語"第一"、"第 二"等是用于區(qū)別類似的對(duì)象,而不必用于描述特定的順序或先后次序。應(yīng)該理解這樣使 用的數(shù)據(jù)在適當(dāng)情況下可以互換,以便這里描述的本發(fā)明的實(shí)施例。此外,術(shù)語"包括"和 "具有"以及他們的任何變形,意圖在于覆蓋不排他的包含,例如,包含了一系列步驟或單元 的過程、方法、系統(tǒng)、產(chǎn)品或設(shè)備不必限于清楚地列出的那些步驟或單元,而是可包括沒有 清楚地列出的或?qū)τ谶@些過程、方法、產(chǎn)品或設(shè)備固有的其它步驟或單元。
[0028] 本發(fā)明實(shí)施例提供了 一種數(shù)據(jù)處理方法。
[0029] 圖1是根據(jù)本發(fā)明實(shí)施例的數(shù)據(jù)處理方法的流程圖。如圖1所示,該數(shù)據(jù)處理方 法包括步驟如下:
[0030] 步驟S102,獲取待處理數(shù)據(jù)。
[0031] 待處理數(shù)據(jù)可以是需要被處理的數(shù)據(jù),例如,維度數(shù)據(jù)(如時(shí)間數(shù)據(jù))和/或事實(shí) 數(shù)據(jù)(如產(chǎn)品銷售數(shù)據(jù))。
[0032]步驟S104,分別運(yùn)行多個(gè)事務(wù)來處理待處理數(shù)據(jù),其中,多個(gè)事務(wù)為從預(yù)設(shè)事務(wù)中 預(yù)先拆分出的相互之間獨(dú)立的多個(gè)事務(wù),預(yù)設(shè)事務(wù)為用于處理待處理數(shù)據(jù)的事務(wù),預(yù)設(shè)事 務(wù)包括多個(gè)并行的子事務(wù),多個(gè)事務(wù)中的每一個(gè)事務(wù)對(duì)應(yīng)多個(gè)子事務(wù)中的一個(gè)子事務(wù)。
[0033]其中,事務(wù)是數(shù)據(jù)庫中的一個(gè)程序執(zhí)行單元,在關(guān)系數(shù)據(jù)庫(如SQL server)中可 以是一條SQL語句,也可以是一個(gè)程序。在處理數(shù)據(jù)時(shí),把一個(gè)事務(wù)分成功能獨(dú)立的多個(gè)子 事務(wù),并運(yùn)行這些子事務(wù),可以有效地提高數(shù)據(jù)處理性能。多個(gè)事務(wù)可以為:寫入維度數(shù)據(jù) 的事務(wù)與寫入事實(shí)數(shù)據(jù)的事務(wù)。
[0034]預(yù)設(shè)事務(wù)可以是對(duì)待處理數(shù)據(jù)對(duì)應(yīng)的獨(dú)立事務(wù),該預(yù)設(shè)事務(wù)為用于處理待處理數(shù) 據(jù)的事務(wù),例如,在待處理數(shù)據(jù)為用于寫入到數(shù)據(jù)倉庫的數(shù)據(jù),那么,預(yù)設(shè)事務(wù)則是與之對(duì) 應(yīng)的將待處理數(shù)據(jù)寫入數(shù)據(jù)倉庫的事務(wù)。具體地,預(yù)設(shè)事務(wù)可以是通過SSIS(SQL Server Integration Services)工程將原始數(shù)據(jù)寫入數(shù)據(jù)倉庫中,數(shù)據(jù)倉庫即多維建模中用于存 儲(chǔ)多維度數(shù)據(jù)的數(shù)據(jù)庫,通常分為維度表和事實(shí)表。維度表存儲(chǔ)各類事實(shí)數(shù)據(jù)所要用的維 度信息,事實(shí)表存儲(chǔ)指標(biāo)數(shù)據(jù),并且與維度表相關(guān)聯(lián)。如維度表是時(shí)間表,事實(shí)表是產(chǎn)品銷 售表,則產(chǎn)品銷售表中有指標(biāo)數(shù)據(jù),且與時(shí)間相關(guān)聯(lián),則關(guān)聯(lián)到時(shí)維度表。
[0035]預(yù)設(shè)事務(wù)可以包括多個(gè)子事務(wù),該多個(gè)子事務(wù)中可以存在并行的子事務(wù)。本發(fā)明 實(shí)施例的多個(gè)事務(wù)是從該預(yù)設(shè)事務(wù)中按照多個(gè)子事務(wù)的功能拆分出的多個(gè)事務(wù),也即是, 多個(gè)事務(wù)中每個(gè)事務(wù)與預(yù)設(shè)事務(wù)中的一個(gè)子事務(wù)具有相同的功能,例如,預(yù)設(shè)事務(wù)包括子 事務(wù)A'、子事務(wù)B'和子事務(wù)C',那么拆分成的多個(gè)事務(wù)包括:事務(wù)A、事務(wù)B和事務(wù)C,其中, 事務(wù)A與子事務(wù)A'具有相同的功能,事務(wù)B與子事務(wù)B'具有相同的功能,事務(wù)C與子事務(wù) C'具有相同的功能。事務(wù)A、事務(wù)B和事務(wù)C均為獨(dú)立的事務(wù),每個(gè)事務(wù)均具有原子性。這 樣,利用用多個(gè)事務(wù)來處理待處理數(shù)據(jù),每個(gè)事務(wù)處理待處理數(shù)據(jù)的一部分,由于多個(gè)事務(wù) 中各事務(wù)均具有獨(dú)立性,在處理待處理數(shù)據(jù)過程中,當(dāng)某個(gè)事務(wù)出現(xiàn)異常,例如,事務(wù)執(zhí)行 失敗時(shí),則可以只重新執(zhí)行該異常的事務(wù)。
[0036]步驟S106,判斷多個(gè)事務(wù)中是否存在運(yùn)行異常的事務(wù)。
[0037]步驟S108,如果判斷出多個(gè)事務(wù)中存在運(yùn)行異常的事務(wù),則重新運(yùn)行該運(yùn)行異常 的事務(wù)。
[0038]判斷多個(gè)事務(wù)中是否存在運(yùn)行異常的事務(wù),如果存在,則重新運(yùn)行該異常的事務(wù), 由于多個(gè)事務(wù)之間相互獨(dú)立,多個(gè)事務(wù)中的其他事務(wù)則無需重新運(yùn)行;如果不存在異常事 務(wù),則待處理數(shù)據(jù)結(jié)束。具體地,判斷多個(gè)事務(wù)中是否存在運(yùn)行異常的事務(wù)可以是通過檢測(cè) 記錄事務(wù)運(yùn)行狀態(tài)的標(biāo)識(shí),判斷該標(biāo)識(shí)是否顯示事務(wù)運(yùn)行異常的方式來判斷。
[0039]根據(jù)本發(fā)明實(shí)施例,通過分別運(yùn)行多個(gè)事務(wù)來處理待處理數(shù)據(jù),其中,多個(gè)事務(wù)為 從預(yù)設(shè)事務(wù)中預(yù)先拆分出的相互之間獨(dú)立的多個(gè)事務(wù),預(yù)設(shè)事務(wù)為用于處理待處理數(shù)據(jù)的 事務(wù),預(yù)設(shè)事務(wù)包括多個(gè)并行的子事務(wù),多個(gè)事務(wù)中的每一個(gè)事務(wù)對(duì)應(yīng)多個(gè)子事務(wù)中的一 個(gè)子事務(wù),在判斷出多個(gè)事務(wù)中存在運(yùn)行異常的事務(wù)時(shí),則只需重新運(yùn)行該異常的事務(wù),無 需運(yùn)行其他的事務(wù)。而現(xiàn)有技術(shù)中采用一個(gè)事務(wù)如預(yù)設(shè)事務(wù)來處理待處理數(shù)據(jù)時(shí),當(dāng)其中 某個(gè)子事務(wù)出現(xiàn)異常,由于事務(wù)具有原子性,需要重新運(yùn)行所有的子事務(wù),在本發(fā)明實(shí)施例 中,只需重新運(yùn)行出現(xiàn)異常的事務(wù),這樣大大提高了數(shù)據(jù)處理的效率,解決了現(xiàn)有技術(shù)中數(shù) 據(jù)處理效率低的問題,達(dá)到了提高數(shù)據(jù)處理的效率的效果。
[0040]優(yōu)選地,在分別運(yùn)行多個(gè)事務(wù)來處理待處理數(shù)據(jù)之前,本發(fā)明實(shí)施例的數(shù)據(jù)處理 方法還包括:獲取預(yù)設(shè)事務(wù)中的多個(gè)子事務(wù);將多個(gè)子事務(wù)提取為多個(gè)獨(dú)立的事務(wù),得到 多個(gè)事務(wù)。
[0041] 這里的預(yù)設(shè)事務(wù)包括多個(gè)子事務(wù),即在一個(gè)事務(wù)中把功能相互獨(dú)立的部分分成多 個(gè)子事務(wù)。為保證程序并行且不破壞完整功能,采用并行子事務(wù)的方法來實(shí)現(xiàn)數(shù)據(jù)庫程序 的并行處理,這樣可以提高數(shù)據(jù)倉庫的寫入效率。例如,在多維建模工程的數(shù)據(jù)倉庫寫入過 程中,當(dāng)數(shù)據(jù)倉庫的維度數(shù)據(jù)表數(shù)據(jù)填充完畢后,可以并行填充事實(shí)表的數(shù)據(jù),各個(gè)事實(shí)表 之間數(shù)據(jù)相互獨(dú)立,但全部依賴維度表中的數(shù)據(jù)。將整個(gè)填充數(shù)據(jù)倉庫的過程作為一個(gè)完 整的事務(wù),那么可以把維度數(shù)據(jù)的處理和各個(gè)事實(shí)表數(shù)據(jù)的處理看作是子事務(wù),而各個(gè)事 實(shí)表數(shù)據(jù)可以并行寫入,即是多個(gè)并行子事務(wù)。但是,由于事務(wù)具有原子性的特點(diǎn),即需要 等全部操作完成后才能統(tǒng)一提交。在這期間任何步驟出現(xiàn)異常都會(huì)導(dǎo)致數(shù)據(jù)回滾到事務(wù)開 始之前的狀態(tài)。在并行子事務(wù)中,雖然子事務(wù)功能相互獨(dú)立,但是如果任何一個(gè)子事務(wù)中出 現(xiàn)處理異常,則會(huì)影響其他所有并行子事務(wù)。在重新處理時(shí),需要重新處理事務(wù)內(nèi)的全部過 程,而不僅僅是出現(xiàn)異常的分支。在本發(fā)明中,將并行子事務(wù)按功能提取為并行的獨(dú)立事 務(wù),其中,任何一個(gè)子事務(wù)出現(xiàn)異常,都會(huì)只在出現(xiàn)異常的子事務(wù)中重新運(yùn)行該事務(wù),且每 個(gè)子事務(wù)都為獨(dú)立提交,以此避免并行子事務(wù)之間相互影響的狀況(如需要等全部事務(wù)操 作完成后才能統(tǒng)一提受)。
[0042] 本發(fā)明實(shí)施例,獲取預(yù)設(shè)事務(wù)中的多個(gè)字子事務(wù),將多個(gè)子事務(wù)提取為本發(fā)明實(shí) 施例的多個(gè)事務(wù),具體地,將同一個(gè)事務(wù)內(nèi)完成的各個(gè)子事務(wù)提取為多個(gè)獨(dú)立的事務(wù)可以 通過將一個(gè)SQL程序拆分為多個(gè)程序或在數(shù)據(jù)倉庫寫入中借助SSIS工程中的Sequence Container工具,將一個(gè)Container按功能拆分為多個(gè)Container完成。這樣,由原來的多 個(gè)子事務(wù)得到多個(gè)相互獨(dú)立的事務(wù),使得多個(gè)事務(wù)中出現(xiàn)運(yùn)行異常的事務(wù)時(shí),只需重新運(yùn) 行該異常的事務(wù)即可。
[0043] 圖2是根據(jù)本發(fā)明實(shí)施例優(yōu)選的數(shù)據(jù)處理方法的流程圖。該實(shí)施例的數(shù)據(jù)處理方 法可以是上述實(shí)施例的數(shù)據(jù)處理方法的一種優(yōu)選實(shí)施方式。如圖2所示,該數(shù)據(jù)處理方法 包括步驟如下:
[0044] 步驟S202,獲取待處理數(shù)據(jù)。
[0045] 步驟S204,分別運(yùn)行多個(gè)事務(wù)來處理待處理數(shù)據(jù)。
[0046] 步驟S202和步驟S204依次與圖1所示的步驟S102和步驟S104相同,這里不做 贅述。
[0047] 步驟S206,記錄多個(gè)事務(wù)中每個(gè)事務(wù)對(duì)應(yīng)的狀態(tài)位,狀態(tài)位用于反映多個(gè)事務(wù)中 每個(gè)事務(wù)的運(yùn)行狀態(tài)。
[0048] 需要說明的是,狀態(tài)位可以用于表示多個(gè)事務(wù)的運(yùn)行狀態(tài),其中,多個(gè)事務(wù)中每 個(gè)事務(wù)對(duì)應(yīng)一個(gè)狀態(tài)位,該狀態(tài)位可以是用于表示事務(wù)運(yùn)行的時(shí)間戳,也可以用于表示事 務(wù)運(yùn)行的數(shù)值。例如,當(dāng)事務(wù)運(yùn)行成功時(shí),該事務(wù)的狀態(tài)位變成第一標(biāo)識(shí),當(dāng)事務(wù)運(yùn)行異常 (或失?。r(shí),該狀態(tài)位變?yōu)榈诙?biāo)識(shí),這樣,就可以通過檢測(cè)事務(wù)對(duì)應(yīng)的狀態(tài)位來判斷該 事務(wù)是否運(yùn)行成功或者異常。
[0049] 該狀態(tài)位對(duì)應(yīng)的事務(wù)通過記錄狀態(tài)位來判斷多個(gè)事務(wù)是否運(yùn)行完成。通過記錄狀 態(tài)位的方式,可以快速檢測(cè)到狀態(tài)位所對(duì)應(yīng)的事務(wù)的運(yùn)行狀況,從而得到處理,有效提高了 數(shù)據(jù)處理性能。
[0050] 步驟S208,通過判斷狀態(tài)位是否為預(yù)設(shè)標(biāo)識(shí)來判斷多個(gè)事務(wù)中是否存在運(yùn)行異常 的事務(wù)。其中,當(dāng)狀態(tài)位為預(yù)設(shè)標(biāo)識(shí)時(shí),則狀態(tài)位對(duì)應(yīng)的事務(wù)運(yùn)行異常,即,預(yù)設(shè)標(biāo)識(shí)是在事 務(wù)運(yùn)行之前設(shè)置的一個(gè)用來判斷該事務(wù)運(yùn)行正常與否的一個(gè)標(biāo)識(shí)。
[0051] 步驟S210,若判斷出事務(wù)中存在狀態(tài)位為預(yù)設(shè)標(biāo)識(shí)的事務(wù),則確定該事務(wù)運(yùn)行異 堂 巾。
[0052] 步驟S212,重新運(yùn)行出現(xiàn)異常的事務(wù)。
[0053] 根據(jù)本發(fā)明實(shí)施例,通過記錄多個(gè)事務(wù)中每個(gè)事務(wù)對(duì)應(yīng)的狀態(tài)位,判斷多個(gè)事務(wù) 的狀態(tài)位是否為預(yù)設(shè)標(biāo)識(shí),若是預(yù)設(shè)標(biāo)識(shí),則確定該狀態(tài)位對(duì)應(yīng)的事務(wù)出現(xiàn)異常,重新運(yùn)行 異常的事務(wù)。利用狀態(tài)位來確定運(yùn)行異常的事務(wù),提高異常事務(wù)的檢測(cè)速度,進(jìn)一步提高數(shù) 據(jù)處理的效率。
[0054] 圖3是根據(jù)本發(fā)明實(shí)施例又一優(yōu)選的數(shù)據(jù)處理方法的流程圖。該實(shí)施例的數(shù)據(jù)處 理方法可以是上述實(shí)施例的數(shù)據(jù)處理方法的一種優(yōu)選實(shí)施方式。如圖3所示,該數(shù)據(jù)處理 方法包括步驟如下:
[0055] 步驟S302,獲取待處理數(shù)據(jù)。
[0056] 步驟S304,創(chuàng)建用于標(biāo)記狀態(tài)位的狀態(tài)表。
[0057] 步驟S306,更新狀態(tài)表中的狀態(tài)位為開始運(yùn)行時(shí)間,開始運(yùn)行時(shí)間為多個(gè)事務(wù)開 始運(yùn)行的時(shí)間。
[0058] 步驟S308,分別運(yùn)行多個(gè)事務(wù)來處理待處理數(shù)據(jù)。
[0059] 步驟S310,當(dāng)多個(gè)事務(wù)中每個(gè)事務(wù)運(yùn)行結(jié)束時(shí),在狀態(tài)表上將運(yùn)行結(jié)束的事務(wù)的 狀態(tài)位更新為運(yùn)行結(jié)束的事務(wù)的運(yùn)行結(jié)束時(shí)間。
[0060] 步驟S312,判斷狀態(tài)位是否是開始運(yùn)行時(shí)間。
[0061]步驟S314,如果判斷出狀態(tài)位是開始運(yùn)行時(shí)間,則確定狀態(tài)位對(duì)應(yīng)的事務(wù)運(yùn)行異 常,重新運(yùn)行該事務(wù)。
[0062] 具體地,在本發(fā)明實(shí)施例中可以用時(shí)間戳作為運(yùn)行狀態(tài)的標(biāo)記。記錄事務(wù)運(yùn)行的 時(shí)間戳,其中,可以是當(dāng)事務(wù)運(yùn)行成功時(shí),更改狀態(tài)表中與該事務(wù)對(duì)應(yīng)的運(yùn)行結(jié)束時(shí)間;如 果運(yùn)行失敗,則狀態(tài)表中的狀態(tài)位仍為開始運(yùn)行時(shí)間,這樣,可以通過判斷該狀態(tài)位是否為 開始運(yùn)行時(shí)間來判斷該狀態(tài)為是否為預(yù)設(shè)標(biāo)識(shí),從而確定事務(wù)是否運(yùn)行異常。
[0063] 例如,如圖4所示,本發(fā)明的實(shí)施例中的數(shù)據(jù)寫入有5個(gè)事務(wù)包括:事務(wù)A(寫入維 度數(shù)據(jù))、事務(wù)B (寫入事實(shí)數(shù)據(jù))、事務(wù)C (寫入事實(shí)數(shù)據(jù))、事務(wù)D (寫入事實(shí)數(shù)據(jù))和事務(wù) E (寫入事實(shí)數(shù)據(jù)),其中,共有4個(gè)(事務(wù)B、事務(wù)C、事務(wù)D和事務(wù)E)寫入事實(shí)數(shù)據(jù)的并行 分支。
[0064] 狀態(tài)表如表1所示,在多個(gè)事務(wù)開始運(yùn)行時(shí),更行狀態(tài)表中的時(shí)間為開始運(yùn)行時(shí) 間,例如,把第一次開始運(yùn)行時(shí)間設(shè)置為〇: 〇〇: 〇〇,記錄并行事務(wù)第一次運(yùn)行結(jié)束時(shí)間,若第 一次并行事務(wù)運(yùn)行正常的結(jié)束時(shí)間為15:00:00,則可以判斷并行事務(wù)運(yùn)行結(jié)束時(shí)間是否相 等均為15:00:00,如果相等,則認(rèn)為此次事務(wù)處理成功,并將此次運(yùn)行結(jié)束時(shí)間15:00:00 作為下一次事務(wù)開始運(yùn)行的時(shí)間。程序進(jìn)入并行的各個(gè)分支之前,首先判斷該分支對(duì)應(yīng)的 時(shí)間戳是否等于此次運(yùn)行結(jié)束的時(shí)間15:00:00,如果不相等,則該分支事務(wù)運(yùn)行異常,重新 執(zhí)行該分支的事務(wù),其他事務(wù)無需重新運(yùn)行;如果相等,則直接跳出分支,并把此次運(yùn)行結(jié) 束時(shí)間15:00:00作為下一次運(yùn)行開始時(shí)間。這步判斷用來保證如果之前某一并行分支出 現(xiàn)異常,則在重新運(yùn)行后只處理該分支,而不需要處理之間正常的分支。以此提高重新處理 的效率。
[0065] 當(dāng)該運(yùn)行異常的分支事務(wù)運(yùn)行結(jié)束后,更新對(duì)應(yīng)的時(shí)間戳為運(yùn)行結(jié)束時(shí)間 15:00:00。當(dāng)全部分支事務(wù)運(yùn)行完成,再次判斷4個(gè)并行事務(wù)的開始運(yùn)行時(shí)間是否等于運(yùn) 行結(jié)束時(shí)間,如果相等,則本次事務(wù)運(yùn)行全部完成。在本實(shí)施例中如果開始運(yùn)行時(shí)間和運(yùn)行 結(jié)束時(shí)間都為15:00:00,則本次事務(wù)運(yùn)行全部完成。
[0066] 表 1 :
[0067]
【權(quán)利要求】
1. 一種數(shù)據(jù)處理方法,其特征在于,包括: 獲取待處理數(shù)據(jù); 分別運(yùn)行多個(gè)事務(wù)來處理所述待處理數(shù)據(jù),其中,所述多個(gè)事務(wù)為從預(yù)設(shè)事務(wù)中預(yù)先 拆分出的相互之間獨(dú)立的多個(gè)事務(wù),所述預(yù)設(shè)事務(wù)為用于處理所述待處理數(shù)據(jù)的事務(wù),所 述預(yù)設(shè)事務(wù)包括多個(gè)子事務(wù),所述多個(gè)事務(wù)中的每一個(gè)事務(wù)對(duì)應(yīng)所述多個(gè)子事務(wù)中的一個(gè) 子事務(wù); 判斷所述多個(gè)事務(wù)中是否存在運(yùn)行異常的事務(wù);以及 如果判斷出所述多個(gè)事務(wù)中存在運(yùn)行異常的事務(wù),則重新運(yùn)行所述運(yùn)行異常的事務(wù)。
2. 根據(jù)權(quán)利要求1所述的數(shù)據(jù)處理方法,其特征在于,在分別運(yùn)行多個(gè)事務(wù)來處理所 述待處理數(shù)據(jù)之前,所述數(shù)據(jù)處理方法還包括: 獲取所述預(yù)設(shè)事務(wù)中的多個(gè)子事務(wù);以及 將所述多個(gè)子事務(wù)提取為多個(gè)獨(dú)立的事務(wù),得到所述多個(gè)事務(wù)。
3. 根據(jù)權(quán)利要求1所述的數(shù)據(jù)處理方法,其特征在于,判斷所述多個(gè)事務(wù)中是否存在 運(yùn)行異常的事務(wù)包括: 記錄所述多個(gè)事務(wù)中每個(gè)事務(wù)對(duì)應(yīng)的狀態(tài)位,所述狀態(tài)位用于反映所述多個(gè)事務(wù)中每 個(gè)事務(wù)的運(yùn)行狀態(tài),其中,當(dāng)所述狀態(tài)位為預(yù)設(shè)標(biāo)識(shí)時(shí),所述狀態(tài)位對(duì)應(yīng)的事務(wù)運(yùn)行異常; 通過判斷所述狀態(tài)位是否為所述預(yù)設(shè)標(biāo)識(shí)來判斷所述多個(gè)事務(wù)中是否存在運(yùn)行異常 的事務(wù)。
4. 根據(jù)權(quán)利要求3所述的數(shù)據(jù)處理方法,其特征在于, 在分別運(yùn)行多個(gè)事務(wù)來處理所述待處理數(shù)據(jù)之前,所述數(shù)據(jù)處理方法還包括:創(chuàng)建用 于標(biāo)記所述狀態(tài)位的狀態(tài)表;更新所述狀態(tài)表中的狀態(tài)位為開始運(yùn)行時(shí)間,所述開始運(yùn)行 時(shí)間為所述多個(gè)事務(wù)開始運(yùn)行的時(shí)間,其中,當(dāng)所述多個(gè)事務(wù)中每個(gè)事務(wù)運(yùn)行結(jié)束時(shí),在所 述狀態(tài)表上將運(yùn)行結(jié)束的事務(wù)的狀態(tài)位更新為所述運(yùn)行結(jié)束的事務(wù)的運(yùn)行結(jié)束時(shí)間, 判斷所述狀態(tài)位是否為所述預(yù)設(shè)標(biāo)識(shí)包括:判斷所述狀態(tài)位是否是所述開始運(yùn)行時(shí) 間,其中,如果判斷出所述狀態(tài)位是所述開始運(yùn)行時(shí)間,則確定所述狀態(tài)位對(duì)應(yīng)的事務(wù)運(yùn)行 異常。
5. 根據(jù)權(quán)利要求3所述的數(shù)據(jù)處理方法,其特征在于,所述狀態(tài)位為數(shù)字狀態(tài)位,其 中,當(dāng)所述數(shù)字狀態(tài)位是第一數(shù)值時(shí),所述數(shù)字狀態(tài)位對(duì)應(yīng)的事務(wù)運(yùn)行結(jié)束,當(dāng)所述數(shù)字狀 態(tài)位是第二數(shù)值時(shí),所述數(shù)字狀態(tài)位對(duì)應(yīng)的事務(wù)運(yùn)行異常, 判斷所述多個(gè)事務(wù)中是否存在運(yùn)行異常的事務(wù)包括:判斷所述數(shù)字狀態(tài)位是所述第一 數(shù)值還是所述第二數(shù)值,其中,如果判斷出所述數(shù)字狀態(tài)位是所述第一數(shù)值時(shí),確定所述數(shù) 字狀態(tài)位對(duì)應(yīng)的事務(wù)運(yùn)行結(jié)束;如果判斷出所述數(shù)字狀態(tài)位是所述第二數(shù)值時(shí),確定所述 數(shù)字狀態(tài)位對(duì)應(yīng)的事務(wù)運(yùn)行異常。
6. -種數(shù)據(jù)處理裝置,其特征在于,包括: 第一獲取單元,用于獲取待處理數(shù)據(jù); 處理單元,用于分別運(yùn)行多個(gè)事務(wù)來處理所述待處理數(shù)據(jù),其中,所述多個(gè)事務(wù)為從預(yù) 設(shè)事務(wù)中預(yù)先拆分出的相互之間獨(dú)立的多個(gè)事務(wù),所述預(yù)設(shè)事務(wù)為用于處理所述待處理數(shù) 據(jù)的事務(wù),所述預(yù)設(shè)事務(wù)包括多個(gè)子事務(wù),所述多個(gè)事務(wù)中的每一個(gè)事務(wù)對(duì)應(yīng)所述多個(gè)子 事務(wù)中的一個(gè)子事務(wù); 判斷單元,用于判斷所述多個(gè)事務(wù)中是否存在運(yùn)行異常的事務(wù);以及 運(yùn)行單元,用于如果判斷出所述多個(gè)事務(wù)中存在運(yùn)行異常的事務(wù),則重新運(yùn)行所述運(yùn) 行異常的事務(wù)。
7. 根據(jù)權(quán)利要求6所述的數(shù)據(jù)處理裝置,其特征在于,所述數(shù)據(jù)處理裝置還包括: 第二獲取單元,用于在分別運(yùn)行多個(gè)事務(wù)來處理所述待處理數(shù)據(jù)之前,獲取所述預(yù)設(shè) 事務(wù)中的多個(gè)子事務(wù);以及 提取單元,用于將所述多個(gè)子事務(wù)提取為多個(gè)獨(dú)立的事務(wù),得到所述多個(gè)事務(wù)。
8. 根據(jù)權(quán)利要求6所述的數(shù)據(jù)處理裝置,其特征在于,所述判斷單元包括: 記錄模塊,用于記錄所述多個(gè)事務(wù)中每個(gè)事務(wù)對(duì)應(yīng)的狀態(tài)位,所述狀態(tài)位用于反映所 述多個(gè)事務(wù)中每個(gè)事務(wù)的運(yùn)行狀態(tài),其中,當(dāng)所述狀態(tài)位為預(yù)設(shè)標(biāo)識(shí)時(shí),所述狀態(tài)位對(duì)應(yīng)的 事務(wù)運(yùn)行異常; 第一判斷模塊,用于通過判斷所述狀態(tài)位是否為所述預(yù)設(shè)標(biāo)識(shí)來判斷所述多個(gè)事務(wù)中 是否存在運(yùn)行異常的事務(wù)。
9. 根據(jù)權(quán)利要求8所述的數(shù)據(jù)處理裝置,其特征在于, 所述數(shù)據(jù)處理裝置還包括:創(chuàng)建單元,用于在分別運(yùn)行多個(gè)事務(wù)來處理所述待處理數(shù) 據(jù)之前,創(chuàng)建用于標(biāo)記所述狀態(tài)位的狀態(tài)表;更新單元,用于更新所述狀態(tài)表中的狀態(tài)位為 開始運(yùn)行時(shí)間,所述開始運(yùn)行時(shí)間為所述多個(gè)事務(wù)開始運(yùn)行的時(shí)間,其中,當(dāng)所述多個(gè)事務(wù) 中每個(gè)事務(wù)運(yùn)行結(jié)束時(shí),在所述狀態(tài)表上將運(yùn)行結(jié)束的事務(wù)的狀態(tài)位更新為所述運(yùn)行結(jié)束 的事務(wù)的運(yùn)行結(jié)束時(shí)間, 所述判斷模塊還用于判斷所述狀態(tài)位是否是所述開始運(yùn)行時(shí)間,其中,如果判斷出所 述狀態(tài)位是所述開始運(yùn)行時(shí)間,則確定所述狀態(tài)位對(duì)應(yīng)的事務(wù)運(yùn)行異常。
10. 根據(jù)權(quán)利要求8所述的數(shù)據(jù)處理裝置,其特征在于,所述狀態(tài)位為數(shù)字狀態(tài)位,其 中,當(dāng)所述數(shù)字狀態(tài)位是第一數(shù)值時(shí),所述數(shù)字狀態(tài)位對(duì)應(yīng)的事務(wù)運(yùn)行結(jié)束,當(dāng)所述數(shù)字狀 態(tài)位是第二數(shù)值時(shí),所述數(shù)字狀態(tài)位對(duì)應(yīng)的事務(wù)運(yùn)行異常, 所述判斷單元包括:第二判斷模塊,用于判斷所述數(shù)字狀態(tài)位是所述第一數(shù)值還是所 述第二數(shù)值,其中,如果判斷出所述數(shù)字狀態(tài)位是所述第一數(shù)值時(shí),確定所述數(shù)字狀態(tài)位對(duì) 應(yīng)的事務(wù)運(yùn)行結(jié)束;如果判斷出所述數(shù)字狀態(tài)位是所述第二數(shù)值時(shí),確定所述數(shù)字狀態(tài)位 對(duì)應(yīng)的事務(wù)運(yùn)行異常。
【文檔編號(hào)】G06F17/30GK104317850SQ201410542598
【公開日】2015年1月28日 申請(qǐng)日期:2014年10月14日 優(yōu)先權(quán)日:2014年10月14日
【發(fā)明者】戴培林 申請(qǐng)人:北京國(guó)雙科技有限公司