專利名稱:一種數(shù)據(jù)處理方法及其系統(tǒng)的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及數(shù)據(jù)挖掘領(lǐng)域,尤其涉及一種數(shù)據(jù)處理方法及其系統(tǒng)。
背景技術(shù):
近些年,隨著互聯(lián)網(wǎng)用戶的劇增,互聯(lián)網(wǎng)系統(tǒng)的訪問量越來越大,產(chǎn)生了大量數(shù)據(jù)。當(dāng)前,許多企業(yè)利用這些數(shù)據(jù)來分析用戶的行為,從而預(yù)測市場前景。可見,數(shù)據(jù)已經(jīng)成為現(xiàn)代企業(yè)的重要資源,是企業(yè)運(yùn)用科學(xué)管理、決策分析的基礎(chǔ),目前,大多數(shù)企業(yè)花費(fèi)大量的資金和時(shí)間來構(gòu)建聯(lián)機(jī)事物處理的業(yè)務(wù)系統(tǒng)和辦公自動(dòng)化系統(tǒng),用來記錄事物處理的各種相關(guān)數(shù)據(jù)。然而,對(duì)元數(shù)據(jù)進(jìn)行處理是聯(lián)機(jī)分析處理、數(shù)據(jù)挖掘的基礎(chǔ),因此,構(gòu)建數(shù)據(jù)倉庫的過程一個(gè)極其重要的環(huán)節(jié)。在現(xiàn)有技術(shù)中,ETL (Extraction-Transformation-Loading)數(shù)據(jù)轉(zhuǎn)換方法被廣泛應(yīng)用與數(shù)據(jù)倉庫的構(gòu)建。如圖1所示,ETL能將分布的、異構(gòu)數(shù)據(jù)源中的元數(shù)據(jù)抽取到臨時(shí)中間層后進(jìn)行清洗、轉(zhuǎn)換、集成,最后加載到數(shù)據(jù)倉庫或數(shù)據(jù)集市中,構(gòu)建了目標(biāo)數(shù)據(jù)倉庫。目前比較成熟的 ETL 商業(yè)工具有 IBM Datastage、DTS 和 OracleWarehouseBuilder等,這些商業(yè)工具設(shè)計(jì)的初衷是幫助不具備計(jì)算機(jī)專業(yè)知識(shí)的用戶設(shè)計(jì)ETL作業(yè),從而都以元數(shù)據(jù)驅(qū)動(dòng)的方式實(shí)現(xiàn),這反而增加了這些商業(yè)工具的復(fù)雜性,其設(shè)計(jì)的復(fù)雜性直接或間接地導(dǎo)致了數(shù)據(jù)處理的效率低下和系統(tǒng)可擴(kuò)展性差。由于商業(yè)工具一般都價(jià)格昂貴,很多小型企業(yè)都選擇開發(fā)自己的ETL工具,用以構(gòu)建數(shù)據(jù)倉庫,然而自行開發(fā)的ETL工具維護(hù)成本相當(dāng)高,一些開源工具的出現(xiàn),在一定程度上彌補(bǔ)了這些問題,如KETL、Kettle、CloverETL等。然而,這些開源工具也都具有前述的商業(yè)工具中存在的問題。綜上所述,當(dāng)前需要一種高效地、可擴(kuò)展性強(qiáng)的方案來解決上述問題。
發(fā)明內(nèi)容
本發(fā)明所要解決的技術(shù)問題之一是需要提供一種高效、可擴(kuò)展性強(qiáng)的數(shù)據(jù)處理方法。為了解決上述技術(shù)問題,本發(fā)明提供了一種數(shù)據(jù)處理方法,該方法包括步驟一,將待處理的數(shù)據(jù)劃分為多個(gè)數(shù)據(jù)包;步驟二,對(duì)部分或全部數(shù)據(jù)包設(shè)定各自的數(shù)據(jù)處理過程;步驟三,根據(jù)各個(gè)設(shè)定的數(shù)據(jù)處理過程,同時(shí)分別對(duì)各個(gè)數(shù)據(jù)包中的數(shù)據(jù)進(jìn)行處理。根據(jù)本發(fā)明又一方面的數(shù)據(jù)處理方法,在所述步驟一中,根據(jù)設(shè)定模式將待處理的數(shù)據(jù)劃分為多個(gè)數(shù)據(jù)包,其中,所述設(shè)定模式為按時(shí)間劃分或按數(shù)據(jù)大小劃分。根據(jù)本發(fā)明又一方面的數(shù)據(jù)處理方法,所述步驟二進(jìn)一步包括將所述各個(gè)設(shè)定的數(shù)據(jù)處理過程分別定義為各個(gè)數(shù)據(jù)處理作業(yè),其中,所述數(shù)據(jù)處理作業(yè)包括數(shù)據(jù)包的名稱和與所述數(shù)據(jù)包的數(shù)據(jù)處理過程中所包含的各步驟相對(duì)應(yīng)的方法屬性。根據(jù)本發(fā)明又一方面的數(shù)據(jù)處理方法,在所述步驟三中,具體包括以下步驟分析并檢查所述各個(gè)數(shù)據(jù)處理作業(yè)的語法;根據(jù)所述數(shù)據(jù)處理作業(yè)中數(shù)據(jù)包的名稱,將語法正確的各個(gè)數(shù)據(jù)處理作業(yè)分發(fā)至與所述名稱相關(guān)聯(lián)的各個(gè)管道中;所述各個(gè)管道同時(shí)根據(jù)各個(gè)作業(yè)中的方法屬性,調(diào)用相應(yīng)的方法對(duì)該數(shù)據(jù)包中的數(shù)據(jù)進(jìn)行處理,其中,所述各個(gè)管道為預(yù)先設(shè)定的針對(duì)各個(gè)數(shù)據(jù)包的數(shù)據(jù)處理過程的調(diào)用方法的函數(shù),預(yù)先設(shè)定的管道的數(shù)量與將待處理的數(shù)據(jù)劃分后的數(shù)據(jù)包的數(shù)量相同。根據(jù)本發(fā)明又一方面的數(shù)據(jù)處理方法,所述數(shù)據(jù)處理過程設(shè)定為按照以下順序進(jìn)行操作的前設(shè)定個(gè)步驟第一步進(jìn)行設(shè)置步驟,該設(shè)置步驟執(zhí)行在對(duì)數(shù)據(jù)處理之前的初始化處理,其中,所述初始化處理包括建立數(shù)據(jù)庫表,并根據(jù)所述各個(gè)數(shù)據(jù)包的數(shù)量對(duì)所述數(shù)據(jù)庫表進(jìn)行分區(qū)的操作;第二步進(jìn)行抽取步驟,該抽取步驟將元數(shù)據(jù)抽取出來;第三步進(jìn)行轉(zhuǎn)換步驟,該轉(zhuǎn)換步驟將抽取出來的元數(shù)據(jù)進(jìn)行合并、清洗、分類、分揀和列檢索處理;第四步進(jìn)行裝載步驟,該裝載步驟將執(zhí)行完所述轉(zhuǎn)換步驟后的數(shù)據(jù)加載至相應(yīng)數(shù)據(jù)庫中;第五步進(jìn)行拆卸步驟,該拆卸步驟處理后續(xù)操作,所述后續(xù)操作包括刪除文件和生成統(tǒng)計(jì)信息表。根據(jù)本發(fā)明又一方面的數(shù)據(jù)處理方法,采用插件的方式來設(shè)計(jì)各個(gè)數(shù)據(jù)處理作業(yè)。根據(jù)本發(fā)明又一方面的數(shù)據(jù)處理方法,所述管道在當(dāng)前主機(jī)的一個(gè)線程中運(yùn)行或在另一個(gè)主機(jī)的獨(dú)立的進(jìn)程中運(yùn)行。根據(jù)本發(fā)明又一方面的數(shù)據(jù)處理方法,還包括利用PERL語言中的Log4perl模塊,對(duì)所述管道調(diào)用相應(yīng)的方法對(duì)該數(shù)據(jù)包中的數(shù)據(jù)進(jìn)行處理的過程進(jìn)行監(jiān)控。根據(jù)本發(fā)明的另一方面,還提供了一種數(shù)據(jù)處理系統(tǒng),包括劃分模塊,將待處理的數(shù)據(jù)劃分為多個(gè)數(shù)據(jù)包;設(shè)定模塊,對(duì)部分或全部數(shù)據(jù)包設(shè)定各自的數(shù)據(jù)處理過程;處理模塊,根據(jù)各個(gè)設(shè)定的數(shù)據(jù)處理過程,同時(shí)分別對(duì)各個(gè)數(shù)據(jù)包中的數(shù)據(jù)進(jìn)行處理。根據(jù)本發(fā)明又一方面的數(shù)據(jù)處理系統(tǒng),所述設(shè)定模塊進(jìn)一步執(zhí)行將所述各個(gè)設(shè)定的數(shù)據(jù)處理過程分別定義為各個(gè)數(shù)據(jù)處理作業(yè),其中,所述數(shù)據(jù)處理作業(yè)包括數(shù)據(jù)包的名稱和與所述數(shù)據(jù)包的數(shù)據(jù)處理過程中所包含的各步驟相對(duì)應(yīng)的方法屬性;在所述處理模塊進(jìn)一步包括任務(wù)分析器,其分析并檢查所述各個(gè)數(shù)據(jù)處理作業(yè)的語法;任務(wù)分發(fā)器,根據(jù)所述數(shù)據(jù)處理作業(yè)中數(shù)據(jù)包的名稱,將語法正確的各個(gè)數(shù)據(jù)處理作業(yè)分發(fā)至與所述名稱相關(guān)聯(lián)的各個(gè)管道中;所述各個(gè)管道,同時(shí)根據(jù)各個(gè)作業(yè)中的方法屬性,調(diào)用相應(yīng)的方法對(duì)該數(shù)據(jù)包中的數(shù)據(jù)進(jìn)行處理,其中,所述各個(gè)管道為預(yù)先設(shè)定的針對(duì)各個(gè)數(shù)據(jù)包的數(shù)據(jù)處理過程的調(diào)用方法的函數(shù),預(yù)先設(shè)定的管道的數(shù)量與將待處理的數(shù)據(jù)劃分后的數(shù)據(jù)包的數(shù)量相同。與現(xiàn)有技術(shù)相比,本發(fā)明的一個(gè)或多個(gè)實(shí)施例可以具有如下優(yōu)點(diǎn)本發(fā)明通過將各個(gè)數(shù)據(jù)包的數(shù)據(jù)處理作業(yè)分發(fā)至不同的管道中獨(dú)立地執(zhí)行,使得能夠在各個(gè)管道中并行執(zhí)行各個(gè)數(shù)據(jù)包的數(shù)據(jù)處理,節(jié)省了大量的時(shí)間;而且,各個(gè)數(shù)據(jù)包的數(shù)據(jù)處理過程可以根據(jù)用戶的需要進(jìn)行設(shè)定,對(duì)于不太重要的數(shù)據(jù)可以不進(jìn)行,使得具有聞擴(kuò)展性。本發(fā)明的其它特征和優(yōu)點(diǎn)將在隨后的說明書中闡述,并且,部分地從說明書中變得顯而易見,或者通過實(shí)施本發(fā)明而了解。本發(fā)明的目的和其他優(yōu)點(diǎn)可通過在說明書、權(quán)利要求書以及附圖中所特別指出的結(jié)構(gòu)來實(shí)現(xiàn)和獲得。
附圖用來提供對(duì)本發(fā)明的進(jìn)一步理解,并且構(gòu)成說明書的一部分,與本發(fā)明的實(shí)施例共同用于解釋本發(fā)明,并不構(gòu)成對(duì)本發(fā)明的限制。在附圖中:圖1是現(xiàn)有技術(shù)中ETL數(shù)據(jù)轉(zhuǎn)換方法的流程示意圖。圖2是根據(jù)本發(fā)明第一實(shí)施例的數(shù)據(jù)處理方法的流程示意圖;圖3是根據(jù)本發(fā)明第一實(shí)施例的數(shù)據(jù)處理方法中的在管道中處理數(shù)據(jù)的流程示意圖;圖4是根據(jù)本發(fā)明第二實(shí)施例的數(shù)據(jù)處理系統(tǒng)的結(jié)構(gòu)示意圖;圖5是根據(jù)本發(fā)明第二實(shí)施例的數(shù)據(jù)處理系統(tǒng)中的數(shù)據(jù)處理模塊的結(jié)構(gòu)示意圖;圖6是利用本發(fā)明的數(shù)據(jù)處理系統(tǒng)對(duì)數(shù)據(jù)進(jìn)行處理的實(shí)驗(yàn)結(jié)果示意圖;圖7是利用本發(fā)明的數(shù)據(jù)處理系統(tǒng)和開源工具KETTLE進(jìn)行數(shù)據(jù)處理的對(duì)比示意圖。
具體實(shí)施例方式以下將結(jié)合附圖及實(shí)施例來詳細(xì)說明本發(fā)明的實(shí)施方式,借此對(duì)本發(fā)明如何應(yīng)用技術(shù)手段來解決技術(shù)問題,并達(dá)成技術(shù)效果的實(shí)現(xiàn)過程能充分理解并據(jù)以實(shí)施。需要說明的是,只要不構(gòu)成沖突,本發(fā)明中的各個(gè)實(shí)施例以及各實(shí)施例中的各個(gè)特征可以相互結(jié)合,所形成的技術(shù)方案均在本發(fā)明的保護(hù)范圍之內(nèi)。
另外,在附圖的流程圖示出的步驟可以在諸如一組計(jì)算機(jī)可執(zhí)行指令的計(jì)算機(jī)系統(tǒng)中執(zhí)行,并且,雖然在流程圖中示出了邏輯順序,但是在某些情況下,可以以不同于此處的順序執(zhí)行所示出或描述的步驟。第一實(shí)施例圖2是根據(jù)本發(fā)明第二實(shí)施例的數(shù)據(jù)處理方法的流程示意圖,下面參考圖2,詳細(xì)說明本發(fā)明方法的各個(gè)步驟。步驟S210,將待處理的數(shù)據(jù)劃分為多個(gè)數(shù)據(jù)包。具體地,將待處理的數(shù)據(jù)按照設(shè)定模式劃分為多個(gè)數(shù)據(jù)包,其中設(shè)定模式包括按時(shí)間劃分和按大小劃分的模式。例如,待處理的數(shù)據(jù)為某系統(tǒng)十小時(shí)的日志數(shù)據(jù),將該日志數(shù)據(jù)按每個(gè)小時(shí)來劃分成十個(gè)數(shù)據(jù)包,將每個(gè)數(shù)據(jù)包存儲(chǔ)在一個(gè)壓縮包內(nèi),共得到十個(gè)壓縮包,各個(gè)數(shù)據(jù)包的名稱分別為 taskl、task2、…、tasklO。需要說明的是,現(xiàn)有技術(shù)的數(shù)據(jù)處理是將待處理的數(shù)據(jù)作為一個(gè)整體(不考慮該整體的大小)進(jìn)行數(shù)據(jù)處理,即是一個(gè)端到端的過程。而本實(shí)施例在進(jìn)行數(shù)據(jù)處理之前,需要將待處理的數(shù)據(jù)劃分(或分區(qū))為多個(gè)數(shù)據(jù)包,后續(xù)根據(jù)需要設(shè)定部分或所有數(shù)據(jù)包的數(shù)據(jù)處理過程,并將各個(gè)數(shù)據(jù)處理過程定義為各個(gè)數(shù)據(jù)處理作業(yè),然后再對(duì)定義的數(shù)據(jù)處理作業(yè)進(jìn)行處理。這樣,在對(duì)分區(qū)后的數(shù)據(jù)進(jìn)行處理時(shí),既可以避免數(shù)據(jù)的重復(fù)處理,又可以加速數(shù)據(jù)的處理過程和查詢操作。步驟S220,對(duì)部分或全部數(shù)據(jù)包設(shè)定數(shù)據(jù)處理過程。
本步驟以PERL語言為例來實(shí)現(xiàn)數(shù)據(jù)處理。具體地,需要將各個(gè)數(shù)據(jù)處理過程分別定義為各個(gè)數(shù)據(jù)處理作業(yè)(以下簡稱作業(yè)),其中,各個(gè)數(shù)據(jù)處理作業(yè)包括各個(gè)數(shù)據(jù)包的名稱和與各個(gè)數(shù)據(jù)處理過程中各個(gè)步驟對(duì)應(yīng)的方法屬性?,F(xiàn)有技術(shù)中ETL方法的整個(gè)數(shù)據(jù)處理過程包括以下步驟:抽取、轉(zhuǎn)換和裝載。在本發(fā)明實(shí)施例中,完整的數(shù)據(jù)處理過程按照設(shè)置、提取、轉(zhuǎn)換、裝載和拆卸的順序來實(shí)現(xiàn)數(shù)據(jù)的處理。其中,設(shè)置步驟執(zhí)行在對(duì)數(shù)據(jù)處理之前的初始化處理,初始化處理包括建立數(shù)據(jù)庫表,并根據(jù)各個(gè)數(shù)據(jù)包的數(shù)量對(duì)數(shù)據(jù)庫表進(jìn)行分區(qū);拆卸步驟,處理后續(xù)操作,所述后續(xù)操作包括刪除文件和生成統(tǒng)計(jì)信息表。其他的步驟與ETL方法中涉及到的步驟大體相同,在此不作贅述。在根據(jù)需要對(duì)部分或全部的數(shù)據(jù)包設(shè)定數(shù)據(jù)處理過程時(shí),可以設(shè)定為按照以下順序進(jìn)行操作的前設(shè)定個(gè)步驟:第一步進(jìn)行設(shè)置步驟,執(zhí)行在對(duì)數(shù)據(jù)處理之前的初始化處理;第二步進(jìn)行抽取步驟,將元數(shù)據(jù)抽取出來;第三步進(jìn)行轉(zhuǎn)換步驟,將抽取出來的元數(shù)據(jù)進(jìn)行合并、清洗、分類、分揀和列檢索處理;第四步進(jìn)行加載步驟,將轉(zhuǎn)換后的數(shù)據(jù)加載至相應(yīng)數(shù)據(jù)庫中;第五步進(jìn)行拆卸步驟,處理后續(xù)操作。即,具體包括以下幾種數(shù)據(jù)處理過程:(1)設(shè)置;(2)設(shè)置一提??;(3)設(shè)置一提取一轉(zhuǎn)換;(4)設(shè)置一提取一轉(zhuǎn)換一裝載;(5)設(shè)置一提取一轉(zhuǎn)換一裝載一拆卸。這樣可以按需設(shè)定部分或全部數(shù)據(jù)包所要執(zhí)行的數(shù)據(jù)過程,針對(duì)不重要的數(shù)據(jù)可以省略掉多個(gè)處理步驟或不進(jìn)行數(shù)據(jù)處理,節(jié)省了大量的時(shí)間,提高了數(shù)據(jù)處理過程的靈活性。本實(shí)施例優(yōu)選地,采用插件的方式來設(shè)計(jì)數(shù)據(jù)處理作業(yè)。這樣,一個(gè)作業(yè)可以插入到該系統(tǒng)中,也可以從該系統(tǒng)中卸載,使得本系統(tǒng)的結(jié)構(gòu)簡單,保證了數(shù)據(jù)處理效率。每一個(gè)作業(yè)都可以順序定義設(shè)置(Setup)、提取(Extract)、轉(zhuǎn)換(Transform)、裝載(Load)和拆卸(Teardown)這五個(gè)方法屬性中的前幾個(gè)方法屬性,對(duì)應(yīng)各個(gè)方法屬性的表現(xiàn)形式可如下所示:Sub method_name: Setup (qw (task_namel,...))Sub method_name: Extract (qw (task_namel,...))Sub method_name:Transfor (qw(task_namel,...))Sub method_name: Load (qw (task_namel,...))Sub method_name: Teardown (qw (task_namel,...))其中,method_name是一個(gè)Perl名稱,只需要符合Perl語言方法命名規(guī)則即可;Setup是方法屬性,表示該Setup方法將在數(shù)據(jù)處理過程中第一步調(diào)用,其它的屬性類似;qw (task_namel,…)是屬性的值(也是作業(yè)的名稱),表示該方法屬于哪些作業(yè)。一般,不推薦讓一個(gè)方法屬于多個(gè)不同的任務(wù)(不同的作業(yè)),因?yàn)槿粢粋€(gè)方法屬于多個(gè)不同的任務(wù)會(huì)使整個(gè)作業(yè)邏輯變得復(fù)雜。因此,在本發(fā)明中,優(yōu)選地,使一個(gè)方法只屬于一個(gè)作業(yè)。例如,可以將上述例子中的名稱為taskl的數(shù)據(jù)包的作業(yè)定義為:Taskl:-sub stepl:Setup(taskl) O-sub step2: Extract (taskl)()
-sub step3: Transform (taskl)()
-sub step4: Load (taskl)()-sub step5: Teardown (taskl)()還可以定義為Taskl -sub stepl: Setup (taskl)()-sub step2: Extract (taskl)()-sub step3: Transform (taskl)()通過這樣的定義,系統(tǒng)能統(tǒng)計(jì)有哪些作業(yè)需要運(yùn)行及與該作業(yè)所要執(zhí)行數(shù)據(jù)處理過程相關(guān)聯(lián)的方法。步驟S230,分析并檢查各個(gè)數(shù)據(jù)處理作業(yè)的語法。具體地,基于預(yù)先定義的語法來檢查各個(gè)數(shù)據(jù)處理作業(yè)的語法,若與之前定義的語法一致,則判斷該數(shù)據(jù)處理作業(yè)的語法正確,否則,判斷為錯(cuò)誤。在本實(shí)施例中,利用PERL語言的方法屬性處理器(Perl AttributeHandler)定義了五種PERL語言方法屬性的語法,分別為Sub Setup:ATTR(CODE) {};Sub Extract: ATTR (CODE) {};Sub Transfor: ATTR (CODE) {};Sub Load:ATTR(CODE) {};Sub T ear down: ATTR (CODE) {};若作業(yè)與上述定義的語法一致,則判斷該作業(yè)的語法是正確的,否則,判斷結(jié)果為該作業(yè)的語法是錯(cuò)誤的。例如某作業(yè)的一個(gè)方法屬性定義如下sub"step2 Extract (task5) O ,通過對(duì)其語法、語義檢查,所得到的檢查結(jié)果錯(cuò)誤。這是因?yàn)楦鶕?jù)PERL語言的方法屬性處理器,方法名只能由英文字母(大小寫)、數(shù)字和下劃線的組合。步驟S240,根據(jù)數(shù)據(jù)處理作業(yè)中數(shù)據(jù)包的名稱,將語法正確的各個(gè)數(shù)據(jù)處理作業(yè)分發(fā)至與名稱相關(guān)聯(lián)的各個(gè)管道中。其中,各個(gè)管道為預(yù)先設(shè)定的針對(duì)各個(gè)數(shù)據(jù)包的數(shù)據(jù)處理過程的調(diào)用方法的函數(shù),預(yù)先設(shè)定的管道的數(shù)量與將待處理的數(shù)據(jù)劃分后的數(shù)據(jù)包的數(shù)量相同。也就是說,在本發(fā)明實(shí)施例中,將待處理數(shù)據(jù)劃分為多少個(gè)數(shù)據(jù)包,則預(yù)先設(shè)定多少個(gè)管道,且各個(gè)管道定義了名稱屬性和方法屬性,例如etl pipeline=etl job。管道的定義同作業(yè)的定義,如ETL作業(yè)taskl定義如下-sub stepl: Setup (taskl) {}-sub step2: Extract (taskl) {}-sub step3: Transform (taskl) {}-sub step4: Load (taskl) {}-sub step5: Teardown (taskl) {}taskl作業(yè)定義了這5個(gè)方法,則會(huì)將該作業(yè)分發(fā)至管道的屬性值為“taskl”的管道中,該管道會(huì)調(diào)用上述五個(gè)方法的代碼,調(diào)用次序?yàn)?stepl->step2->step3->step4->step5,然后這個(gè)調(diào)用過程就叫做pipeline,屬性值對(duì)應(yīng)taskl。又如ETL作業(yè)task2定義如下:-sub stepl:Setup(task2){}-sub step2: Extract (task2) {}-sub step3: Transform (task2) {}-sub step4: Load (task2) {}-sub step5: Teardown (task2) {}那就多了一個(gè)pipeline,屬性值對(duì)應(yīng)task2。每個(gè)管道可以在當(dāng)前的一個(gè)線程中運(yùn)行,也可以在另一個(gè)主機(jī)上的一個(gè)獨(dú)立進(jìn)程中運(yùn)行。這樣可以提高整體數(shù)據(jù)的數(shù)據(jù)處理效率,且不同任務(wù)之間互不干擾,在去掉一個(gè)已有作業(yè)或增加一個(gè)新的作業(yè)時(shí)都不會(huì)影響到其它正常作業(yè)的運(yùn)行,實(shí)現(xiàn)了可擴(kuò)展性。步驟S250,各個(gè)管道同時(shí)根據(jù)各個(gè)作業(yè)中的方法屬性,調(diào)用相應(yīng)的方法對(duì)該數(shù)據(jù)包中的數(shù)據(jù)進(jìn)行處理。例如,作業(yè)Taskl 定義了 Setup () > Extract () > Transform () > Load () > Teardown ()五個(gè)屬性,則執(zhí)行該作業(yè)的管道中定義的方法屬性為SetupO、Extract O、TransformO、Load O, TeardownO五種方法屬性,該管道中定義的該方法語法信息會(huì)被當(dāng)作參數(shù)傳入與其屬性相對(duì)應(yīng)的屬性定義方法中,也就是該管道通過將其語法信息作為參數(shù)來調(diào)用上述五種方法屬性對(duì)應(yīng)的方法處理。語法信息包括:該方法所在類名,包含該方法的符號(hào)表引用,該方法的引用,方法屬性的名稱,屬性的數(shù)據(jù),該方法觸發(fā)屬性處理器的階段,屬性處理器所在文件及在該文件的行號(hào)。例如,語法信息可以表示如下:
1.use Attribute::Handlers;
2.
3.sub Setup:ATTR {
4.my ($package.$symbol, $refereni, $attr, $data, $phase,
5.$ filename, $linenum)=@_;
6.}如果用戶定義了如下方法:Package ETLJob;Sub stepl:Setup(taskl){}那么會(huì)把stepl方法的語法信息傳遞給Setup屬性的定義函數(shù),那么package的值為”ETLJob”,即stepl方法定義所在的包;symbol為符號(hào)表的引用;referent為stepl方法的引用;attr為屬性Setup的數(shù)據(jù),這里為taskl ;phase是指stepl在編譯處理的那個(gè)階段被調(diào)用filename是Setup屬性定義的文件名;Iinenum是Setup屬性定義所在文件的行號(hào)。需要說明的是,若一個(gè)數(shù)據(jù)包的數(shù)據(jù)處理過程沒有設(shè)置第四步驟,即沒有設(shè)置裝載步驟,那么就不會(huì)生成相應(yīng)的數(shù)據(jù)表。若想要生成待處理數(shù)據(jù)的所有數(shù)據(jù)包的數(shù)據(jù)表,則需要在設(shè)定各個(gè)數(shù)據(jù)包的數(shù)據(jù)處理過程時(shí),至少要設(shè)定到第四步驟。對(duì)于任一個(gè)作業(yè)來說,將其放入至與其關(guān)聯(lián)的管道中運(yùn)行,這相當(dāng)于將作業(yè)當(dāng)作插件插入至本系統(tǒng)中,即使新的作業(yè)有語法、功能等錯(cuò)誤,也不會(huì)影響到它的運(yùn)行。也可以指定只運(yùn)行某些作業(yè),這相當(dāng)于把另外一些不需要處理的作業(yè)當(dāng)作插件從本系統(tǒng)中卸載掉,從而使得本系統(tǒng)具有高擴(kuò)展性。圖3是根據(jù)本發(fā)明第一實(shí)施例的數(shù)據(jù)處理方法中的在管道中處理數(shù)據(jù)的流程示意圖,具體地,根據(jù)作業(yè)的方法屬性定義,如某作業(yè)只定義了 setup屬性,則其運(yùn)行級(jí)別為I,若定義了 setupO、extract O屬性,貝U運(yùn)行級(jí)別為2,依次類推,上述作業(yè)“taskl”的運(yùn)行級(jí)別為5,因此根據(jù)圖3所示,在執(zhí)行taskl的數(shù)據(jù)處理過程時(shí),需要一次調(diào)用設(shè)置(Setup)、提取(Extract)、轉(zhuǎn)換(Transform)、裝載(Load)和拆卸(Teardown)等方法。需要說明的是,上述步驟S230至步驟S250是根據(jù)各個(gè)設(shè)定的數(shù)據(jù)處理過程,同時(shí)分別對(duì)各個(gè)數(shù)據(jù)包中的數(shù)據(jù)進(jìn)行處理的基于PERL語言的詳細(xì)步驟,還可以使用其他的語言來實(shí)行。另外,在本系統(tǒng)中,還可以米用Log4perl模塊輸出每個(gè)管道的每一步運(yùn)行日志,并在此基礎(chǔ)上實(shí)現(xiàn)了基于日志分析的監(jiān)控系統(tǒng)。從而能夠?qū)崟r(shí)監(jiān)控線上系統(tǒng)運(yùn)行情況,例如系統(tǒng)中的每一個(gè)作業(yè)所花費(fèi)的時(shí)間等。第二實(shí)施例圖4是根據(jù)本發(fā)明第一實(shí)施例的數(shù)據(jù)處理系統(tǒng)的結(jié)構(gòu)示意圖,下面參考圖4來詳細(xì)說明本系統(tǒng)的各個(gè)組成部分。該系統(tǒng)包括劃分模塊41、設(shè)定模塊42和處理模塊43。其中,劃分模塊41,將待處理的數(shù)據(jù)劃分為多個(gè)數(shù)據(jù)包;設(shè)定模塊42,對(duì)部分或全部數(shù)據(jù)包設(shè)定各自的數(shù)據(jù)處理過程;處理模塊43,根據(jù)各個(gè)設(shè)定的數(shù)據(jù)處理過程,同時(shí)分別對(duì)各個(gè)數(shù)據(jù)包中的數(shù)據(jù)進(jìn)行處理。需要說明的是,現(xiàn)有技術(shù)的數(shù)據(jù)處理是將待處理的數(shù)據(jù)作為一個(gè)整體(不考慮該整體的大小)進(jìn)行數(shù)據(jù)處理,即是一個(gè)端到端的過程。而本實(shí)施例在進(jìn)行數(shù)據(jù)處理之前,需要將待處理的數(shù)據(jù)劃分(或分區(qū))為多個(gè)數(shù)據(jù)包(即上述劃分模塊),后續(xù)根據(jù)需要設(shè)定部分或所有數(shù)據(jù)包的數(shù)據(jù)處理過程(即上述設(shè)定模塊),并將各個(gè)數(shù)據(jù)處理過程定義為各個(gè)數(shù)據(jù)處理作業(yè),然后再對(duì)定義的數(shù)據(jù)處理作業(yè)進(jìn)行處理。這樣,在對(duì)分區(qū)后的數(shù)據(jù)進(jìn)行處理時(shí),既可以避免數(shù)據(jù)的重復(fù)處理,又可以加速數(shù)據(jù)的處理過程和查詢操作。劃分模塊41根據(jù)設(shè)定模式將待處理的數(shù)據(jù)劃分為多個(gè)數(shù)據(jù)包,其中,設(shè)定模式可以為按時(shí)間劃分或按數(shù)據(jù)大小劃分。例如,劃分模塊41將一個(gè)待處理的數(shù)據(jù)(共五個(gè)小時(shí)的數(shù)據(jù))按照每小時(shí)來劃分,可以得到5個(gè)數(shù)據(jù)包,各個(gè)數(shù)據(jù)包的名稱分別為taskl、task2、task3、task4和task5。現(xiàn)有技術(shù)中ETL方法的整個(gè)數(shù)據(jù)處理過程包括以下步驟抽取、轉(zhuǎn)換和裝載。在本發(fā)明實(shí)施例中,完整的數(shù)據(jù)處理過程包括設(shè)置、提取、轉(zhuǎn)換、裝載和拆卸這五個(gè)步驟。其中,設(shè)置步驟執(zhí)行在對(duì)數(shù)據(jù)處理之前的初始化處理,初始化處理包括建立數(shù)據(jù)庫表,并根據(jù)各個(gè)數(shù)據(jù)包的數(shù)量對(duì)數(shù)據(jù)庫表進(jìn)行分區(qū);拆卸步驟,處理后續(xù)操作,所述后續(xù)操作包括刪除文件和生成統(tǒng)計(jì)信息表。設(shè)定模塊42在根據(jù)需要對(duì)部分或全部的數(shù)據(jù)包設(shè)定數(shù)據(jù)處理過程時(shí),可以設(shè)定為按照以下順序進(jìn)行操作的前設(shè)定個(gè)步驟第一步進(jìn)行設(shè)置步驟,執(zhí)行在對(duì)數(shù)據(jù)處理之前的初始化處理;第二步進(jìn)行抽取步驟,將元數(shù)據(jù)抽取出來;第三步進(jìn)行轉(zhuǎn)換步驟,將抽取出來的元數(shù)據(jù)進(jìn)行合并、清洗、分類、分揀和列檢索處理;第四步進(jìn)行加載步驟,將轉(zhuǎn)換后的數(shù)據(jù)加載至相應(yīng)數(shù)據(jù)庫中;第五步進(jìn)行拆卸步驟,處理后續(xù)操作。即,具體包括以下幾種數(shù)據(jù)處理過程(I)設(shè)置;(2)設(shè)置一提??;(3)設(shè)置一提取一轉(zhuǎn)換;(4)設(shè)置一提取一轉(zhuǎn)換一裝載;(5)設(shè)置一提取一轉(zhuǎn)換一裝載一拆卸。這樣可以按需設(shè)定部分或全部數(shù)據(jù)包所要執(zhí)行的數(shù)據(jù)過程,針對(duì)不重要的數(shù)據(jù)可以省略掉多個(gè)處理步驟或不進(jìn)行數(shù)據(jù)處理,節(jié)省了大量的時(shí)間,提高了數(shù)據(jù)處理過程的靈活性。在本發(fā)明實(shí)施例中,說明以PERL語言來實(shí)現(xiàn)的處理模塊43,但本實(shí)施例僅為一個(gè)示例。另外,設(shè)定模塊42進(jìn)一步執(zhí)行將各個(gè)設(shè)定的數(shù)據(jù)處理過程分別定義為各個(gè)數(shù)據(jù)處理作業(yè),其中,所述數(shù)據(jù)處理作業(yè)包括數(shù)據(jù)包的名稱和與所述數(shù)據(jù)包的數(shù)據(jù)處理過程中所包含的各步驟相對(duì)應(yīng)的方法屬性。本實(shí)施例優(yōu)選地,設(shè)定模塊42采用插件的方式來設(shè)計(jì)數(shù)據(jù)處理作業(yè)。這樣,一個(gè)作業(yè)可以插入到該系統(tǒng)中,也可以從該系統(tǒng)中卸載,使得本系統(tǒng)的結(jié)構(gòu)簡單,保證了數(shù)據(jù)處
理效率。數(shù)據(jù)處理作業(yè)包括數(shù)據(jù)包的名稱和與數(shù)據(jù)包的數(shù)據(jù)處理過程中各個(gè)步驟相對(duì)應(yīng)的方法屬性。每一個(gè)作業(yè)都可以順序定義設(shè)置(Setup)、提取(Extract)、轉(zhuǎn)換(Transform)、裝載(Load)和拆卸(Teardown)這五個(gè)方法屬性中的前幾個(gè)方法屬性,對(duì)應(yīng)各個(gè)方法屬性的表現(xiàn)形式可如下所示Sub method_name: Setup (qw (task_namel, ···))Sub method_name: Extract (qw (task_namel, ···))Sub method_name:Transfor (qw(task_namel, ···))Sub method_name: Load (qw (task_namel, ...))Sub method_name: Teardown (qw (task_namel, ···))其中,method_name是一個(gè)Perl名稱,只需要符合Perl語言方法命名規(guī)則即可;Setup是方法屬性,表示該Setup方法將在數(shù)據(jù)處理過程中第一步調(diào)用,其它的屬性類似;qw(task_namel, ···)是屬性的值(也是作業(yè)的名稱),表示該方法屬于哪些作業(yè)。一般,不推薦讓一個(gè)方法屬于多個(gè)不同的任務(wù)(不同的作業(yè)),因?yàn)槿粢粋€(gè)方法屬于多個(gè)不同的任務(wù)會(huì)使整個(gè)作業(yè)邏輯變得復(fù)雜。因此,在本發(fā)明中,優(yōu)選地,使一個(gè)方法只屬于一個(gè)作業(yè)。例如,可以將上述例子中的名稱為taskl的數(shù)據(jù)包的作業(yè)定義為Taskl -sub stepl:Setup(taskl) O-sub step2: Extract (taskl)()
-sub step3: Transform (taskl)()-sub step4: Load (taskl)()-sub step5: Teardown (taskl)()通過這樣的定義,系統(tǒng)能統(tǒng)計(jì)有哪些作業(yè)需要運(yùn)行及與該作業(yè)所要執(zhí)行數(shù)據(jù)處理過程相關(guān)聯(lián)的方法。如圖5所示,處理模塊43主要包括任務(wù)分析器、任務(wù)分發(fā)器和管道三個(gè)部分。任務(wù)分析器,用于分析并檢查所定義的的各個(gè)數(shù)據(jù)處理作業(yè)(可簡稱“作業(yè)”)的語法和語義。任務(wù)分析器是基于PERL語言的方法屬性處理器(Perl Attribute Handler)實(shí)現(xiàn)。PERL語言的方法屬性處理器能在編譯過程中BEGIN、CHECK、INIT和END中的某一階段觸發(fā),從而實(shí)現(xiàn)在系統(tǒng)編譯期對(duì)用戶定義的作業(yè)進(jìn)行分析。在任務(wù)分析器中,定義了五種PERL語言方法屬性的語法,分別為Sub Setup:ATTR(CODE) {};Sub Extract: ATTR (CODE) {};Sub Transfor: ATTR (CODE) {};Sub Load:ATTR(CODE) {};Sub T ear down: ATTR (CODE) {};任務(wù)分析器通過上述定義的語法對(duì)各個(gè)數(shù)據(jù)處理作業(yè)進(jìn)行語法檢查,若作業(yè)與上述定義的語法一致,則判斷該作業(yè)的語法是正確的,否則,判斷結(jié)果為該作業(yè)的語法是錯(cuò)誤的。任務(wù)分發(fā)器收集所有語法正確的作業(yè),根據(jù)各個(gè)作業(yè)中的數(shù)據(jù)包的名稱,將語法正確的各個(gè)作業(yè)分發(fā)到不同的管道中去執(zhí)行。各個(gè)管道同時(shí)根據(jù)各個(gè)作業(yè)中的方法屬性,調(diào)用相應(yīng)的方法對(duì)該數(shù)據(jù)包中的數(shù)據(jù)進(jìn)行處理。需要說明的是,各個(gè)管道為預(yù)先設(shè)定的針對(duì)各個(gè)數(shù)據(jù)包的數(shù)據(jù)處理過程的調(diào)用方法的函數(shù),預(yù)先設(shè)定的管道的數(shù)量與將待處理的數(shù)據(jù)劃分后的數(shù)據(jù)包的數(shù)量相同。每個(gè)管道可以在當(dāng)前的一個(gè)線程中運(yùn)行,也可以在另一個(gè)主機(jī)上的一個(gè)獨(dú)立進(jìn)程中運(yùn)行。這樣可以提高整體數(shù)據(jù)的數(shù)據(jù)處理效率,且不同任務(wù)之間互不干擾,在去掉一個(gè)已有作業(yè)或增加一個(gè)新的作業(yè)時(shí)都不會(huì)影響到其它正常作業(yè)的運(yùn)行,實(shí)現(xiàn)了可擴(kuò)展性。對(duì)于任一個(gè)作業(yè)來說,將其放入至與其關(guān)聯(lián)的管道中運(yùn)行,這相當(dāng)于將作業(yè)當(dāng)作插件插入至本系統(tǒng)中,即使新的作業(yè)有語法、功能等錯(cuò)誤,也不會(huì)影響到它的運(yùn)行。也可以指定只運(yùn)行某些作業(yè),這相當(dāng)于把另外一些不需要處理的作業(yè)當(dāng)作插件從本系統(tǒng)中卸載掉,從而使得本系統(tǒng)具有高擴(kuò)展性。另外,在本系統(tǒng)中,還可以采用Log4perl模塊輸出每個(gè)管道的每一步運(yùn)行日志,并在此基礎(chǔ)上實(shí)現(xiàn)了基于日志分析的監(jiān)控系統(tǒng)。從而能夠?qū)崟r(shí)監(jiān)控線上系統(tǒng)運(yùn)行情況,例如系統(tǒng)中的每一個(gè)作業(yè)所花費(fèi)的時(shí)間等。下面以一個(gè)示例來進(jìn)一步說明本發(fā)明的優(yōu)點(diǎn)和特征。示例現(xiàn)有某系統(tǒng)十小時(shí)的日志數(shù)據(jù),每個(gè)小時(shí)的數(shù)據(jù)存儲(chǔ)在一個(gè)壓縮包內(nèi),每個(gè)壓縮包大約900M (共十個(gè)壓縮包),每個(gè)壓縮包有一千一百萬條記錄,以二進(jìn)制文本存儲(chǔ)。每個(gè)記錄以 object_id, object_type, interval_start 為主鍵現(xiàn)需要將 object_type 特定值的數(shù)據(jù)加載到數(shù)據(jù)庫中。現(xiàn)根據(jù)需求設(shè)計(jì)每個(gè)數(shù)據(jù)包的數(shù)據(jù)處理過程包括以下步驟:(I) Setup步驟:主要負(fù)責(zé)處理執(zhí)行傳統(tǒng)ETL步聚前需要做的初始化操作,如建立數(shù)據(jù)庫表、對(duì)數(shù)據(jù)庫表進(jìn)行分區(qū)、準(zhǔn)備源數(shù)據(jù)等。由于數(shù)據(jù)量較大,因此可以將數(shù)據(jù)按時(shí)間(interval_start)加以分區(qū),譬如:一個(gè)小時(shí)一個(gè)分區(qū)。數(shù)據(jù)的分區(qū)對(duì)應(yīng)于數(shù)據(jù)庫中表的分區(qū),這樣做的目的是既可以避免數(shù)據(jù)的重復(fù)處理,又可以加速數(shù)據(jù)的加載過程和查詢操作,
數(shù)據(jù)庫表分區(qū)定義為:
CREATE TABLE test—taWe (
object id int unsigned NOT NULL,object—type int unsigned NOT NULL,interval—start mediuinint NOT NULL,
PRIMARY KEY(object—id, interval—start)
)ENGI N E=InnoDBDEFA U LTCHA RS ET=UtfB COLLATE=UtfBgeneralci
PARTITION BY RANGE(intervai_start,)
(
PARTITION zero VALUES LESS THAN (I),
PARTITION VALUES LESS THAN (1000),
PARTITION VALUES LESS THAN (1001)
PARTITION fiiture VAII FS LESS THAN MAXVALUE`);(2) Extract步驟:主要負(fù)責(zé)將異構(gòu)數(shù)據(jù)源如二進(jìn)制文件、數(shù)據(jù)庫表等抽取出來,統(tǒng)一文本方式存儲(chǔ),便于后繼步聚的合并、清洗、分類、分揀和列檢索等操作。抽取的方法通常依賴于源數(shù)據(jù)的具體結(jié)構(gòu),這里為上述二進(jìn)制文件設(shè)計(jì)了單獨(dú)的抽取工具。只需要在該過程中調(diào)用該工具即可,該工具將抽取出來的數(shù)據(jù)以CSV文本格式存儲(chǔ)。(3) Transform步驟:主要負(fù)責(zé)將抽取出來的數(shù)據(jù)進(jìn)行合并、清洗、分類、分揀和列檢索等處理,形成最終能直接加載到目標(biāo)數(shù)據(jù)庫的文本文件。這一步中既可以編寫具體系統(tǒng)相關(guān)的高效轉(zhuǎn)換工具,也可以用已有的文本處理工具sed、awk、grep (其實(shí)這些工具已相當(dāng)高效)等來分析抽取出來的CSV文本文件。這里采用awk進(jìn)行數(shù)據(jù)轉(zhuǎn)換,如過濾掉ob ject_type為” test”的記錄并統(tǒng)計(jì)與上一個(gè)小時(shí)除主鍵外的其它域發(fā)生變化的object個(gè)數(shù),其中第一、二、三個(gè)域?yàn)橛涗浿麈I。awk-F, ARGIND==I {\key=$l", "$2","$3;fl[key]=$4;f2[key]=$5;f3[key]=$6;f4[key]=$7;f5[key]=$8;f6[key]=$9;}\ARGIND>1&&($2!= “test”){if(fI[key2]!=$4| |f2[key2]!=$5| |f3[key2]!=$6I f4[key2]!=$7 f5[key2]!=$8f6[key2]!=$9){shifts++}}END{print$0", "shifts}filel file2(4) Load步驟:直接將轉(zhuǎn)換后的數(shù)據(jù)文件加載到相應(yīng)數(shù)據(jù)庫中即可。在加載過程中,由于多數(shù)SQL語句效率不高,因此應(yīng)盡量避免SQL語句操作。由于本系統(tǒng)的轉(zhuǎn)換后得到
的數(shù)據(jù)文件跟數(shù)據(jù)庫中的表是--對(duì)應(yīng)的,因此可以用Mysql的內(nèi)建函數(shù)1addata來加載
數(shù)據(jù)文件,實(shí)驗(yàn)表明這樣的加載方法是最高效的,比INSERT語句快二十倍:LOAD DATA ‘file_name’INTO TABLE tab_nameFIELDS TERMINATED BY' , ' ENCLOSED BY""LINES TERMINATED BY ‘\n’(5) Teardown步驟:負(fù)責(zé)處理后續(xù)事宜,如刪除無用文本文件、生成一些統(tǒng)計(jì)信息表以方便用戶查詢等。從以上作業(yè)的示例可以看出,在本系統(tǒng)中只需定義上述幾個(gè)步驟對(duì)應(yīng)的方法即可,每個(gè)步驟對(duì)應(yīng)的方法實(shí)現(xiàn)相當(dāng)靈活,可以借助已有的sed、awk和grep等高效的文本處理工具,這大大減少了設(shè)計(jì)作業(yè)的工作量。為了測試本系統(tǒng)的性能,分別用本系統(tǒng)和開源工具KETTLE對(duì)上述十小時(shí)的日志數(shù)據(jù)進(jìn)行數(shù)據(jù)處理:采用本系統(tǒng)運(yùn)行作業(yè)十次,每次加載一個(gè)小時(shí)的數(shù)據(jù),每小時(shí)數(shù)據(jù)有一千一百萬條記錄,運(yùn)行任務(wù)過程中記錄每一步所花費(fèi)的時(shí)間,實(shí)驗(yàn)結(jié)果如圖6所示。分別用開源工具KETTLE和本系統(tǒng)(假設(shè)稱為SETL)運(yùn)行作業(yè)十次,每次加載一個(gè)小時(shí)數(shù)據(jù),每小時(shí)數(shù)據(jù)有一千一百萬條記錄,記錄該十個(gè)作業(yè)分別在Kettle和本系統(tǒng)中運(yùn)行所需時(shí)間,實(shí)驗(yàn)結(jié)果如圖7所示。從圖6可以看出本系統(tǒng)具有較高效率,一千多萬條數(shù)據(jù)加載在80秒內(nèi)便能處理完畢,且大部分時(shí)間花費(fèi)在數(shù)據(jù)轉(zhuǎn)換這一步,這一步是由轉(zhuǎn)換規(guī)則的復(fù)雜性決定的;從圖7的對(duì)比可以看出,本系統(tǒng)比開源工具Kettle具有更高的執(zhí)行效率。
本實(shí)施例的數(shù)據(jù)處理系統(tǒng),通過任務(wù)分發(fā)器將各個(gè)數(shù)據(jù)包的數(shù)據(jù)處理作業(yè)分發(fā)至不同的管道中獨(dú)立地執(zhí)行,使得能夠在各個(gè)管道中并行執(zhí)行各個(gè)數(shù)據(jù)包的數(shù)據(jù)處理,節(jié)省了大量的時(shí)間;而且,各個(gè)數(shù)據(jù)包的數(shù)據(jù)處理過程可以根據(jù)用戶的需要進(jìn)行設(shè)定,對(duì)于不太重要的數(shù)據(jù)可以不進(jìn)行,使得本系統(tǒng)具有高擴(kuò)展性。本領(lǐng)域的技術(shù)人員應(yīng)該明白,上述的本發(fā)明的各模塊或各步驟可以用通用的計(jì)算裝置來實(shí)現(xiàn),它們可以集中在單個(gè)的計(jì)算裝置上,或者分布在多個(gè)計(jì)算裝置所組成的網(wǎng)絡(luò)上,可選地,它們可以用計(jì)算裝置可執(zhí)行的程序代碼來實(shí)現(xiàn),從而,可以將它們存儲(chǔ)在存儲(chǔ)裝置中由計(jì)算裝置來執(zhí)行,或者將它們分別制作成各個(gè)集成電路模塊,或者將它們中的多個(gè)模塊或步驟制作成單個(gè)集成電路模塊來實(shí)現(xiàn)。這樣,本發(fā)明不限制于任何特定的硬件和軟件結(jié)合。雖然本發(fā)明所揭露的實(shí)施方式如上,但所述的內(nèi)容只是為了便于理解本發(fā)明而采用的實(shí)施方式,并非用以限定本發(fā)明。任何本發(fā)明所屬技術(shù)領(lǐng)域內(nèi)的技術(shù)人員,在不脫離本發(fā)明所揭露的精神和范圍的前提下,可以在實(shí)施的形式上及細(xì)節(jié)上作任何的修改與變化,但本發(fā)明的專利保護(hù)范圍,仍須以所附的權(quán)利要求書所界定的范圍為準(zhǔn)。
權(quán)利要求
1.一種數(shù)據(jù)處理方法,其特征在于,包括: 步驟一,將待處理的數(shù)據(jù)劃分為多個(gè)數(shù)據(jù)包; 步驟二,對(duì)部分或全部數(shù)據(jù)包設(shè)定各自的數(shù)據(jù)處理過程; 步驟三,根據(jù)各個(gè)設(shè)定的數(shù)據(jù)處理過程,同時(shí)分別對(duì)各個(gè)數(shù)據(jù)包中的數(shù)據(jù)進(jìn)行處理。
2.根據(jù)權(quán)利要求1所述的數(shù)據(jù)處理方法,其特征在于,在所述步驟一中, 根據(jù)設(shè)定模式將待處理的數(shù)據(jù)劃分為多個(gè)數(shù)據(jù)包,其中, 所述設(shè)定模式為按時(shí)間劃分或按數(shù)據(jù)大小劃分。
3.根據(jù)權(quán)利要求1所述的數(shù)據(jù)處理方法,其特征在于,所述步驟二進(jìn)一步包括: 將所述各個(gè)設(shè)定的數(shù)據(jù)處理過程分別定義為各個(gè)數(shù)據(jù)處理作業(yè),其中, 所述數(shù)據(jù)處理作業(yè)包括數(shù)據(jù)包的名稱和與所述數(shù)據(jù)包的數(shù)據(jù)處理過程中所包含的各步驟相對(duì)應(yīng)的方法屬性。
4.根據(jù)權(quán)利要求3所述的數(shù)據(jù)處理方法,其特征在于,在所述步驟三中,具體包括以下步驟: 分析并檢查所述各個(gè)數(shù)據(jù)處理作業(yè)的語法; 根據(jù)所述數(shù)據(jù)處理作業(yè)中數(shù)據(jù)包的名稱,將語法正確的各個(gè)數(shù)據(jù)處理作業(yè)分發(fā)至與所述名稱相關(guān)聯(lián)的各個(gè)管道中; 所述各個(gè)管道同時(shí)根據(jù)各個(gè)作業(yè)中的方法屬性,調(diào)用相應(yīng)的方法對(duì)該數(shù)據(jù)包中的數(shù)據(jù)進(jìn)行處理,其中, 所述各個(gè)管道為預(yù)先設(shè)定的針對(duì)各個(gè)數(shù)據(jù)包的數(shù)據(jù)處理過程的調(diào)用方法的函數(shù),預(yù)先設(shè)定的管道的數(shù)量與將待處理的數(shù)據(jù)劃分后的數(shù)據(jù)包的數(shù)量相同。
5.根據(jù)權(quán)利要求4所述的數(shù)據(jù)處理方法,其特征在于,所述數(shù)據(jù)處理過程設(shè)定為按照以下順序進(jìn)行操作的前設(shè)定個(gè)步驟: 第一步進(jìn)行設(shè)置步驟,該設(shè)置步驟執(zhí)行在對(duì)數(shù)據(jù)處理之前的初始化處理,其中,所述初始化處理包括建立數(shù)據(jù)庫表,并根據(jù)所述各個(gè)數(shù)據(jù)包的數(shù)量對(duì)所述數(shù)據(jù)庫表進(jìn)行分區(qū)的操作; 第二步進(jìn)行抽取步驟,該抽取步驟將元數(shù)據(jù)抽取出來; 第三步進(jìn)行轉(zhuǎn)換步驟,該轉(zhuǎn)換步驟將抽取出來的元數(shù)據(jù)進(jìn)行合并、清洗、分類、分揀和列檢索處理; 第四步進(jìn)行裝載步驟,該裝載步驟將執(zhí)行完所述轉(zhuǎn)換步驟后的數(shù)據(jù)加載至相應(yīng)數(shù)據(jù)庫中; 第五步進(jìn)行拆卸步驟,該拆卸步驟處理后續(xù)操作,所述后續(xù)操作包括刪除文件和生成統(tǒng)計(jì)信息表。
6.根據(jù)權(quán)利要求3至5中任一項(xiàng)所述的數(shù)據(jù)處理方法,其特征在于, 采用插件的方式來設(shè)計(jì)各個(gè)數(shù)據(jù)處理作業(yè)。
7.根據(jù)權(quán)利要求4或5所述的數(shù)據(jù)處理方法,其特征在于, 所述管道在當(dāng)前主機(jī)的一個(gè)線程 中運(yùn)行或在另一個(gè)主機(jī)的獨(dú)立的進(jìn)程中運(yùn)行。
8.根據(jù)權(quán)利要求7所述的數(shù)據(jù)處理方法,其特征在于,還包括: 利用PERL語言中的Log4perl模塊,對(duì)所述管道調(diào)用相應(yīng)的方法對(duì)該數(shù)據(jù)包中的數(shù)據(jù)進(jìn)行處理的過程進(jìn)行監(jiān)控。
9.一種數(shù)據(jù)處理系統(tǒng),其特征在于,包括: 劃分模塊,將待處理的數(shù)據(jù)劃分為多個(gè)數(shù)據(jù)包; 設(shè)定模塊,對(duì)部分或全部數(shù)據(jù)包設(shè)定各自的數(shù)據(jù)處理過程; 處理模塊,根據(jù)各個(gè)設(shè)定的數(shù)據(jù)處理過程,同時(shí)分別對(duì)各個(gè)數(shù)據(jù)包中的數(shù)據(jù)進(jìn)行處理。
10.根據(jù)權(quán)利要求9所述的數(shù)據(jù)處理系統(tǒng),其特征在于,所述設(shè)定模塊進(jìn)一步執(zhí)行: 將所述各個(gè)設(shè)定的數(shù)據(jù)處理過程分別定義為各個(gè)數(shù)據(jù)處理作業(yè),其中, 所述數(shù)據(jù)處理作業(yè)包括數(shù)據(jù)包的名稱和與所述數(shù)據(jù)包的數(shù)據(jù)處理過程中所包含的各步驟相對(duì)應(yīng)的方法屬性; 在所述處理模塊進(jìn)一步包括: 任務(wù)分析器,其分析并檢查所述各個(gè)數(shù)據(jù)處理作業(yè)的語法; 任務(wù)分發(fā)器,根據(jù)所述數(shù)據(jù)處理作業(yè)中數(shù)據(jù)包的名稱,將語法正確的各個(gè)數(shù)據(jù)處理作業(yè)分發(fā)至與所述名稱相關(guān)聯(lián)的各個(gè)管道中; 所述各個(gè)管道,同時(shí)根據(jù)各個(gè)作業(yè)中的方法屬性,調(diào)用相應(yīng)的方法對(duì)該數(shù)據(jù)包中的數(shù)據(jù)進(jìn)行處理,其中, 所述各個(gè)管道為預(yù)先設(shè)定的針對(duì)各個(gè)數(shù)據(jù)包的數(shù)據(jù)處理過程的調(diào)用方法的函數(shù),預(yù)先設(shè)定的管道的數(shù)量與將待處理的數(shù)據(jù)劃分后的數(shù)據(jù)包的數(shù)量相同。
全文摘要
本發(fā)明公開了一種數(shù)據(jù)處理方法,該方法包括步驟一,將待處理的數(shù)據(jù)劃分為多個(gè)數(shù)據(jù)包;步驟二,對(duì)部分或全部數(shù)據(jù)包設(shè)定各自的數(shù)據(jù)處理過程;步驟三,根據(jù)各個(gè)設(shè)定的數(shù)據(jù)處理過程,同時(shí)分別對(duì)各個(gè)數(shù)據(jù)包中的數(shù)據(jù)進(jìn)行處理。本發(fā)明通過將各個(gè)數(shù)據(jù)包的數(shù)據(jù)處理作業(yè)分發(fā)至不同的管道中獨(dú)立地執(zhí)行,使得能夠在各個(gè)管道中并行執(zhí)行各個(gè)數(shù)據(jù)包的數(shù)據(jù)處理,節(jié)省了大量的時(shí)間;而且,各個(gè)數(shù)據(jù)包的數(shù)據(jù)處理過程可以根據(jù)用戶的需要進(jìn)行設(shè)定,對(duì)于不太重要的數(shù)據(jù)可以不進(jìn)行,使得具有高擴(kuò)展性。
文檔編號(hào)G06F17/30GK103077192SQ201210568419
公開日2013年5月1日 申請(qǐng)日期2012年12月24日 優(yōu)先權(quán)日2012年12月24日
發(fā)明者田媛媛 申請(qǐng)人:中標(biāo)軟件有限公司