本發(fā)明實(shí)施例涉及計(jì)算機(jī)技術(shù)領(lǐng)域,具體涉及一種海量文本數(shù)據(jù)處理方法及裝置。
背景技術(shù):
在處理海量文本數(shù)據(jù)時(shí),往往需要利用數(shù)據(jù)庫(kù)對(duì)數(shù)據(jù)進(jìn)行抽取、轉(zhuǎn)換、加載(英文全稱為Extract-Transform-Load,英文縮寫(xiě)為ETL)。ETL是一種將數(shù)據(jù)從數(shù)據(jù)源端經(jīng)過(guò)抽取、轉(zhuǎn)換、加載至目的端的技術(shù)可以方便用戶從數(shù)據(jù)源中抽取出所需的數(shù)據(jù),經(jīng)過(guò)數(shù)據(jù)清洗,按照預(yù)先定義的格式,加載到目的數(shù)據(jù)庫(kù)中。而后,將存儲(chǔ)至數(shù)據(jù)庫(kù)的數(shù)據(jù)進(jìn)行加工處理后的結(jié)果數(shù)據(jù)存儲(chǔ)至臨時(shí)表中,再?gòu)呐R時(shí)表導(dǎo)出所述數(shù)據(jù)。在這一處理過(guò)程中,數(shù)據(jù)需要經(jīng)過(guò)多次落地,流程冗余。此外文本數(shù)據(jù)需要先導(dǎo)入數(shù)據(jù)庫(kù),導(dǎo)致數(shù)據(jù)庫(kù)資源緊張,當(dāng)數(shù)據(jù)庫(kù)中數(shù)據(jù)量大時(shí)程序的執(zhí)行會(huì)消耗大量資源。因此,現(xiàn)有技術(shù)的文本數(shù)據(jù)處理方法存在資源利用率低、效率低的缺陷。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明實(shí)施例提供了一種海量文本數(shù)據(jù)處理方法及裝置,可以不利用數(shù)據(jù)庫(kù)實(shí)現(xiàn)海量文本數(shù)據(jù)的存儲(chǔ)、處理,提高資源利用率與數(shù)據(jù)處理效率。
為此,本發(fā)明實(shí)施例提供如下技術(shù)方案:
第一方面,本發(fā)明實(shí)施例提供了一種海量文本數(shù)據(jù)處理方法,包括:接收文本數(shù)據(jù);根據(jù)預(yù)先配置的與所述文本數(shù)據(jù)對(duì)應(yīng)的數(shù)據(jù)結(jié)構(gòu)提取文本數(shù)據(jù);將提取的文本數(shù)據(jù)以所述數(shù)據(jù)結(jié)構(gòu)分塊存儲(chǔ)至對(duì)應(yīng)的分區(qū)中;其中,每個(gè)分區(qū)對(duì)應(yīng)一個(gè)或者多個(gè)數(shù)據(jù)塊。
可選地,所述根據(jù)預(yù)先配置的與所述文本數(shù)據(jù)對(duì)應(yīng)的數(shù)據(jù)結(jié)構(gòu)提取文本數(shù)據(jù)包括:獲取與所述文本數(shù)據(jù)對(duì)應(yīng)的配置文件,從所述配置文件中獲取與所述文本數(shù)據(jù)對(duì)應(yīng)的數(shù)據(jù)結(jié)構(gòu);根據(jù)所述數(shù)據(jù)結(jié)構(gòu)信息從所述文本數(shù)據(jù)中提取與所述數(shù)據(jù)結(jié)構(gòu)匹配的文本數(shù)據(jù)。
可選地,所述將提取的文本數(shù)據(jù)以所述數(shù)據(jù)結(jié)構(gòu)分塊存儲(chǔ)至對(duì)應(yīng)的分區(qū)中包括:獲取與所述文本數(shù)據(jù)對(duì)應(yīng)的分區(qū)信息;根據(jù)所述分區(qū)信息將提取的所述文本數(shù)據(jù)以所述數(shù)據(jù)結(jié)構(gòu)存儲(chǔ)至對(duì)應(yīng)的分區(qū)中。
可選地,所述方法還包括:建立數(shù)據(jù)索引,所述數(shù)據(jù)索引保存有數(shù)據(jù)塊與存儲(chǔ)地址的對(duì)應(yīng)關(guān)系。
可選地,所述方法還包括:響應(yīng)于數(shù)據(jù)查詢請(qǐng)求,根據(jù)所述數(shù)據(jù)索引保存的數(shù)據(jù)庫(kù)與存儲(chǔ)地址的對(duì)應(yīng)關(guān)系,獲取與所述數(shù)據(jù)查詢請(qǐng)求對(duì)應(yīng)的數(shù)據(jù)。
可選地,所述方法還包括:根據(jù)預(yù)先設(shè)定的輸出條件,將存儲(chǔ)在所述分區(qū)中的文本數(shù)據(jù)輸出到指定文件中。
可選地,所述方法還包括:針對(duì)具有同一數(shù)據(jù)結(jié)構(gòu)的數(shù)據(jù)塊進(jìn)行排序處理,獲取排序后的文本數(shù)據(jù)。
第一方面,本發(fā)明實(shí)施例提供了一種海量文本數(shù)據(jù)處理裝置,包括:接收模塊,用于接收文本數(shù)據(jù);提取模塊,用于根據(jù)預(yù)先配置的與所述文本數(shù)據(jù)對(duì)應(yīng)的數(shù)據(jù)結(jié)構(gòu)提取文本數(shù)據(jù);存儲(chǔ)模塊,用于將提取的文本數(shù)據(jù)以所述數(shù)據(jù)結(jié)構(gòu)分塊存儲(chǔ)至對(duì)應(yīng)的分區(qū)中;其中,每個(gè)分區(qū)對(duì)應(yīng)一個(gè)或者多個(gè)數(shù)據(jù)塊。
可選地,所述提取模塊具體用于:獲取與所述文本數(shù)據(jù)對(duì)應(yīng)的配置文件,從所述配置文件中獲取與所述文本數(shù)據(jù)對(duì)應(yīng)的數(shù)據(jù)結(jié)構(gòu);根據(jù)所述數(shù)據(jù)結(jié)構(gòu)信息從所述文本數(shù)據(jù)中提取與所述數(shù)據(jù)結(jié)構(gòu)匹配的文本數(shù)據(jù)。
可選地,所述存儲(chǔ)模塊具體用于:獲取與所述文本數(shù)據(jù)對(duì)應(yīng)的分區(qū)信息;根據(jù)所述分區(qū)信息將提取的所述文本數(shù)據(jù)以所述數(shù)據(jù)結(jié)構(gòu)存儲(chǔ)至對(duì)應(yīng)的分區(qū)中。
可選地,所述裝置還包括:索引建立模塊,用于建立數(shù)據(jù)索引,所述數(shù)據(jù)索引保存有數(shù)據(jù)塊與存儲(chǔ)地址的對(duì)應(yīng)關(guān)系。
可選地,所述裝置還包括:查詢模塊,用于響應(yīng)于數(shù)據(jù)查詢請(qǐng)求,根據(jù)所述數(shù)據(jù)索引保存的數(shù)據(jù)庫(kù)與存儲(chǔ)地址的對(duì)應(yīng)關(guān)系,獲取與所述數(shù)據(jù)查詢請(qǐng)求對(duì)應(yīng)的數(shù)據(jù)。
可選地,所述裝置還包括:輸出模塊,用于根據(jù)預(yù)先設(shè)定的輸出條件,將存儲(chǔ)在所述分區(qū)中的文本數(shù)據(jù)輸出到指定文件中。
可選地,所述裝置還包括:
排序模塊,用于針對(duì)具有同一數(shù)據(jù)結(jié)構(gòu)的數(shù)據(jù)塊進(jìn)行排序處理,獲取排序后的文本數(shù)據(jù).
本發(fā)明實(shí)施例提供海量文本數(shù)據(jù)處理方法及裝置,可以根據(jù)預(yù)先配置的、與接收的文本數(shù)據(jù)對(duì)應(yīng)的數(shù)據(jù)結(jié)構(gòu)提取文本數(shù)據(jù),并將提取的文本數(shù)據(jù)以所述數(shù)據(jù)結(jié)構(gòu)分塊存儲(chǔ)至對(duì)應(yīng)的分區(qū)中。由此,不利用數(shù)據(jù)庫(kù)也可實(shí)現(xiàn)海量文本數(shù)據(jù)的存儲(chǔ)、處理,提高資源利用率與數(shù)據(jù)處理效率。
附圖說(shuō)明
為了更清楚地說(shuō)明本發(fā)明實(shí)施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對(duì)實(shí)施例或現(xiàn)有技術(shù)描述中所需要使用的附圖作簡(jiǎn)單地介紹,顯而易見(jiàn)地,下面描述中的附圖僅僅是本發(fā)明中記載的一些實(shí)施例,對(duì)于本領(lǐng)域普通技術(shù)人員來(lái)講,在不付出創(chuàng)造性勞動(dòng)的前提下,還可以根據(jù)這些附圖獲得其他的附圖。
圖1為本發(fā)明一實(shí)施例提供的海量文本數(shù)據(jù)處理方法流程圖;
圖2為本發(fā)明實(shí)施例一個(gè)應(yīng)用場(chǎng)景示意圖;
圖3為本發(fā)明另一實(shí)施例提供的海量文本數(shù)據(jù)處理方法流程圖;
圖4為本發(fā)明實(shí)施例對(duì)文本數(shù)據(jù)處理的示意圖;
圖5為本發(fā)明實(shí)施例分區(qū)存儲(chǔ)示意圖;
圖6為本發(fā)明實(shí)施例數(shù)據(jù)排序示意圖;
圖7為本發(fā)明實(shí)施例數(shù)據(jù)索引示意圖;
圖8為本發(fā)明一實(shí)施例提供的海量文本數(shù)據(jù)處理裝置示意圖。
具體實(shí)施方式
本發(fā)明實(shí)施例提供了一種海量文本數(shù)據(jù)處理方法及裝置,可以不利用數(shù)據(jù)庫(kù)實(shí)現(xiàn)海量文本數(shù)據(jù)的存儲(chǔ)、處理,提高資源利用率與數(shù)據(jù)處理效率。
為了使本技術(shù)領(lǐng)域的人員更好地理解本發(fā)明中的技術(shù)方案,下面將結(jié)合本發(fā)明實(shí)施例中的附圖,對(duì)本發(fā)明實(shí)施例中的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,所描述的實(shí)施例僅僅是本發(fā)明一部分實(shí)施例,而不是全部的實(shí)施例?;诒景l(fā)明中的實(shí)施例,本領(lǐng)域普通技術(shù)人員在沒(méi)有做出創(chuàng)造性勞動(dòng)前提下所獲得的所有其他實(shí)施例,都應(yīng)當(dāng)屬于本發(fā)明保護(hù)的范圍。
下面將結(jié)合附圖1至附圖7對(duì)本發(fā)明示例性實(shí)施例示出的海量文本數(shù)據(jù)處理方法進(jìn)行介紹。
參見(jiàn)圖1,為本發(fā)明一實(shí)施例提供的海量文本數(shù)據(jù)處理方法流程圖。如圖1所示,可以包括:
S101,接收文本數(shù)據(jù)。
接收數(shù)據(jù)發(fā)送端發(fā)送的文本數(shù)據(jù)。所述文本數(shù)據(jù)可以是壓縮或者非壓縮的結(jié)構(gòu)化文件。若所述文本數(shù)據(jù)時(shí)壓縮的結(jié)構(gòu)化文件,可以先對(duì)所述文本數(shù)據(jù)進(jìn)行解壓和/或解密處理。
S102,根據(jù)預(yù)先配置的與所述文本數(shù)據(jù)對(duì)應(yīng)的數(shù)據(jù)結(jié)構(gòu)提取文本數(shù)據(jù)。
在一種可能的實(shí)現(xiàn)方式中,所述根據(jù)預(yù)先配置的與所述文本數(shù)據(jù)對(duì)應(yīng)的數(shù)據(jù)結(jié)構(gòu)提取文本數(shù)據(jù)包括:獲取與所述文本數(shù)據(jù)對(duì)應(yīng)的配置文件,從所述配置文件中獲取與所述文本數(shù)據(jù)對(duì)應(yīng)的數(shù)據(jù)結(jié)構(gòu);根據(jù)所述數(shù)據(jù)結(jié)構(gòu)從所述文本數(shù)據(jù)中提取與所述數(shù)據(jù)結(jié)構(gòu)匹配的文本數(shù)據(jù)。
舉例說(shuō)明,由于接收的文本數(shù)據(jù)為結(jié)構(gòu)化數(shù)據(jù),因此可以根據(jù)需求規(guī)則預(yù)先定義存儲(chǔ)所述文本數(shù)據(jù)的數(shù)據(jù)結(jié)構(gòu)。其中,需求規(guī)則可以根據(jù)需要設(shè)定。例如,所述數(shù)據(jù)結(jié)構(gòu)用于描述需要存儲(chǔ)所述文本數(shù)據(jù)的列的名稱、字段類型、數(shù)據(jù)長(zhǎng)度等。為了方便理解,可以關(guān)系數(shù)據(jù)庫(kù)中的數(shù)據(jù)表(以下簡(jiǎn)稱表)來(lái)表示數(shù)據(jù)的數(shù)據(jù)結(jié)構(gòu)。但不同于數(shù)據(jù)庫(kù)中的表,本發(fā)明的“表”對(duì)數(shù)據(jù)沒(méi)有約束,不需要加載至數(shù)據(jù)庫(kù)中。具體實(shí)現(xiàn)時(shí),可以預(yù)先對(duì)要接收的結(jié)構(gòu)化文本數(shù)據(jù)進(jìn)行列定義,例如文本數(shù)據(jù)的每一列對(duì)應(yīng)的字段名稱、表示的含義等。舉例說(shuō)明,可以預(yù)先根據(jù)源文本數(shù)據(jù)的配置信息對(duì)要接收的結(jié)構(gòu)化文本數(shù)據(jù)進(jìn)行列定義。其中,所述配置信息用來(lái)標(biāo)識(shí)源文本數(shù)據(jù)(即接收的文本數(shù)據(jù))中的數(shù)據(jù)字段的,應(yīng)當(dāng)能區(qū)分源文本數(shù)據(jù)中數(shù)據(jù)的位置。為了后續(xù)處理邏輯的使用方便,針對(duì)不同字段定義了列名。之后,可以根據(jù)所述列定義創(chuàng)建表以及相應(yīng)的分區(qū)。需要特別說(shuō)明的是,這里并不是要在數(shù)據(jù)庫(kù)中建立實(shí)際的表和分區(qū),而是需要維護(hù)能夠表示數(shù)據(jù)的數(shù)據(jù)結(jié)構(gòu)以及分塊信息的文件。所述文件可以配置文件的形式而存在。進(jìn)一步的,還可以包括創(chuàng)建的數(shù)據(jù)結(jié)構(gòu)包含的列名稱與文本數(shù)據(jù)列名稱的對(duì)應(yīng)關(guān)系等。在配置好數(shù)據(jù)結(jié)構(gòu)后,即可以按照所述數(shù)據(jù)結(jié)構(gòu)提取文本數(shù)據(jù)相應(yīng)的數(shù)據(jù)。這樣,即可以完成對(duì)接收的文本數(shù)據(jù)的篩選、過(guò)濾操作。
S103,將提取的文本數(shù)據(jù)以所述數(shù)據(jù)結(jié)構(gòu)分塊存儲(chǔ)至對(duì)應(yīng)的分區(qū)中。
具體實(shí)現(xiàn)時(shí),可以獲取與所述文本數(shù)據(jù)對(duì)應(yīng)的分區(qū)信息;根據(jù)所述分區(qū)信息將提取的所述文本數(shù)據(jù)以所述數(shù)據(jù)結(jié)構(gòu)存儲(chǔ)至對(duì)應(yīng)的分區(qū)中。舉例說(shuō)明,所述分區(qū)信息用于描述數(shù)據(jù)的存儲(chǔ)方式,例如將原有大文件分成多個(gè)小文件存儲(chǔ),拆分的方式即為分區(qū)。分區(qū)是為了提取數(shù)據(jù)方便,可以只在指定分區(qū)文件中查詢。為了維護(hù)的方便,分區(qū)可以多層嵌套。舉例說(shuō)明,所述分區(qū)信息可以維護(hù)在所述配置文件中。所述配置文件不僅保存有取與文本數(shù)據(jù)對(duì)應(yīng)的數(shù)據(jù)結(jié)構(gòu),還保存有與所述文本數(shù)據(jù)對(duì)應(yīng)的分區(qū)信息。為了實(shí)現(xiàn)對(duì)文本數(shù)據(jù)的拆分處理,可以將其分成若干個(gè)數(shù)據(jù)塊存儲(chǔ),分區(qū)信息旨在描述如何將文本數(shù)據(jù)劃分為若干個(gè)數(shù)據(jù)塊以及各數(shù)據(jù)塊的存儲(chǔ)位置。其中,每個(gè)數(shù)據(jù)塊對(duì)應(yīng)一個(gè)或多個(gè)分區(qū)。在本發(fā)明中,分區(qū)可以磁盤(pán)中文件的形式體現(xiàn)。例如,對(duì)應(yīng)銀行數(shù)據(jù),可以按照一級(jí)行、二級(jí)行對(duì)數(shù)據(jù)進(jìn)行分區(qū)存儲(chǔ)。例如,每個(gè)分區(qū)對(duì)應(yīng)一個(gè)省行的數(shù)據(jù)。
在利用預(yù)先配置的數(shù)據(jù)結(jié)構(gòu)提取相應(yīng)的文本數(shù)據(jù)后,即可以按照預(yù)先設(shè)置的分區(qū)將提取的所述文本數(shù)據(jù)分塊存儲(chǔ)到各相應(yīng)分區(qū)中。這樣,無(wú)需將數(shù)據(jù)導(dǎo)入數(shù)據(jù)庫(kù),即可以完成對(duì)文本數(shù)據(jù)的接收、篩選、過(guò)濾和存儲(chǔ),降低了資源占用,提高了數(shù)據(jù)處理效率。
在一些實(shí)施方式中,本發(fā)明提供的方法還可以包括:建立數(shù)據(jù)索引,所述數(shù)據(jù)索引保存有數(shù)據(jù)塊與存儲(chǔ)地址的對(duì)應(yīng)關(guān)系。進(jìn)一步地,所述方法還包括:響應(yīng)于數(shù)據(jù)查詢請(qǐng)求,根據(jù)所述數(shù)據(jù)索引保存的數(shù)據(jù)庫(kù)與存儲(chǔ)地址的對(duì)應(yīng)關(guān)系,獲取與所述數(shù)據(jù)查詢請(qǐng)求對(duì)應(yīng)的數(shù)據(jù)。
在一些實(shí)施方式中,本發(fā)明提供的方法還可以包括:根據(jù)預(yù)先設(shè)定的輸出條件,將存儲(chǔ)在所述分區(qū)中的文本數(shù)據(jù)輸出到指定文件中。
在一些實(shí)施方式中,本發(fā)明提供的方法還可以包括:針對(duì)具有同一數(shù)據(jù)結(jié)構(gòu)的數(shù)據(jù)塊進(jìn)行排序處理,獲取排序后的文本數(shù)據(jù)。
參見(jiàn)圖2,為本發(fā)明一個(gè)應(yīng)用場(chǎng)景示意圖。如圖2所示,本發(fā)明公開(kāi)了一種海量文本數(shù)據(jù)處理方法和裝置,可以采用文本方式直接處理數(shù)據(jù),無(wú)需將數(shù)據(jù)導(dǎo)入數(shù)據(jù)庫(kù)。具體實(shí)現(xiàn)時(shí),可以將接收到的源數(shù)據(jù)進(jìn)行解壓、清洗處理后按指定需求規(guī)則拆分至磁盤(pán)并建立數(shù)據(jù)索引。為方便指定數(shù)據(jù)的快速提取,分區(qū)以磁盤(pán)中文件形式體現(xiàn),實(shí)現(xiàn)不同類型分區(qū)的疊加以及分區(qū)層級(jí)的擴(kuò)展。在此基礎(chǔ)上可直接使用索引對(duì)數(shù)據(jù)進(jìn)行篩選、導(dǎo)出等操作,不需要將其導(dǎo)入數(shù)據(jù)庫(kù)中加工后再導(dǎo)出,節(jié)省數(shù)據(jù)庫(kù)資源。此外,由于可將數(shù)據(jù)進(jìn)行分塊、排序、拆分存儲(chǔ)至磁盤(pán),實(shí)現(xiàn)了文本數(shù)據(jù)的分塊存儲(chǔ)。在整個(gè)處理過(guò)程中還可以使用并行控制來(lái)提高內(nèi)存與CPU使用率,提高文本處理的效率。
下面結(jié)合附圖2至附圖7對(duì)其中的具體實(shí)現(xiàn)進(jìn)行詳細(xì)說(shuō)明。
參見(jiàn)圖3,為本發(fā)明實(shí)施例一種海量文本數(shù)據(jù)處理流程圖。
S301,對(duì)待接收的結(jié)構(gòu)化文本數(shù)據(jù)進(jìn)行列定義。
在具體實(shí)現(xiàn)時(shí),可以對(duì)將要接收的結(jié)構(gòu)化文本數(shù)據(jù)進(jìn)行列定義,例如列名稱、數(shù)據(jù)類型、長(zhǎng)度等。
S302,接收下傳的壓縮或非壓縮結(jié)構(gòu)化文件。
S303,按照列定義及文件定義建“表”及分區(qū)。
即創(chuàng)建了與所述結(jié)構(gòu)化文件對(duì)應(yīng)的數(shù)據(jù)結(jié)構(gòu)以及分區(qū)存儲(chǔ)信息。
S304,將文件加載緩存至新建的“表”中并維護(hù)數(shù)據(jù)索引。
其中,參見(jiàn)圖4,為對(duì)文本數(shù)據(jù)處理的示意圖。當(dāng)接收到文本數(shù)據(jù)后,判斷是否存在與所述文本數(shù)據(jù)對(duì)應(yīng)的表(用于描述數(shù)據(jù)結(jié)構(gòu))。如果存在,判斷需寫(xiě)入列與指定文件列是否一致。如果一致,判斷寫(xiě)入表列是否存在。如果存在,讀取文本數(shù)據(jù)的行數(shù)據(jù)。為了提高數(shù)據(jù)處理效率,可以先將文本數(shù)據(jù)保存在緩存中。具體處理時(shí),判斷數(shù)據(jù)量是否大于緩存上限。若不大于,則將行數(shù)據(jù)存儲(chǔ)在緩存中,繼續(xù)讀取行數(shù)據(jù)。若大于緩存上限,判斷所述數(shù)據(jù)是否存在對(duì)應(yīng)的分區(qū),如果存在,則將數(shù)據(jù)存儲(chǔ)在對(duì)應(yīng)的分區(qū)中。如不存在,則將數(shù)據(jù)輸出到指定塊中。直到所有數(shù)據(jù)讀取完成。而后,更新表的索引信息,即更新數(shù)據(jù)索引。具體實(shí)現(xiàn)時(shí),表快即每個(gè)數(shù)據(jù)塊會(huì)根據(jù)分區(qū)加載至TMP_PATH中,在此過(guò)程在清除掉不符合要求的數(shù)據(jù),對(duì)應(yīng)路徑為:${TABLE_PATH}/${表名}/TMP。當(dāng)全表加載完成再輸出到塊目錄中,對(duì)應(yīng)路徑為:${TABLE_PATH}/${表名}/BLOCK,如果此前表已有過(guò)加載則合并。需要說(shuō)明的是,表加載中如果用戶在建表時(shí)給定分區(qū)實(shí)現(xiàn),則根據(jù)分區(qū)實(shí)現(xiàn)來(lái)分塊,并將分塊信息寫(xiě)入表索引信息中,需要注意的是表分區(qū)實(shí)現(xiàn)對(duì)于已加載過(guò)的表無(wú)法再次給定。
如圖5所示,為分區(qū)存儲(chǔ)示意圖。例如,對(duì)應(yīng)給定表T(對(duì)應(yīng)一種數(shù)據(jù)結(jié)構(gòu)),包含列A、列B、列C,可以根據(jù)列A對(duì)表T進(jìn)行分區(qū)。例如,列A分為3個(gè)數(shù)據(jù)塊(BLOCK)存儲(chǔ),例如A1、A2、A3。如圖4所示,3個(gè)數(shù)據(jù)塊分別是A1B1C1數(shù)據(jù)塊、A2B2C2數(shù)據(jù)塊、A3B3C3數(shù)據(jù)塊。其中,${ROOT_PATH}/TABLES/T/BLOCKS用于表明存儲(chǔ)路徑。
S305,對(duì)數(shù)據(jù)進(jìn)行排序。
如圖6所示,為數(shù)據(jù)排序示意圖。具體實(shí)現(xiàn)時(shí),可以按照某一排序列對(duì)各數(shù)據(jù)塊進(jìn)行排序,然后更新數(shù)據(jù)索引信息。需要說(shuō)明的是,表排序是針對(duì)表塊排序,約定對(duì)大表采用分區(qū)處理,則表中每塊數(shù)據(jù)量均可放入內(nèi)存,所以排序使用內(nèi)部排序,堆排序較為穩(wěn)定,故使用堆排序的方式。其中,排序索引文件將存放在${SORT_INDEX_PATH}/${表名}/INDEX中,該索引對(duì)每行記錄都將存放長(zhǎng)度為60的索引寫(xiě)入,在一行中寫(xiě)入具體如下:LPAD(${列值},20,""))+LPAD(${行起始位置},20,""))+LPAD(${行長(zhǎng)},20,""))。對(duì)于排序后的數(shù)據(jù)塊文件將存放于${SORT_INDEX_PATH}/${表名}/BLOCK中。需要注意的是,如果已排序的表再次加載則會(huì)重新觸發(fā)該排序過(guò)程。
參見(jiàn)圖7,為數(shù)據(jù)索引示意圖。在本發(fā)明中,可以建立數(shù)據(jù)索引,所述數(shù)據(jù)索引保存有數(shù)據(jù)塊與存儲(chǔ)地址的對(duì)應(yīng)關(guān)系。如圖7所示,INDEX即為數(shù)據(jù)索引,保存了數(shù)據(jù)塊(BLOCK)與各存儲(chǔ)地址的對(duì)應(yīng)關(guān)系。其中,表T為具有同一數(shù)據(jù)結(jié)構(gòu)的全部文本數(shù)據(jù),將其拆分為兩個(gè)數(shù)據(jù)塊分別存儲(chǔ)。其中,數(shù)據(jù)塊1包含的數(shù)據(jù){3│B1│C1,1│B1│C2,2│B1│C3},數(shù)據(jù)塊2包含的數(shù)據(jù)為{3│B2│C1,1│B2│C2,2│B2│C3}。數(shù)據(jù)索引(INDEX)記錄了各數(shù)據(jù)塊與存儲(chǔ)地址的對(duì)應(yīng)關(guān)系,如圖所示:BLOCK:110X2XY3IJ,以及,BLOCK:210X2XY3IJ均用于表示這種對(duì)于關(guān)系。其中,分區(qū)數(shù)據(jù)塊BlOCKS包含了兩個(gè)數(shù)據(jù)塊,圖7所示的是按照第一列對(duì)數(shù)據(jù)塊進(jìn)行排序后的結(jié)果,即數(shù)據(jù)塊1包含的數(shù)據(jù)排序后為{1│B1│C2,2│B1│C3,3│B1│C1},數(shù)據(jù)塊2包含的數(shù)據(jù)排序后為{1│B2│C2,2│B2│C3,3│B2│C1}。進(jìn)一步地,所述方法還包括:響應(yīng)于數(shù)據(jù)查詢請(qǐng)求,根據(jù)所述數(shù)據(jù)索引保存的數(shù)據(jù)庫(kù)與存儲(chǔ)地址的對(duì)應(yīng)關(guān)系,獲取與所述數(shù)據(jù)查詢請(qǐng)求對(duì)應(yīng)的數(shù)據(jù)。
S306,根據(jù)預(yù)先設(shè)定的輸出條件,將存儲(chǔ)在所述分區(qū)中的文本數(shù)據(jù)輸出到指定文件中。
其中,所述預(yù)先設(shè)定的輸出條件可以包括數(shù)據(jù)過(guò)濾條件、關(guān)聯(lián)條件、輸出文本分隔符、字段格式等條件。
需要說(shuō)明的是,本發(fā)明實(shí)施例可以應(yīng)用于各種數(shù)據(jù)處理系統(tǒng)中,以中行國(guó)家外匯管理局?jǐn)?shù)據(jù)報(bào)送系統(tǒng)為例,數(shù)據(jù)收集與拆分可以應(yīng)用本發(fā)明的方法。本發(fā)明可以直接將源系統(tǒng)文件根據(jù)配置進(jìn)行歸依、按照指定的二級(jí)行方式進(jìn)行分塊拆分存儲(chǔ),并分別直接按條件導(dǎo)出至指定文件中。節(jié)約數(shù)據(jù)文件庫(kù)執(zhí)行sql再導(dǎo)出文件的時(shí)間。若使用本發(fā)明的方法,處理1616個(gè)文件,解壓后文件容量為126G,用時(shí)約50分鐘。而應(yīng)用現(xiàn)有技術(shù)的方法,同樣的處理過(guò)程使用數(shù)據(jù)庫(kù)約需要90分鐘。因此,本發(fā)明在處理海量文本數(shù)據(jù)時(shí),極大的節(jié)約了處理時(shí)間,提高了處理效率。
參見(jiàn)圖8,為本發(fā)明一實(shí)施例提供的海量文本數(shù)據(jù)處理裝置示意圖。
一種海量文本數(shù)據(jù)處理裝置800,包括:
接收模塊801,用于接收文本數(shù)據(jù);
提取模塊802,用于根據(jù)預(yù)先配置的與所述文本數(shù)據(jù)對(duì)應(yīng)的數(shù)據(jù)結(jié)構(gòu)提取文本數(shù)據(jù);
存儲(chǔ)模塊803,用于將提取的文本數(shù)據(jù)以所述數(shù)據(jù)結(jié)構(gòu)分塊存儲(chǔ)至對(duì)應(yīng)的分區(qū)中;其中,每個(gè)分區(qū)對(duì)應(yīng)一個(gè)數(shù)據(jù)塊。
在一些實(shí)施方式中,所述提取模塊具體用于:
獲取與所述文本數(shù)據(jù)對(duì)應(yīng)的配置文件,從所述配置文件中獲取與所述文本數(shù)據(jù)對(duì)應(yīng)的數(shù)據(jù)結(jié)構(gòu);根據(jù)所述數(shù)據(jù)結(jié)構(gòu)信息從所述文本數(shù)據(jù)中提取與所述數(shù)據(jù)結(jié)構(gòu)匹配的文本數(shù)據(jù)。
在一些實(shí)施方式中,所述存儲(chǔ)模塊具體用于:
獲取與所述文本數(shù)據(jù)對(duì)應(yīng)的分區(qū)信息;根據(jù)所述分區(qū)信息將提取的所述文本數(shù)據(jù)以所述數(shù)據(jù)結(jié)構(gòu)存儲(chǔ)至對(duì)應(yīng)的分區(qū)中。
在一些實(shí)施方式中,所述裝置還包括:
索引建立模塊,用于建立數(shù)據(jù)索引,所述數(shù)據(jù)索引保存有數(shù)據(jù)塊與存儲(chǔ)地址的對(duì)應(yīng)關(guān)系。
在一些實(shí)施方式中,所述裝置還包括:
查詢模塊,用于響應(yīng)于數(shù)據(jù)查詢請(qǐng)求,根據(jù)所述數(shù)據(jù)索引保存的數(shù)據(jù)庫(kù)與存儲(chǔ)地址的對(duì)應(yīng)關(guān)系,獲取與所述數(shù)據(jù)查詢請(qǐng)求對(duì)應(yīng)的數(shù)據(jù)。
在一些實(shí)施方式中,所述裝置還包括:
輸出模塊,用于根據(jù)預(yù)先設(shè)定的輸出條件,將存儲(chǔ)在所述分區(qū)中的文本數(shù)據(jù)輸出到指定文件中。
在一些實(shí)施方式中,所述裝置還包括:
排序模塊,用于針對(duì)具有同一數(shù)據(jù)結(jié)構(gòu)的數(shù)據(jù)塊進(jìn)行排序處理,獲取排序后的文本數(shù)據(jù)。
其中,本發(fā)明裝置各單元或模塊的設(shè)置可以參照?qǐng)D1至圖6所示的方法而實(shí)現(xiàn),在此不贅述。
本領(lǐng)域技術(shù)人員在考慮說(shuō)明書(shū)及實(shí)踐這里公開(kāi)的發(fā)明后,將容易想到本發(fā)明的其它實(shí)施方案。本發(fā)明旨在涵蓋本發(fā)明的任何變型、用途或者適應(yīng)性變化,這些變型、用途或者適應(yīng)性變化遵循本發(fā)明的一般性原理并包括本公開(kāi)未公開(kāi)的本技術(shù)領(lǐng)域中的公知常識(shí)或慣用技術(shù)手段。說(shuō)明書(shū)和實(shí)施例僅被視為示例性的,本發(fā)明的真正范圍和精神由下面的權(quán)利要求指出。
應(yīng)當(dāng)理解的是,本發(fā)明并不局限于上面已經(jīng)描述并在附圖中示出的精確結(jié)構(gòu),并且可以在不脫離其范圍進(jìn)行各種修改和改變。本發(fā)明的范圍僅由所附的權(quán)利要求來(lái)限制
以上所述僅為本發(fā)明的較佳實(shí)施例,并不用以限制本發(fā)明,凡在本發(fā)明的精神和原則之內(nèi),所作的任何修改、等同替換、改進(jìn)等,均應(yīng)包含在本發(fā)明的保護(hù)范圍之內(nèi)。
需要說(shuō)明的是,在本文中,諸如第一和第二等之類的關(guān)系術(shù)語(yǔ)僅僅用來(lái)將一個(gè)實(shí)體或者操作與另一個(gè)實(shí)體或操作區(qū)分開(kāi)來(lái),而不一定要求或者暗示這些實(shí)體或操作之間存在任何這種實(shí)際的關(guān)系或者順序。而且,術(shù)語(yǔ)“包括”、“包含”或者其任何其他變體意在涵蓋非排他性的包含,從而使得包括一系列要素的過(guò)程、方法、物品或者設(shè)備不僅包括那些要素,而且還包括沒(méi)有明確列出的其他要素,或者是還包括為這種過(guò)程、方法、物品或者設(shè)備所固有的要素。在沒(méi)有更多限制的情況下,由語(yǔ)句“包括一個(gè)……”限定的要素,并不排除在包括所述要素的過(guò)程、方法、物品或者設(shè)備中還存在另外的相同要素。本發(fā)明可以在由計(jì)算機(jī)執(zhí)行的計(jì)算機(jī)可執(zhí)行指令的一般上下文中描述,例如程序模塊。一般地,程序模塊包括執(zhí)行特定任務(wù)或?qū)崿F(xiàn)特定抽象數(shù)據(jù)類型的例程、程序、對(duì)象、組件、數(shù)據(jù)結(jié)構(gòu)等等。也可以在分布式計(jì)算環(huán)境中實(shí)踐本發(fā)明,在這些分布式計(jì)算環(huán)境中,由通過(guò)通信網(wǎng)絡(luò)而被連接的遠(yuǎn)程處理設(shè)備來(lái)執(zhí)行任務(wù)。在分布式計(jì)算環(huán)境中,程序模塊可以位于包括存儲(chǔ)設(shè)備在內(nèi)的本地和遠(yuǎn)程計(jì)算機(jī)存儲(chǔ)介質(zhì)中。
本說(shuō)明書(shū)中的各個(gè)實(shí)施例均采用遞進(jìn)的方式描述,各個(gè)實(shí)施例之間相同相似的部分互相參見(jiàn)即可,每個(gè)實(shí)施例重點(diǎn)說(shuō)明的都是與其他實(shí)施例的不同之處。尤其,對(duì)于裝置實(shí)施例而言,由于其基本相似于方法實(shí)施例,所以描述得比較簡(jiǎn)單,相關(guān)之處參見(jiàn)方法實(shí)施例的部分說(shuō)明即可。以上所描述的裝置實(shí)施例僅僅是示意性的,其中所述作為分離部件說(shuō)明的單元可以是或者也可以不是物理上分開(kāi)的,作為單元顯示的部件可以是或者也可以不是物理單元,即可以位于一個(gè)地方,或者也可以分布到多個(gè)網(wǎng)絡(luò)單元上。可以根據(jù)實(shí)際的需要選擇其中的部分或者全部模塊來(lái)實(shí)現(xiàn)本實(shí)施例方案的目的。本領(lǐng)域普通技術(shù)人員在不付出創(chuàng)造性勞動(dòng)的情況下,即可以理解并實(shí)施。以上所述僅是本發(fā)明的具體實(shí)施方式,應(yīng)當(dāng)指出,對(duì)于本技術(shù)領(lǐng)域的普通技術(shù)人員來(lái)說(shuō),在不脫離本發(fā)明原理的前提下,還可以做出若干改進(jìn)和潤(rùn)飾,這些改進(jìn)和潤(rùn)飾也應(yīng)視為本發(fā)明的保護(hù)范圍。