本發(fā)明涉及計(jì)算機(jī)及互聯(lián)網(wǎng)
技術(shù)領(lǐng)域:
,尤其涉及一種數(shù)據(jù)分配方法、裝置和計(jì)算設(shè)備。
背景技術(shù):
:隨著社會經(jīng)濟(jì)的快速發(fā)展,社??ㄒ呀?jīng)日漸普及,社會保障卡上存有的供持卡人在醫(yī)院就醫(yī)結(jié)算的“個(gè)人賬戶”,社保系統(tǒng)需要定期對賬戶余額進(jìn)行利息結(jié)算。但實(shí)際操作中,社保賬號的基數(shù)非常大(如有1800萬個(gè)左右)導(dǎo)致利息結(jié)算過程費(fèi)事又費(fèi)力。當(dāng)數(shù)據(jù)表中已經(jīng)存儲上千萬數(shù)據(jù)時(shí),如果有階段性處理全量數(shù)據(jù)的業(yè)務(wù)需求(比如每月的月報(bào),季度性的計(jì)息等等)時(shí),把龐大的數(shù)據(jù)量拆分成均等份,平均分給多個(gè)線程并行執(zhí)行會提高整體的執(zhí)行效率。但社保數(shù)據(jù)通常采用具有可靠性、共享性、和保存持久性的Oracle數(shù)據(jù)庫進(jìn)行存儲,但Oracle數(shù)據(jù)庫的自增列是不連續(xù)的。傳統(tǒng)的數(shù)據(jù)分割方法通常只能按照數(shù)值大小進(jìn)行分割,如機(jī)械性地將1-100分為一組,101-200分為第二組等,而不考慮每組內(nèi)到底有多少個(gè)數(shù)值。這種情況下有可能某幾組的數(shù)據(jù)非常稀疏,導(dǎo)致數(shù)據(jù)分配不均,降低了多線程并行執(zhí)行的效率。技術(shù)實(shí)現(xiàn)要素:為此,本發(fā)明提供一種數(shù)據(jù)分配方法、裝置和計(jì)算設(shè)備,以力圖解決或至少緩解上面存在的問題。根據(jù)本發(fā)明的一個(gè)方面,提供一種數(shù)據(jù)分配方法,適于將第一數(shù)據(jù)存儲器中存儲的多條數(shù)據(jù)分配給多個(gè)數(shù)據(jù)處理設(shè)備進(jìn)行處理,其中每條數(shù)據(jù)具有一數(shù)據(jù)主鍵,且所述多條數(shù)據(jù)的數(shù)據(jù)主鍵在整體上不連續(xù),該方法包括:將統(tǒng)計(jì)起始值和臨時(shí)起始值設(shè)置為初始值,將統(tǒng)計(jì)終止值設(shè)置為統(tǒng)計(jì)起始值加上預(yù)設(shè)步長值,將剩余數(shù)據(jù)量設(shè)置為預(yù)設(shè)步長值;統(tǒng)計(jì)第一數(shù)據(jù)存儲器中數(shù)據(jù)主鍵在統(tǒng)計(jì)起始值與統(tǒng)計(jì)終止值之間的數(shù)據(jù)條數(shù),并判斷統(tǒng)計(jì)的數(shù)據(jù)條數(shù)是否等于剩余數(shù)據(jù)量,得到第一判斷結(jié)果;當(dāng)?shù)谝慌袛嘟Y(jié)果為是時(shí),將臨時(shí)起始值和統(tǒng)計(jì)終止值相關(guān)聯(lián)的存儲到第二數(shù)據(jù)存儲器中,并將統(tǒng)計(jì)起始值更新為統(tǒng)計(jì)終止值加一,將統(tǒng)計(jì)終止值更新為統(tǒng)計(jì)終止值加預(yù)設(shè)步長值,將臨時(shí)起始值更新為統(tǒng)計(jì)起始值,并重新執(zhí)行從統(tǒng)計(jì)步驟開始的步驟;當(dāng)?shù)谝慌袛嘟Y(jié)果為否時(shí),判斷統(tǒng)計(jì)終止值是否小于多條數(shù)據(jù)的數(shù)據(jù)主鍵的最大值,得到第二判斷結(jié)果;當(dāng)?shù)诙袛嘟Y(jié)果為是時(shí),將剩余數(shù)據(jù)量更新為剩余數(shù)據(jù)量與統(tǒng)計(jì)的數(shù)據(jù)條數(shù)的差值,并將統(tǒng)計(jì)起始值更新為統(tǒng)計(jì)終止值加一,將統(tǒng)計(jì)終止值更新為統(tǒng)計(jì)終止值加剩余數(shù)據(jù)量,并重新執(zhí)行從統(tǒng)計(jì)步驟開始的步驟;當(dāng)?shù)诙袛嘟Y(jié)果為否時(shí),將臨時(shí)起始值和統(tǒng)計(jì)終止值相關(guān)聯(lián)的存儲到第二數(shù)據(jù)存儲器中;以及將第二數(shù)據(jù)存儲器中的各條數(shù)據(jù)發(fā)送給相應(yīng)的數(shù)據(jù)處理設(shè)備,以供數(shù)據(jù)處理設(shè)備從第一數(shù)據(jù)存儲器中獲取對應(yīng)的數(shù)據(jù)進(jìn)行處理??蛇x地,在根據(jù)本發(fā)明的方法中,所述數(shù)據(jù)處理設(shè)備從第一數(shù)據(jù)存儲器中獲取對應(yīng)的數(shù)據(jù)進(jìn)行處理的步驟包括:接收第二數(shù)據(jù)存儲器發(fā)來的與該數(shù)據(jù)處理設(shè)備相對應(yīng)的臨時(shí)起始值與統(tǒng)計(jì)終止值;以及從第一數(shù)據(jù)存儲器中獲取該臨時(shí)起始值和統(tǒng)計(jì)終止值之間的數(shù)據(jù)進(jìn)行處理??蛇x地,在根據(jù)本發(fā)明的方法中,初始值為0或1。根據(jù)本發(fā)明的另一個(gè)方面,提供數(shù)據(jù)分配裝置,適于將第一數(shù)據(jù)存儲器中存儲的多條數(shù)據(jù)分配給多個(gè)數(shù)據(jù)處理設(shè)備進(jìn)行處理,其中每條數(shù)據(jù)具有一數(shù)據(jù)主鍵,且多條數(shù)據(jù)的數(shù)據(jù)主鍵在整體上不連續(xù),該裝置包括:初始化單元,適于將統(tǒng)計(jì)起始值和臨時(shí)起始值設(shè)置為初始值,將統(tǒng)計(jì)終止值設(shè)置為統(tǒng)計(jì)起始值加上預(yù)設(shè)步長值,將剩余數(shù)據(jù)量設(shè)置為預(yù)設(shè)步長值;統(tǒng)計(jì)單元,適于統(tǒng)計(jì)第一數(shù)據(jù)存儲器中數(shù)據(jù)主鍵在統(tǒng)計(jì)起始值與統(tǒng)計(jì)終止值之間的數(shù)據(jù)條數(shù),并判斷統(tǒng)計(jì)的數(shù)據(jù)條數(shù)是否等于剩余數(shù)據(jù)量,得到第一判斷結(jié)果;第一處理單元,適于當(dāng)?shù)谝慌袛嘟Y(jié)果為是時(shí),將臨時(shí)起始值和統(tǒng)計(jì)終止值相關(guān)聯(lián)的存儲到第二數(shù)據(jù)存儲器中,并將統(tǒng)計(jì)起始值更新為統(tǒng)計(jì)終止值加一,將統(tǒng)計(jì)終止值更新為統(tǒng)計(jì)終止值加預(yù)設(shè)步長值,將臨時(shí)起始值更新為統(tǒng)計(jì)起始值,并重新觸發(fā)統(tǒng)計(jì)單元開始執(zhí)行統(tǒng)計(jì)操作;第二處理單元,適于當(dāng)?shù)谝慌袛嘟Y(jié)果為否時(shí),判斷統(tǒng)計(jì)終止值是否小于多條數(shù)據(jù)的數(shù)據(jù)主鍵的最大值,得到第二判斷結(jié)果;第三處理單元,適于當(dāng)?shù)诙袛嘟Y(jié)果為是時(shí),將剩余數(shù)據(jù)量更新為剩余數(shù)據(jù)量與統(tǒng)計(jì)的數(shù)據(jù)條數(shù)的差值,并將統(tǒng)計(jì)起始值更新為統(tǒng)計(jì)終止值加一,將統(tǒng)計(jì)終止值更新為統(tǒng)計(jì)終止值加剩余數(shù)據(jù)量,并重新觸發(fā)統(tǒng)計(jì)單元開始執(zhí)行統(tǒng)計(jì)操作;第四處理單元,適于當(dāng)?shù)诙袛嘟Y(jié)果為否時(shí),將臨時(shí)起始值和統(tǒng)計(jì)終止值相關(guān)聯(lián)的存儲到第二數(shù)據(jù)存儲器中;以及數(shù)據(jù)分配單元,適于將第二數(shù)據(jù)存儲器中的各條數(shù)據(jù)發(fā)送給相應(yīng)的數(shù)據(jù)處理設(shè)備,以供數(shù)據(jù)處理設(shè)備從第一數(shù)據(jù)存儲器中獲取對應(yīng)的數(shù)據(jù)進(jìn)行處理??蛇x地,在根據(jù)本發(fā)明的裝置中,數(shù)據(jù)處理設(shè)備適于根據(jù)以下方法從第一數(shù)據(jù)存儲器中獲取對應(yīng)的數(shù)據(jù)進(jìn)行處理:接收第二數(shù)據(jù)存儲器發(fā)來的與該數(shù)據(jù)處理設(shè)備相對應(yīng)的臨時(shí)起始值與統(tǒng)計(jì)終止值;以及從第一數(shù)據(jù)存儲器中獲取該臨時(shí)起始值和統(tǒng)計(jì)終止值之間的數(shù)據(jù)進(jìn)行處理??蛇x地,在根據(jù)本發(fā)明的裝置中,預(yù)設(shè)步長值為N/(m×n),其中,N為多條數(shù)據(jù)的數(shù)據(jù)量,m為數(shù)據(jù)處理設(shè)備的數(shù)量,n為每個(gè)數(shù)據(jù)處理設(shè)備的CPU數(shù)量。根據(jù)本發(fā)明的另一個(gè)方面,提供一種計(jì)算設(shè)備,包括:至少一個(gè)處理器;以及包括計(jì)算機(jī)程序指令的至少一個(gè)存儲器;其中至少一個(gè)存儲器和計(jì)算機(jī)程序指令被配置為與所述至少一個(gè)處理器一起使得所述計(jì)算設(shè)備執(zhí)行如上所述的方法。根據(jù)本發(fā)明的技術(shù)方案,先默認(rèn)數(shù)據(jù)主鍵是連續(xù)的來統(tǒng)計(jì)起始值~終止值之間的數(shù)據(jù)量。第一次統(tǒng)計(jì)時(shí),起始值為初始值,終止值為步長值,如果數(shù)據(jù)量等于步長值,則代表此數(shù)據(jù)區(qū)間的所有數(shù)據(jù)是連續(xù)的,則將第一次統(tǒng)計(jì)時(shí)的起始值和終止值記錄到數(shù)據(jù)庫。之后,把下一次的起始值重置為第一次統(tǒng)計(jì)時(shí)的終止值加一、下一次的終止值重置為第一次統(tǒng)計(jì)時(shí)的終止值加上步長值,進(jìn)行下一次統(tǒng)計(jì)。如果數(shù)據(jù)量少于步長值,則代表本數(shù)據(jù)區(qū)間是不連續(xù)的,此時(shí)計(jì)算步長值與數(shù)據(jù)量的差值,并用第一次統(tǒng)計(jì)的終止值加一作為新的起始值、終止值與差值之和作為新終止值。之后,統(tǒng)計(jì)新數(shù)據(jù)區(qū)間的數(shù)據(jù)量是否恰為差值,如果是,則代表此數(shù)據(jù)區(qū)間的所有數(shù)據(jù)是連續(xù)的,將第一次統(tǒng)計(jì)的起始值和第二次統(tǒng)計(jì)的新終止值作為第一分組記錄到數(shù)據(jù)庫。之后,按數(shù)據(jù)順序繼續(xù)賦值下一個(gè)起始值和終止值,遞歸計(jì)算得到其他分組,直到起始值或者終止值大于被分割列的最大值時(shí)終止遞歸。通過這種方法能夠?qū)崿F(xiàn)數(shù)據(jù)的平均分割,將每組的起始值和終止值進(jìn)行關(guān)聯(lián)存儲(如存儲為表格),發(fā)送到對應(yīng)的數(shù)據(jù)處理設(shè)備進(jìn)行。數(shù)據(jù)處理設(shè)備獲取到這個(gè)起始值和終止值后,就可以去數(shù)據(jù)庫中獲取該起始值和終止值之間(包括起始值和終止值)的數(shù)據(jù)進(jìn)行處理。這樣保證了每個(gè)數(shù)據(jù)處理設(shè)備都處理均量的數(shù)據(jù)量,從而最優(yōu)化的實(shí)現(xiàn)了數(shù)據(jù)快速處理。附圖說明為了實(shí)現(xiàn)上述以及相關(guān)目的,本文結(jié)合下面的描述和附圖來描述某些說明性方面,這些方面指示了可以實(shí)踐本文所公開的原理的各種方式,并且所有方面及其等效方面旨在落入所要求保護(hù)的主題的范圍內(nèi)。通過結(jié)合附圖閱讀下面的詳細(xì)描述,本公開的上述以及其它目的、特征和優(yōu)勢將變得更加明顯。遍及本公開,相同的附圖標(biāo)記通常指代相同的部件或元素。圖1示出了根據(jù)本發(fā)明一個(gè)實(shí)施例的數(shù)據(jù)分配系統(tǒng)100的示意圖;圖2示出了根據(jù)本發(fā)明一個(gè)實(shí)施例的計(jì)算設(shè)備200的結(jié)構(gòu)示意圖;圖3示出了根據(jù)本發(fā)明一個(gè)實(shí)施例的數(shù)據(jù)分配方法300的流程圖;圖4示出了數(shù)據(jù)分配方法300的簡易版流程圖;圖5示出了根據(jù)本發(fā)明一個(gè)實(shí)施例的數(shù)據(jù)分配裝置400的結(jié)構(gòu)示意圖。具體實(shí)施方式下面將參照附圖更詳細(xì)地描述本公開的示例性實(shí)施例。雖然附圖中顯示了本公開的示例性實(shí)施例,然而應(yīng)當(dāng)理解,可以以各種形式實(shí)現(xiàn)本公開而不應(yīng)被這里闡述的實(shí)施例所限制。相反,提供這些實(shí)施例是為了能夠更透徹地理解本公開,并且能夠?qū)⒈竟_的范圍完整的傳達(dá)給本領(lǐng)域的技術(shù)人員。圖1示出了根據(jù)本發(fā)明一個(gè)實(shí)施例的數(shù)據(jù)分配系統(tǒng)的示意圖。圖1所示的數(shù)據(jù)分配系統(tǒng)100包括計(jì)算設(shè)備200、數(shù)據(jù)存儲器以及多個(gè)數(shù)據(jù)處理設(shè)備。應(yīng)當(dāng)指出,圖1中的數(shù)據(jù)分配系統(tǒng)100僅是示例性的,在具體的實(shí)踐情況中,數(shù)據(jù)分配系統(tǒng)100中可以有不同數(shù)量的計(jì)算設(shè)備、數(shù)據(jù)存儲器和數(shù)據(jù)處理設(shè)備,本發(fā)明對網(wǎng)絡(luò)系統(tǒng)中所包括的計(jì)算設(shè)備、數(shù)據(jù)存儲器和數(shù)據(jù)處理設(shè)備的數(shù)目不做限制。數(shù)據(jù)存儲器可以為一個(gè),也可以為多個(gè)。例如,第一存儲器中存有多條數(shù)據(jù),其中每條數(shù)據(jù)都具有數(shù)據(jù)主鍵,且數(shù)據(jù)主鍵在整體上不連續(xù)。這里,整體上不連續(xù)可以指整段數(shù)據(jù)都不連續(xù),如1、3、5、7、11、15、21等;也可以指一部分?jǐn)?shù)據(jù)連續(xù),一部分?jǐn)?shù)據(jù)不連續(xù),如1、2、3、4、7、9、11、13、14、15、16,其中,前四個(gè)和后四個(gè)數(shù)據(jù)是連續(xù)的,中間三個(gè)數(shù)據(jù)不連續(xù)。實(shí)際上,只要有不連續(xù)的數(shù)據(jù),就可以認(rèn)為在整體上不連續(xù)。根據(jù)一個(gè)實(shí)施例,數(shù)據(jù)存儲器可以是數(shù)據(jù)庫。數(shù)據(jù)主鍵可以是社保卡ID,社??↖D是數(shù)據(jù)存儲裝置中用于社保賬號的編號,一個(gè)社??↖D地址對應(yīng)于一個(gè)社保賬號。社??↖D在數(shù)據(jù)存儲器中可以是一個(gè)從0或1開始遞增的整數(shù),但中間可能部分整數(shù)缺失,如0、1、2、4、7、10等,導(dǎo)致社??↖D號在整體上不連續(xù)。計(jì)算設(shè)備200可以實(shí)現(xiàn)為服務(wù)器,例如文件服務(wù)器、數(shù)據(jù)存儲裝置服務(wù)器、應(yīng)用程序服務(wù)器和WEB服務(wù)器等,也可以實(shí)現(xiàn)為包括桌面計(jì)算機(jī)和筆記本計(jì)算機(jī)配置的個(gè)人計(jì)算機(jī)。計(jì)算設(shè)備200將第一數(shù)據(jù)存儲器中存儲的多條數(shù)據(jù)的數(shù)據(jù)主鍵平均分配成多個(gè)分組,并將每個(gè)分組的起始值和終止值存入第二數(shù)據(jù)存儲器中。當(dāng)然,實(shí)際上第一數(shù)據(jù)存儲器和第二數(shù)據(jù)存儲器中可以為同一數(shù)據(jù)存儲器。數(shù)據(jù)處理設(shè)備可以為能夠處理數(shù)據(jù)的服務(wù)器,或包括桌面計(jì)算機(jī)和筆記本計(jì)算機(jī)配置的個(gè)人計(jì)算機(jī),本發(fā)明對此不作限制。每個(gè)數(shù)據(jù)處理設(shè)備可以處理對應(yīng)分組內(nèi)的數(shù)據(jù),其可以根據(jù)第二數(shù)據(jù)存儲器中每個(gè)分組的起始值和終止值,來獲取第一數(shù)據(jù)存儲器中對應(yīng)的數(shù)據(jù)進(jìn)行處理,這樣可有效提高數(shù)據(jù)處理的效率。圖2布置為實(shí)現(xiàn)根據(jù)本發(fā)明的數(shù)據(jù)分配裝置400的示例計(jì)算設(shè)備200的結(jié)構(gòu)框圖。如圖2所示,在基本配置202中,計(jì)算設(shè)備200典型地包括系統(tǒng)存儲器206和一個(gè)或者多個(gè)處理器204。存儲器總線208可以用于在處理器204和系統(tǒng)存儲器206之間的通信。取決于期望的配置,處理器204可以是任何類型的處理,包括但不限于:微處理器(μP)、微控制器(μC)、數(shù)字信息處理器(DSP)或者它們的任何組合。處理器204可以包括諸如一級高速緩存210和二級高速緩存212之類的一個(gè)或者多個(gè)級別的高速緩存、處理器核心214和寄存器216。示例的處理器核心214可以包括運(yùn)算邏輯單元(ALU)、浮點(diǎn)數(shù)單元(FPU)、數(shù)字信號處理核心(DSP核心)或者它們的任何組合。示例的存儲器控制器218可以與處理器204一起使用,或者在一些實(shí)現(xiàn)中,存儲器控制器218可以是處理器204的一個(gè)內(nèi)部部分。取決于期望的配置,系統(tǒng)存儲器206可以是任意類型的存儲器,包括但不限于:易失性存儲器(諸如RAM)、非易失性存儲器(諸如ROM、閃存等)或者它們的任何組合。系統(tǒng)存儲器206可以包括操作系統(tǒng)220、一個(gè)或者多個(gè)應(yīng)用222以及程序數(shù)據(jù)224。在一些實(shí)施方式中,應(yīng)用222可以布置為在操作系統(tǒng)上利用程序數(shù)據(jù)224進(jìn)行操作。計(jì)算設(shè)備200還可以包括有助于從各種接口設(shè)備(例如,輸出設(shè)備242、外設(shè)接口244和通信設(shè)備246)到基本配置102經(jīng)由總線/接口控制器230的通信的接口總線240。示例的輸出設(shè)備242包括圖形處理單元248和音頻處理單元250。它們可以被配置為有助于經(jīng)由一個(gè)或者多個(gè)A/V端口252與諸如顯示器或者揚(yáng)聲器之類的各種外部設(shè)備進(jìn)行通信。示例外設(shè)接口244可以包括串行接口控制器254和并行接口控制器256,它們可以被配置為有助于經(jīng)由一個(gè)或者多個(gè)I/O端口258和諸如輸入設(shè)備(例如,鍵盤、鼠標(biāo)、筆、語音輸入設(shè)備、觸摸輸入設(shè)備)或者其他外設(shè)(例如打印機(jī)、掃描儀等)之類的外部設(shè)備進(jìn)行通信。示例的通信設(shè)備246可以包括網(wǎng)絡(luò)控制器260,其可以被布置為便于經(jīng)由一個(gè)或者多個(gè)通信端口264與一個(gè)或者多個(gè)其他計(jì)算設(shè)備262通過網(wǎng)絡(luò)通信鏈路的通信。網(wǎng)絡(luò)通信鏈路可以是通信介質(zhì)的一個(gè)示例。通信介質(zhì)通??梢泽w現(xiàn)為在諸如載波或者其他傳輸機(jī)制之類的調(diào)制數(shù)據(jù)信號中的計(jì)算機(jī)可讀指令、數(shù)據(jù)結(jié)構(gòu)、程序模塊,并且可以包括任何信息遞送介質(zhì)。“調(diào)制數(shù)據(jù)信號”可以這樣的信號,它的數(shù)據(jù)集中的一個(gè)或者多個(gè)或者它的改變可以在信號中編碼信息的方式進(jìn)行。作為非限制性的示例,通信介質(zhì)可以包括諸如有線網(wǎng)絡(luò)或者專線網(wǎng)絡(luò)之類的有線介質(zhì),以及諸如聲音、射頻(RF)、微波、紅外(IR)或者其它無線介質(zhì)在內(nèi)的各種無線介質(zhì)。這里使用的術(shù)語計(jì)算機(jī)可讀介質(zhì)可以包括存儲介質(zhì)和通信介質(zhì)二者。計(jì)算設(shè)備200可以實(shí)現(xiàn)為小尺寸便攜(或者移動(dòng))電子設(shè)備的一部分。計(jì)算設(shè)備200還可以實(shí)現(xiàn)為包括桌面計(jì)算機(jī)和筆記本計(jì)算機(jī)配置的個(gè)人計(jì)算機(jī)。在一些實(shí)施例中,計(jì)算設(shè)備200被配置為執(zhí)行根據(jù)本發(fā)明的數(shù)據(jù)分配方法300,應(yīng)用222中包括根據(jù)本發(fā)明的數(shù)據(jù)分配裝置400。數(shù)據(jù)分配裝置400可以作為搜索引擎的一個(gè)插件駐留于計(jì)算設(shè)備200的瀏覽器中,或作為一個(gè)獨(dú)立的軟件安裝于計(jì)算設(shè)備200中,本發(fā)明對數(shù)據(jù)分配裝置400在計(jì)算設(shè)備200中的存在形式不做限制。理論上,平均分割應(yīng)該是把數(shù)據(jù)按照步長值平均分開,并且保證每組(不包含最后一份,因?yàn)楫?dāng)數(shù)據(jù)量總數(shù)與步長值不整除時(shí),最后一份數(shù)據(jù)量少于步長值)的數(shù)據(jù)量等于步長值。對于連續(xù)的數(shù)據(jù):第1組:0<數(shù)據(jù)主鍵<=1*步長值,第2組:(2-1)*步長值+1<數(shù)據(jù)主鍵<=2*步長值,第3組:(3-1)*步長值+1<數(shù)據(jù)主鍵<=3*步長值,……第N份:(N-1)*步長值+1<數(shù)據(jù)<=N*步長值。但是對于非連續(xù)數(shù)據(jù),比如:1、4、5、7、8、9、13、14、15、16、17、18,若設(shè)步長值為4,則采用上述方法分割出的結(jié)果為1、4一組;5、7、8一組;9一組;13、14、15、16一組;17、18一組。這樣的分割方式明顯未實(shí)現(xiàn)平均分割,如果將每個(gè)分組對應(yīng)分給不同線程來處理的話,無疑會降低數(shù)據(jù)處理的速度,浪費(fèi)各數(shù)據(jù)處理設(shè)備的功能。為此,本發(fā)明提供一種能夠?qū)⒉贿B續(xù)數(shù)據(jù)進(jìn)行平均分配的方法,即每組數(shù)據(jù)中的數(shù)量都恰為步長值(除了最后一組),以最大限度地實(shí)現(xiàn)設(shè)備的充分利用。圖3示出了根據(jù)本發(fā)明一個(gè)實(shí)施例的數(shù)據(jù)分配方法300的流程圖。如圖3所示,該方法始于步驟S310。在步驟S310中,將統(tǒng)計(jì)起始值和臨時(shí)起始值設(shè)置為初始值,將統(tǒng)計(jì)終止值設(shè)置為統(tǒng)計(jì)起始值加上預(yù)設(shè)步長值,將剩余數(shù)據(jù)量設(shè)置為預(yù)設(shè)步長值。根據(jù)一個(gè)實(shí)施例,初始值可以是0或1,預(yù)設(shè)步長值的計(jì)算公式為N/(m×n),其中,N為第一數(shù)據(jù)存儲器中多條數(shù)據(jù)的數(shù)據(jù)量,m為數(shù)據(jù)處理設(shè)備的數(shù)量,n為每個(gè)數(shù)據(jù)處理設(shè)備的CPU數(shù)量,這樣可以保證每個(gè)數(shù)據(jù)設(shè)備恰好處理一組數(shù)據(jù)。例如,若有1800萬個(gè)社保卡號,即1800萬個(gè)數(shù)據(jù)條數(shù),計(jì)算得到的預(yù)設(shè)步長值為10000,則每臺數(shù)據(jù)處理設(shè)備平均分配1萬條數(shù)據(jù)進(jìn)行處理。此時(shí),統(tǒng)計(jì)起始值和臨時(shí)起始值為0,統(tǒng)計(jì)終止值為10000,剩余數(shù)據(jù)量(即當(dāng)前分組還缺少的數(shù)據(jù)量)為10000。隨后,在步驟S320中,統(tǒng)計(jì)第一數(shù)據(jù)存儲器中數(shù)據(jù)主鍵在統(tǒng)計(jì)起始值與統(tǒng)計(jì)終止值之間的數(shù)據(jù)條數(shù),并判斷統(tǒng)計(jì)的數(shù)據(jù)條數(shù)是否等于剩余數(shù)據(jù)量,得到第一判斷結(jié)果。隨后,在步驟S330中,當(dāng)?shù)谝慌袛嘟Y(jié)果為是時(shí),將臨時(shí)起始值和統(tǒng)計(jì)終止值相關(guān)聯(lián)的存儲到第二數(shù)據(jù)存儲器中,并將統(tǒng)計(jì)起始值更新為統(tǒng)計(jì)終止值加一,將統(tǒng)計(jì)終止值更新為統(tǒng)計(jì)終止值加預(yù)設(shè)步長值,將臨時(shí)起始值更新為統(tǒng)計(jì)起始值,并重新執(zhí)行從步驟S320開始的步驟。例如,若數(shù)據(jù)主鍵在0-10000之間正好有1萬條數(shù)據(jù),則直接將0-10000作為第一分組,并將臨時(shí)起始值0和統(tǒng)計(jì)終止值10000進(jìn)行關(guān)聯(lián)存儲,如存儲為兩列表格形式。隨后,在步驟S340中,當(dāng)?shù)谝慌袛嘟Y(jié)果為否時(shí),判斷統(tǒng)計(jì)終止值是否小于多條數(shù)據(jù)的數(shù)據(jù)主鍵的最大值,得到第二判斷結(jié)果。隨后,在步驟S350中,當(dāng)?shù)诙袛嘟Y(jié)果為是時(shí),將剩余數(shù)據(jù)量更新為剩余數(shù)據(jù)量與統(tǒng)計(jì)的數(shù)據(jù)條數(shù)的差值,并將統(tǒng)計(jì)起始值更新為統(tǒng)計(jì)終止值加一,將統(tǒng)計(jì)終止值更新為統(tǒng)計(jì)終止值加剩余數(shù)據(jù)量,并重新執(zhí)行從步驟S320開始的步驟。隨后,在步驟S360中,當(dāng)?shù)诙袛嘟Y(jié)果為否時(shí),將臨時(shí)起始值和統(tǒng)計(jì)終止值相關(guān)聯(lián)的存儲到第二數(shù)據(jù)存儲器中。若數(shù)據(jù)主鍵在0-10000之間有9000條數(shù)據(jù),且數(shù)據(jù)主鍵的最大值不大于10000,則表明用一組即可將數(shù)據(jù)分完,直接存儲臨時(shí)起始值0和統(tǒng)計(jì)終止值10000即可。但實(shí)際應(yīng)用中數(shù)據(jù)主鍵的最大值可能為1800萬,遠(yuǎn)大于統(tǒng)計(jì)終止值10000,那么將剩余數(shù)據(jù)量更新為當(dāng)前分組所缺的數(shù)據(jù)量,即1000個(gè),將統(tǒng)計(jì)起始值更新為10001,將統(tǒng)計(jì)終止值更新為統(tǒng)計(jì)終止值10000加剩余數(shù)據(jù)量1000,即11000,并繼續(xù)統(tǒng)計(jì)10001-11000之間的數(shù)據(jù)量。如果10001-11000之間的數(shù)據(jù)量恰為1000個(gè),則表明第一分組的1萬個(gè)數(shù)據(jù)已湊齊,保存臨時(shí)起始值0和更新后的統(tǒng)計(jì)終止值11000作為第一個(gè)分組的起始值和終止值,并繼續(xù)統(tǒng)計(jì)11001-21000之間的數(shù)據(jù),以得到第二個(gè)分組。但若10001-11000之間的數(shù)據(jù)量為900個(gè),還缺少100個(gè)數(shù)據(jù),則將統(tǒng)計(jì)起始值更新為統(tǒng)計(jì)終止值11000加一,即11001,將統(tǒng)計(jì)終止值更新為統(tǒng)計(jì)終止值加剩余數(shù)據(jù)量,即11000+100=11100,并繼續(xù)統(tǒng)計(jì)11001-11100之間的數(shù)據(jù)量是否為100個(gè),依次類推,直到湊夠第一分組的1萬個(gè)數(shù)據(jù)量。當(dāng)然,對于最后一個(gè)分組,有時(shí)會出現(xiàn)步驟S360中的現(xiàn)象,即統(tǒng)計(jì)終止值不小于數(shù)據(jù)主鍵的最大值,如該分組的統(tǒng)計(jì)終止值為90000,但所有數(shù)據(jù)的主鍵最大值只有82000,這時(shí)直接記錄該分組的臨時(shí)起始值和統(tǒng)計(jì)終止值即可。當(dāng)然,實(shí)際應(yīng)用中,對于最后一個(gè)分組,也可以記錄其主鍵最大值,本發(fā)明對此不作限制。將統(tǒng)計(jì)起始值用SID表示、臨時(shí)起始值用TID表示、統(tǒng)計(jì)終止值用EID表示、剩余數(shù)據(jù)量用LESS表示、統(tǒng)計(jì)得到的數(shù)據(jù)量用COUNT表示、數(shù)據(jù)主鍵的最大值用MAX表示,則方法300也可以用圖4中所示的簡易流程圖表示,其中每個(gè)等式即為數(shù)值更新的過程。如SID=EID+1的意思就是將臨時(shí)起始值SID更新為上一輪的統(tǒng)計(jì)終止值EID加一,EID=EID+STEP即為將統(tǒng)計(jì)終止值EID更新為統(tǒng)計(jì)終止值EID加預(yù)設(shè)步長值。最后存儲的是分割出的每個(gè)分組的臨時(shí)起始值TID和統(tǒng)計(jì)終止值EID,如下表所示:分組臨時(shí)起始值統(tǒng)計(jì)終止值第1組TID-1EID-1第2組TID-2EID-2第3組TID-3EID-3………第N組TID-NEID-N隨后,在步驟S370中,將第二數(shù)據(jù)存儲器中的各條數(shù)據(jù)發(fā)送給相應(yīng)的數(shù)據(jù)處理設(shè)備,以供數(shù)據(jù)處理設(shè)備從第一數(shù)據(jù)存儲器中獲取對應(yīng)的數(shù)據(jù)進(jìn)行處理。其中,數(shù)據(jù)處理設(shè)備從第一數(shù)據(jù)存儲器中獲取對應(yīng)的數(shù)據(jù)進(jìn)行處理的步驟包括:接收第二數(shù)據(jù)存儲器發(fā)來的與該數(shù)據(jù)處理設(shè)備相對應(yīng)的臨時(shí)起始值與統(tǒng)計(jì)終止值,并從第一數(shù)據(jù)存儲器中獲取該臨時(shí)起始值和統(tǒng)計(jì)終止值之間的數(shù)據(jù)進(jìn)行處理。例如,第一個(gè)數(shù)據(jù)處理設(shè)備處理TID-1到EID-1之間的數(shù)據(jù);第二個(gè)數(shù)據(jù)處理設(shè)備處理TID-2到EID-2之間的數(shù)據(jù),等等。當(dāng)然,也可以結(jié)合當(dāng)前的剩余空閑線程進(jìn)行分配,本發(fā)明對數(shù)據(jù)處理設(shè)備對數(shù)據(jù)的處理方式不作限定。圖5示出了根據(jù)本發(fā)明一個(gè)實(shí)施例的數(shù)據(jù)分配裝置400的結(jié)構(gòu)示意圖。如圖4所示,該裝置包括初始化單元410、統(tǒng)計(jì)單元420、第一處理單元430、第二處理單元440、第三處理單元450、第四處理單元460和數(shù)據(jù)分配單元470。初始化單元410適于將統(tǒng)計(jì)起始值和臨時(shí)起始值設(shè)置為初始值,將統(tǒng)計(jì)終止值設(shè)置為統(tǒng)計(jì)起始值加上預(yù)設(shè)步長值,將剩余數(shù)據(jù)量設(shè)置為預(yù)設(shè)步長值。其中,初始值為0或1,預(yù)設(shè)步長值為N/(m×n),其中,N為所述多條數(shù)據(jù)的數(shù)據(jù)量,m為所述數(shù)據(jù)處理設(shè)備的數(shù)量,n為每個(gè)數(shù)據(jù)處理設(shè)備的CPU數(shù)量。統(tǒng)計(jì)單元420適于統(tǒng)計(jì)第一數(shù)據(jù)存儲器中數(shù)據(jù)主鍵在統(tǒng)計(jì)起始值與統(tǒng)計(jì)終止值之間的數(shù)據(jù)條數(shù),并判斷統(tǒng)計(jì)的數(shù)據(jù)條數(shù)是否等于剩余數(shù)據(jù)量,得到第一判斷結(jié)果。第一處理單元430適于當(dāng)?shù)谝慌袛嘟Y(jié)果為是時(shí),將臨時(shí)起始值和統(tǒng)計(jì)終止值相關(guān)聯(lián)的存儲到第二數(shù)據(jù)存儲器中,并將統(tǒng)計(jì)起始值更新為統(tǒng)計(jì)終止值加一,將統(tǒng)計(jì)終止值更新為統(tǒng)計(jì)終止值加預(yù)設(shè)步長值,將臨時(shí)起始值更新為統(tǒng)計(jì)起始值,并重新觸發(fā)統(tǒng)計(jì)單元420開始執(zhí)行統(tǒng)計(jì)操作。第二處理單元440適于當(dāng)?shù)谝慌袛嘟Y(jié)果為否時(shí),判斷統(tǒng)計(jì)終止值是否小于所述多條數(shù)據(jù)的數(shù)據(jù)主鍵的最大值,得到第二判斷結(jié)果。第三處理單元450適于當(dāng)?shù)诙袛嘟Y(jié)果為是時(shí),將剩余數(shù)據(jù)量更新為剩余數(shù)據(jù)量與統(tǒng)計(jì)的數(shù)據(jù)條數(shù)的差值,并將統(tǒng)計(jì)起始值更新為統(tǒng)計(jì)終止值加一,將統(tǒng)計(jì)終止值更新為統(tǒng)計(jì)終止值加剩余數(shù)據(jù)量,并重新觸發(fā)統(tǒng)計(jì)單元420開始執(zhí)行統(tǒng)計(jì)操作。第四處理單元460適于當(dāng)?shù)诙袛嘟Y(jié)果為否時(shí),將臨時(shí)起始值和統(tǒng)計(jì)終止值相關(guān)聯(lián)的存儲到第二數(shù)據(jù)存儲器中。數(shù)據(jù)分配單元470適于將第二數(shù)據(jù)存儲器中的各條數(shù)據(jù)發(fā)送給相應(yīng)的數(shù)據(jù)處理設(shè)備,以供數(shù)據(jù)處理設(shè)備從第一數(shù)據(jù)存儲器中獲取對應(yīng)的數(shù)據(jù)進(jìn)行處理。其中,數(shù)據(jù)處理設(shè)備適于根據(jù)以下方法從第一數(shù)據(jù)存儲器中獲取對應(yīng)的數(shù)據(jù)進(jìn)行處理:接收第二數(shù)據(jù)存儲器發(fā)來的與該數(shù)據(jù)處理設(shè)備相對應(yīng)的臨時(shí)起始值與統(tǒng)計(jì)終止值,并從第一數(shù)據(jù)存儲器中獲取該臨時(shí)起始值和統(tǒng)計(jì)終止值之間的數(shù)據(jù)進(jìn)行處理。根據(jù)本發(fā)明的數(shù)據(jù)分配裝置400,其具體細(xì)節(jié)已在基于圖1-4的描述中詳細(xì)公開,在此不再進(jìn)行贅述。根據(jù)本發(fā)明的技術(shù)方案,在每次進(jìn)行數(shù)據(jù)分割前,都先樂觀的認(rèn)為本數(shù)據(jù)段內(nèi)的所有數(shù)據(jù)都是連續(xù)的,然后統(tǒng)計(jì)本數(shù)據(jù)區(qū)間內(nèi)的數(shù)據(jù)量是否等于步長值。如果不等于則進(jìn)行下一個(gè)遞歸,下一個(gè)遞歸長度=步長值-本數(shù)據(jù)區(qū)間內(nèi)的數(shù)據(jù)量。通過這種方式實(shí)現(xiàn)了非連續(xù)數(shù)據(jù)的平均分割,將分割后的每組數(shù)據(jù)平均分給多個(gè)線程并行處理,可有效提高整體的執(zhí)行效率。在此處所提供的說明書中,說明了大量具體細(xì)節(jié)。然而,能夠理解,本發(fā)明的實(shí)施例可以在沒有這些具體細(xì)節(jié)的情況下被實(shí)踐。在一些實(shí)例中,并未詳細(xì)示出公知的方法、結(jié)構(gòu)和技術(shù),以便不模糊對本說明書的理解。類似地,應(yīng)當(dāng)理解,為了精簡本公開并幫助理解各個(gè)發(fā)明方面中的一個(gè)或多個(gè),在上面對本發(fā)明的示例性實(shí)施例的描述中,本發(fā)明的各個(gè)特征有時(shí)被一起分組到單個(gè)實(shí)施例、圖、或者對其的描述中。然而,并不應(yīng)將該公開的方法解釋成反映如下意圖:即所要求保護(hù)的本發(fā)明要求比在每個(gè)權(quán)利要求中所明確記載的特征更多特征。更確切地說,如下面的權(quán)利要求書所反映的那樣,發(fā)明方面在于少于前面公開的單個(gè)實(shí)施例的所有特征。因此,遵循具體實(shí)施方式的權(quán)利要求書由此明確地并入該具體實(shí)施方式,其中每個(gè)權(quán)利要求本身都作為本發(fā)明的單獨(dú)實(shí)施例。本領(lǐng)域那些技術(shù)人員應(yīng)當(dāng)理解在本文所公開的示例中的設(shè)備的模塊或單元或組件可以布置在如該實(shí)施例中所描述的設(shè)備中,或者可替換地可以定位在與該示例中的設(shè)備不同的一個(gè)或多個(gè)設(shè)備中。前述示例中的模塊可以組合為一個(gè)模塊或者此外可以分成多個(gè)子模塊。本領(lǐng)域那些技術(shù)人員可以理解,可以對實(shí)施例中的設(shè)備中的模塊進(jìn)行自適應(yīng)性地改變并且把它們設(shè)置在與該實(shí)施例不同的一個(gè)或多個(gè)設(shè)備中??梢园褜?shí)施例中的模塊或單元或組件組合成一個(gè)模塊或單元或組件,以及此外可以把它們分成多個(gè)子模塊或子單元或子組件。除了這樣的特征和/或過程或者單元中的至少一些是相互排斥之外,可以采用任何組合對本說明書(包括伴隨的權(quán)利要求、摘要和附圖)中公開的所有特征以及如此公開的任何方法或者設(shè)備的所有過程或單元進(jìn)行組合。除非另外明確陳述,本說明書(包括伴隨的權(quán)利要求、摘要和附圖)中公開的每個(gè)特征可以由提供相同、等同或相似目的的替代特征來代替。此外,本領(lǐng)域的技術(shù)人員能夠理解,盡管在此所述的一些實(shí)施例包括其它實(shí)施例中所包括的某些特征而不是其它特征,但是不同實(shí)施例的特征的組合意味著處于本發(fā)明的范圍之內(nèi)并且形成不同的實(shí)施例。例如,在下面的權(quán)利要求書中,所要求保護(hù)的實(shí)施例的任意之一都可以以任意的組合方式來使用。這里描述的各種技術(shù)可結(jié)合硬件或軟件,或者它們的組合一起實(shí)現(xiàn)。從而,本發(fā)明的方法和設(shè)備,或者本發(fā)明的方法和設(shè)備的某些方面或部分可采取嵌入有形媒介,例如軟盤、CD-ROM、硬盤驅(qū)動(dòng)器或者其它任意機(jī)器可讀的存儲介質(zhì)中的程序代碼(即指令)的形式,其中當(dāng)程序被載入諸如計(jì)算機(jī)之類的機(jī)器,并被所述機(jī)器執(zhí)行時(shí),所述機(jī)器變成實(shí)踐本發(fā)明的設(shè)備。在程序代碼在可編程計(jì)算機(jī)上執(zhí)行的情況下,計(jì)算設(shè)備一般包括處理器、處理器可讀的存儲介質(zhì)(包括易失性和非易失性存儲器和/或存儲元件),至少一個(gè)輸入裝置,和至少一個(gè)輸出裝置。其中,存儲器被配置用于存儲程序代碼;處理器被配置用于根據(jù)該存儲器中存儲的所述程序代碼中的指令,執(zhí)行本發(fā)明的數(shù)據(jù)分配方法。以示例而非限制的方式,計(jì)算機(jī)可讀介質(zhì)包括計(jì)算機(jī)存儲介質(zhì)和通信介質(zhì)。計(jì)算機(jī)可讀介質(zhì)包括計(jì)算機(jī)存儲介質(zhì)和通信介質(zhì)。計(jì)算機(jī)存儲介質(zhì)存儲諸如計(jì)算機(jī)可讀指令、數(shù)據(jù)結(jié)構(gòu)、程序模塊或其它數(shù)據(jù)等信息。通信介質(zhì)一般以諸如載波或其它傳輸機(jī)制等已調(diào)制數(shù)據(jù)信號來體現(xiàn)計(jì)算機(jī)可讀指令、數(shù)據(jù)結(jié)構(gòu)、程序模塊或其它數(shù)據(jù),并且包括任何信息傳遞介質(zhì)。以上的任一種的組合也包括在計(jì)算機(jī)可讀介質(zhì)的范圍之內(nèi)。此外,所述實(shí)施例中的一些在此被描述成可以由計(jì)算機(jī)系統(tǒng)的處理器或者由執(zhí)行所述功能的其它裝置實(shí)施的方法或方法元素的組合。因此,具有用于實(shí)施所述方法或方法元素的必要指令的處理器形成用于實(shí)施該方法或方法元素的裝置。此外,裝置實(shí)施例的在此所述的元素是如下裝置的例子:該裝置用于實(shí)施由為了實(shí)施該發(fā)明的目的的元素所執(zhí)行的功能。如在此所使用的那樣,除非另行規(guī)定,使用序數(shù)詞“第一”、“第二”、“第三”等等來描述普通對象僅僅表示涉及類似對象的不同實(shí)例,并且并不意圖暗示這樣被描述的對象必須具有時(shí)間上、空間上、排序方面或者以任意其它方式的給定順序。盡管根據(jù)有限數(shù)量的實(shí)施例描述了本發(fā)明,但是受益于上面的描述,本
技術(shù)領(lǐng)域:
內(nèi)的技術(shù)人員明白,在由此描述的本發(fā)明的范圍內(nèi),可以設(shè)想其它實(shí)施例。此外,應(yīng)當(dāng)注意,本說明書中使用的語言主要是為了可讀性和教導(dǎo)的目的而選擇的,而不是為了解釋或者限定本發(fā)明的主題而選擇的。因此,在不偏離所附權(quán)利要求書的范圍和精神的情況下,對于本
技術(shù)領(lǐng)域:
的普通技術(shù)人員來說許多修改和變更都是顯而易見的。對于本發(fā)明的范圍,對本發(fā)明所做的公開是說明性的,而非限制性的,本發(fā)明的范圍由所附權(quán)利要求書限定。當(dāng)前第1頁1 2 3