本發(fā)明涉及大數(shù)據(jù)技術(shù)領(lǐng)域,尤其涉及一種大數(shù)據(jù)檢索方法和裝置。
背景技術(shù):
現(xiàn)有的數(shù)據(jù)檢索方法是:客戶端發(fā)送請求到數(shù)據(jù)服務(wù)器,數(shù)據(jù)服務(wù)器檢索出符合條件的數(shù)據(jù)集返回給客戶端;客戶端根據(jù)獲取的數(shù)據(jù)集進(jìn)行處理,統(tǒng)計數(shù)據(jù)集的一些相關(guān)信息,然后在前臺界面分頁展示給用戶。這種方法易管理、易維護(hù)、技術(shù)體系成熟,但缺點是:如果檢索的數(shù)據(jù)集過大時,如超過10萬條數(shù)據(jù)記錄,那么,在給用戶進(jìn)行檢索展示時,數(shù)據(jù)服務(wù)器端的檢索時長就會過長,且網(wǎng)絡(luò)數(shù)據(jù)傳輸量過大,會導(dǎo)致給用戶的展示延時較大,用戶需等待較長時間才能看到檢索結(jié)果。
為解決檢索數(shù)據(jù)量大、展示延時長的問題,可采用分頁展示的方式,現(xiàn)有的分頁展示方法是:客戶端在發(fā)送請求到數(shù)據(jù)服務(wù)器時,采用頁碼索引的方式,每次只發(fā)送需要檢索的頁碼給數(shù)據(jù)服務(wù)器;數(shù)據(jù)服務(wù)器根據(jù)特定算法每次根據(jù)頁碼范圍進(jìn)行檢索,將檢索的結(jié)果集返回給客戶端。這種方法通過結(jié)合緩存技術(shù),可以適用于前臺無需展示檢索結(jié)果集的統(tǒng)計信息、只展示明細(xì)的場景;但對于需要同時展示明細(xì)及數(shù)據(jù)集統(tǒng)計信息的場景,仍無法使用此種方法。
另外,現(xiàn)有的數(shù)據(jù)檢索與分頁展示方法都是在數(shù)據(jù)集檢索完畢后做處理展示,或者采用多次檢索通過頁碼索引的方式完成數(shù)據(jù)檢索與分頁展示,都是采用同步檢索數(shù)據(jù)展示的方法。
對于先進(jìn)行數(shù)據(jù)查詢,再在客戶端進(jìn)行分頁處理的方法,該方法在對大數(shù)據(jù)進(jìn)行實時檢索時,如果檢索得到的結(jié)果集過大,會造成檢索時長過長,且網(wǎng)絡(luò)數(shù)據(jù)傳輸量過大,會導(dǎo)致給用戶的展示延時較大,用戶需等待較長時間才能 看到檢索結(jié)果。例如:用戶按月檢索通用分組無線服務(wù)技術(shù)(GPRS,General Packet Radio Service)流量話單,如果用戶有超過10萬條話單需要展示,檢索響應(yīng)時間會很長。
對于通過頁碼索引的方式,該方式由于每次檢索時,無法檢索出全量數(shù)據(jù)集,故無法獲取數(shù)據(jù)集的某些統(tǒng)計信息;以GPRS話單為例,如果采用此種方式,每次檢索時無法獲取用戶GPRS的總條數(shù)、總流量、總費用等統(tǒng)計信息;如果前臺界面要求同步展示這些信息的檢索,此種方法存在很大的缺陷無法適用;即使采用緩存技術(shù)將全量結(jié)果檢索出來后進(jìn)行緩存,也將面臨如數(shù)據(jù)集過大、第一次檢索響應(yīng)時長過長的問題。
如何克服在大數(shù)據(jù)量檢索中,檢索響應(yīng)時間長和檢索結(jié)果無統(tǒng)計信息等問題,亟待解決。
技術(shù)實現(xiàn)要素:
有鑒于此,本發(fā)明實施例期望提供一種大數(shù)據(jù)檢索方法和裝置,能降低數(shù)據(jù)服務(wù)器的訪問量,并提升用戶查詢與分頁展示的速度。
為達(dá)到上述目的,本發(fā)明的技術(shù)方案是這樣實現(xiàn)的:
本發(fā)明實施例提供了一種大數(shù)據(jù)檢索的方法,包括:按數(shù)據(jù)類別統(tǒng)計數(shù)據(jù)庫數(shù)據(jù)對應(yīng)的數(shù)據(jù)總表的數(shù)據(jù),根據(jù)統(tǒng)計結(jié)果建立索引統(tǒng)計表;所述方法還包括:
建立頁碼數(shù)據(jù)緩存器鏈表,在頁碼數(shù)據(jù)緩存器鏈表中指定頁碼數(shù)據(jù)緩存器作為前置頁碼數(shù)據(jù)緩存器;
根據(jù)檢索條件,從所述索引統(tǒng)計表中查詢出符合所述檢索條件的統(tǒng)計信息;
將所述數(shù)據(jù)總表中符合所述檢索條件的數(shù)據(jù)填充到頁碼數(shù)據(jù)緩存器鏈表;
所述前置頁碼數(shù)據(jù)緩存器空間填充滿時,返回所述前置頁碼數(shù)據(jù)緩存器的數(shù)據(jù)和所述統(tǒng)計信息到檢索客戶端。
上述方案中,將所述數(shù)據(jù)總表中符合所述檢索條件的數(shù)據(jù)填充到頁碼數(shù)據(jù)緩存器鏈表,包括:
根據(jù)檢索條件采用順序查詢和逆序查詢兩個進(jìn)程對數(shù)據(jù)總表進(jìn)行檢索;
所述順序查詢檢索到的數(shù)據(jù)按順序填充到頁碼數(shù)據(jù)緩存器鏈表,所述逆序查詢檢索到的數(shù)據(jù)按逆序填充到頁碼數(shù)據(jù)緩存器鏈表。
上述方案中,所述頁碼數(shù)據(jù)緩存器鏈表為雙向鏈表結(jié)構(gòu),包含一個以上的頁碼數(shù)據(jù)緩存器;
所述前置頁碼數(shù)據(jù)緩存器為填充所述頁碼數(shù)據(jù)緩存器鏈表時首先填充的頁碼數(shù)據(jù)緩存器;
所述前置頁碼數(shù)據(jù)緩存器的頁碼數(shù)據(jù)緩存器數(shù)量根據(jù)需求預(yù)先設(shè)定,包含一個以上的頁碼數(shù)據(jù)緩存器。
上述方案中,所述方法還包括:
當(dāng)需求返回頁的頁碼對應(yīng)的頁碼數(shù)據(jù)緩存器未填滿時,則等待所述頁碼數(shù)據(jù)緩存器被填滿,再返回所述對應(yīng)的頁碼數(shù)據(jù)緩存器的數(shù)據(jù)到檢索客戶端。
上述方案中,所述方法還包括:
更新所述數(shù)據(jù)總表時同步更新所述索引統(tǒng)計表;
如果所述索引統(tǒng)計表為分期建立,則對往期索引統(tǒng)計表進(jìn)行合并處理。
上述方案中,所述方法還包括:
如果頁碼數(shù)據(jù)緩存器鏈表建立的時間超過預(yù)設(shè)的時間設(shè)定,則回收頁碼數(shù)據(jù)緩存器鏈表占用的內(nèi)存。
本發(fā)明實施例還提供了一種大數(shù)據(jù)檢索的裝置,包括:數(shù)據(jù)存儲模塊、檢索模塊、頁碼數(shù)據(jù)緩存模塊;其中,
所述數(shù)據(jù)存儲模塊,用于建立并更新數(shù)據(jù)庫數(shù)據(jù)對應(yīng)的數(shù)據(jù)總表,統(tǒng)計所述數(shù)據(jù)總表的數(shù)據(jù),按類別建立索引統(tǒng)計表;
所述頁碼數(shù)據(jù)緩存模塊,用于建立頁碼數(shù)據(jù)緩存器鏈表,并指定其中一個以上頁碼數(shù)據(jù)緩存器被指定為前置頁碼數(shù)據(jù)緩存器;
所述檢索模塊,用于從所述索引統(tǒng)計表中查詢出符合檢索條件的統(tǒng)計信息;檢索所述數(shù)據(jù)總表,并將檢索結(jié)果填充到所述頁碼數(shù)據(jù)緩存器中;確定前置頁碼數(shù)據(jù)緩存器空間填充滿,并返回所述前置頁碼數(shù)據(jù)緩存器的內(nèi)容和所述統(tǒng)計 信息到客戶端。
上述方案中,所述檢索模塊,具體用于,
根據(jù)檢索條件采用順序查詢和逆序查詢兩個進(jìn)程對數(shù)據(jù)總表進(jìn)行檢索;
所述順序查詢檢索到的數(shù)據(jù)按順序填充到頁碼數(shù)據(jù)緩存器鏈表,所述逆序查詢檢索到的數(shù)據(jù)按逆序填充到頁碼數(shù)據(jù)緩存器鏈表;
當(dāng)需求返回頁的頁碼對應(yīng)的頁碼數(shù)據(jù)緩存器未填滿時,等待所述頁碼數(shù)據(jù)緩存器被填滿,再返回所述對應(yīng)的頁碼數(shù)據(jù)緩存器的數(shù)據(jù)到檢索客戶端。
上述方案中,所述頁碼數(shù)據(jù)緩存器鏈表為雙向鏈表結(jié)構(gòu),包含一個以上的頁碼數(shù)據(jù)緩存器;
所述前置頁碼數(shù)據(jù)緩存器為填充所述頁碼數(shù)據(jù)緩存器時鏈表首先填充的頁碼數(shù)據(jù)緩存器;
所述前置頁碼數(shù)據(jù)緩存器的頁碼數(shù)據(jù)緩存器數(shù)量根據(jù)需求預(yù)先設(shè)定。
上述方案中,所述數(shù)據(jù)存儲模塊,還用于更新所述數(shù)據(jù)總表時同步更新所述索引統(tǒng)計表;
所述裝置還包括:索引統(tǒng)計表同步模塊:用于對于分期建立所述索引統(tǒng)計表,對往期索引統(tǒng)計表進(jìn)行合并處理;
頁碼數(shù)據(jù)緩存器回收模塊,用于當(dāng)建立的頁碼數(shù)據(jù)緩存器鏈表超過預(yù)設(shè)的失效時間設(shè)定,則回收頁碼數(shù)據(jù)緩存器鏈表占用的內(nèi)存。
本發(fā)明實施例所提供的大數(shù)據(jù)檢索方法和裝置,按數(shù)據(jù)類別統(tǒng)計數(shù)據(jù)庫數(shù)據(jù)對應(yīng)的數(shù)據(jù)總表的數(shù)據(jù),根據(jù)統(tǒng)計結(jié)果建立索引統(tǒng)計表;建立頁碼數(shù)據(jù)緩存器鏈表,在頁碼數(shù)據(jù)緩存器鏈表中指定頁碼數(shù)據(jù)緩存器作為前置頁碼數(shù)據(jù)緩存器;根據(jù)檢索條件,從所述索引統(tǒng)計表中查詢出符合所述檢索條件的統(tǒng)計信息;將所述數(shù)據(jù)總表中符合所述檢索條件的數(shù)據(jù)填充到頁碼數(shù)據(jù)緩存器鏈表;所述前置頁碼數(shù)據(jù)緩存器空間填充滿時,返回所述前置頁碼數(shù)據(jù)緩存器的數(shù)據(jù)和所述統(tǒng)計信息到檢索客戶端;由此,只需檢索出前幾頁的數(shù)據(jù)就可以給用戶進(jìn)行展示,用戶根據(jù)需要再進(jìn)行頁選擇展示,降低了數(shù)據(jù)服務(wù)器的訪問量,并提升了用戶查詢與分頁展示的速度。
附圖說明
圖1為本發(fā)明實施例一種大數(shù)據(jù)檢索方法的流程示意圖;
圖2為本發(fā)明實施例HBASE數(shù)據(jù)庫大數(shù)據(jù)檢索方法的流程示意圖;
圖3為本發(fā)明實施例頁碼數(shù)據(jù)緩存器雙向鏈表組成結(jié)構(gòu)示意圖;
圖4為本發(fā)明實施例頁碼數(shù)據(jù)緩存器鏈表數(shù)據(jù)填充的流程示意圖;
圖5為本發(fā)明實施例頁碼數(shù)據(jù)緩存器鏈表內(nèi)存回收的流程示意圖;
圖6為本發(fā)明實施例HBASE數(shù)據(jù)庫存儲的流程示意圖;
圖7為本發(fā)明實施例分期索引統(tǒng)計表合并的流程示意圖;
圖8為本發(fā)明實施例一種大數(shù)據(jù)檢索裝置組成結(jié)構(gòu)示意圖。
具體實施方式
本發(fā)明實施例中,按數(shù)據(jù)類別統(tǒng)計數(shù)據(jù)庫數(shù)據(jù)對應(yīng)的數(shù)據(jù)總表的數(shù)據(jù),根據(jù)統(tǒng)計結(jié)果建立索引統(tǒng)計表;建立頁碼數(shù)據(jù)緩存器鏈表,在頁碼數(shù)據(jù)緩存器鏈表中指定頁碼數(shù)據(jù)緩存器作為前置頁碼數(shù)據(jù)緩存器;根據(jù)檢索條件,從所述索引統(tǒng)計表中查詢出符合所述檢索條件的統(tǒng)計信息;將所述數(shù)據(jù)總表中符合所述檢索條件的數(shù)據(jù)填充到頁碼數(shù)據(jù)緩存器鏈表;所述前置頁碼數(shù)據(jù)緩存器空間填充滿時,返回所述前置頁碼數(shù)據(jù)緩存器的數(shù)據(jù)和所述統(tǒng)計信息到檢索客戶端。
下面結(jié)合實施例對本發(fā)明再作進(jìn)一步詳細(xì)的說明。
本發(fā)明實施例提供的大數(shù)據(jù)檢索方法,如圖1所示,包括:
步驟101:按數(shù)據(jù)類別統(tǒng)計數(shù)據(jù)庫數(shù)據(jù)對應(yīng)的數(shù)據(jù)總表的數(shù)據(jù),根據(jù)統(tǒng)計結(jié)果建立索引統(tǒng)計表;
具體的,數(shù)據(jù)庫中的數(shù)據(jù)以表的形式儲存,所述數(shù)據(jù)總表為數(shù)據(jù)庫中所有數(shù)據(jù)的存儲表,存儲海量的相關(guān)信息;根據(jù)數(shù)據(jù)總表中的數(shù)據(jù)類型等統(tǒng)計數(shù)據(jù)總表的統(tǒng)計項信息,并生成索引統(tǒng)計表;本實施例中,所述數(shù)據(jù)庫可以是分布式計算數(shù)據(jù)庫(HBASE,Hadoop database),數(shù)據(jù)總表可以為用戶GPRS清單,如:日期、業(yè)務(wù)類型、計費號碼等;這樣,索引統(tǒng)計表可以針對每個用戶統(tǒng)計GPRS清單的總條數(shù)、總費用、總流量等。針對于電話清單、GPRS清單,為了 便于按月結(jié)算費用,所述索引統(tǒng)計表還可以分期建立,如:按月建立。
這里,本實施例方法還包括:更新所述數(shù)據(jù)總表時,同步更新所述索引統(tǒng)計表;在向數(shù)據(jù)庫中數(shù)據(jù)總表存入清單數(shù)據(jù)時,同時在索引統(tǒng)計表中存入統(tǒng)計項信息,兩個操作同時成功才認(rèn)為數(shù)據(jù)存儲成功。對于分期建立所述索引統(tǒng)計表,對往期索引統(tǒng)計表進(jìn)行合并處理;本實施例中,針對數(shù)據(jù)總表為用戶GPRS清單的情況,可以在賬期切換時,對往期的索引統(tǒng)計表進(jìn)行合并,合并后一個用戶號碼只對應(yīng)一條統(tǒng)計信息,如此,可加快索引統(tǒng)計表的檢索速度。
步驟102:建立頁碼數(shù)據(jù)緩存器鏈表,在頁碼數(shù)據(jù)緩存器鏈表中指定頁碼數(shù)據(jù)緩存器作為前置頁碼數(shù)據(jù)緩存器;
這里,開始檢索時,建立頁碼數(shù)據(jù)緩存器鏈表,頁碼數(shù)據(jù)緩存器鏈表由一個以上的頁碼數(shù)據(jù)緩存器組成,并形成雙向鏈表結(jié)構(gòu),可以分別從所述頁碼數(shù)據(jù)緩存器鏈表兩頭填充;每一個頁碼數(shù)據(jù)緩存器可以用來緩存對應(yīng)的一頁用于返回顯示的檢索結(jié)果內(nèi)容;頁碼數(shù)據(jù)緩存器鏈表實現(xiàn)對數(shù)據(jù)總表檢索出的結(jié)果及數(shù)據(jù)的緩存,供用戶對后續(xù)頁面查詢使用。在頁碼數(shù)據(jù)緩存器鏈表中,可指定一個以上的頁碼數(shù)據(jù)緩存器作為前置頁碼數(shù)據(jù)緩存器;具體指定的數(shù)目根據(jù)用戶需要確定,且每次指定的數(shù)目可變。
步驟103:根據(jù)檢索條件,從所述索引統(tǒng)計表中查詢出符合所述檢索條件的統(tǒng)計信息;
這里,開始檢索時,客戶端將檢索條件發(fā)送至數(shù)據(jù)庫;根據(jù)檢索條件在索引統(tǒng)計表的統(tǒng)計結(jié)果中,將符合所述檢索條件的統(tǒng)計信息提取出來;本實施例中,所述檢索條件可以是特定用戶,這樣,統(tǒng)計信息就可以是特定用戶的GPRS清單的總條數(shù)、總費用、總流量等。
步驟104:將所述數(shù)據(jù)總表中符合所述檢索條件的數(shù)據(jù)填充到頁碼數(shù)據(jù)緩存器鏈表;
這里,可以根據(jù)檢索條件同時采用順序查詢和逆序查詢兩個進(jìn)程對數(shù)據(jù)總表進(jìn)行檢索;所述順序查詢從數(shù)據(jù)總表的表首開始查詢,所述逆序查詢從數(shù)據(jù)總表的表尾開始查詢;如此,可大大提高檢索的速度;本實施例中,可以調(diào)用 兩個查詢程序?qū)η鍐螖?shù)據(jù)總表按HBASE的key-value方式進(jìn)行檢索,一個順序查、一個逆序查;
所述順序查詢檢索到的數(shù)據(jù)按順序填充到頁碼數(shù)據(jù)緩存器鏈表,所述逆序查詢檢索到的數(shù)據(jù)按逆序填充到頁碼數(shù)據(jù)緩存器鏈表;本實施例中,將獲得的檢索結(jié)果不斷填充到頁碼緩沖器鏈表上的頁碼數(shù)據(jù)緩存器中,一個順序填充、一個逆序填充。
這里,步驟103和步驟104沒有先后順序,可以對調(diào),也可以同時進(jìn)行;這樣,可以提高檢索的速度。
步驟105:所述前置頁碼數(shù)據(jù)緩存器空間填充滿時,返回所述前置頁碼數(shù)據(jù)緩存器的數(shù)據(jù)和所述統(tǒng)計信息到檢索客戶端;
這里,所述前置頁碼數(shù)據(jù)緩存器為填充所述頁碼數(shù)據(jù)緩存器鏈表時首先填充的頁碼數(shù)據(jù)緩存器;所述前置頁碼數(shù)據(jù)緩存器中包含的頁碼數(shù)據(jù)緩存器數(shù)量根據(jù)需求預(yù)先設(shè)定,所述前置頁碼數(shù)據(jù)緩存器包含一個以上的頁碼數(shù)據(jù)緩存器;預(yù)先設(shè)定前置頁碼數(shù)據(jù)緩存器中頁碼數(shù)據(jù)緩存器的數(shù)量,在檢索中獲得的檢索結(jié)果會首先填充到前置頁碼數(shù)據(jù)緩存器中;所述統(tǒng)計信息為步驟103中獲取的與所述檢索條件對應(yīng)的索引統(tǒng)計表中的信息;當(dāng)前置頁碼數(shù)據(jù)緩存器被填充滿時,將前置頁碼數(shù)據(jù)緩存器的數(shù)據(jù)和所述統(tǒng)計信息到檢索客戶端,用于對用戶進(jìn)行顯示;此時檢索尚未全部完成,剩余的檢索還在繼續(xù),如此,起到結(jié)果返回和檢索異步并行處理的作用,能及時響應(yīng)檢索客戶端。
本實施例中,可以將前置頁碼數(shù)據(jù)緩存器的數(shù)據(jù)和所述統(tǒng)計信息生成可擴(kuò)展標(biāo)記語言(XML,eXtensible Markup Language)報文,將報文返回客戶端,對客戶端展示程序進(jìn)行響應(yīng);每個頁碼數(shù)據(jù)緩存器可以對應(yīng)一個顯示頁,用于填充一個頁面的檢索結(jié)果,如此,全部檢索沒有完成的情況下,將先期的檢索結(jié)果以及統(tǒng)計信息在最短的時間內(nèi)向用戶展示,大大縮短用戶的等待時間。
本實施例的方法還包括:當(dāng)需求返回頁的頁碼對應(yīng)的頁碼數(shù)據(jù)緩存器未填滿時,則等待所述頁碼數(shù)據(jù)緩存器被填滿,再返回所述對應(yīng)的頁碼數(shù)據(jù)緩存器的數(shù)據(jù)到檢索客戶端;
這里,當(dāng)步驟104中前置頁碼數(shù)據(jù)緩存器空間填充滿,并返回所述前置頁碼數(shù)據(jù)緩存器的數(shù)據(jù)和所述統(tǒng)計信息到檢索客戶端的同時,對完整結(jié)果的檢索仍然在并行進(jìn)行,并不斷填充到空的頁碼數(shù)據(jù)緩存器鏈表中;當(dāng)用戶需要查詢未展示的清單頁時,首先檢查用戶需要查詢的頁面對應(yīng)的頁碼數(shù)據(jù)緩存器是否已填完數(shù)據(jù),如果完成則從相關(guān)頁碼數(shù)據(jù)緩存器中取出數(shù)據(jù)對客戶端進(jìn)行響應(yīng),如果未完成則等待頁碼數(shù)據(jù)緩存器被填充,再返回所述對應(yīng)的頁碼數(shù)據(jù)緩存器的數(shù)據(jù)到檢索客戶端;由于采用了異步并行技術(shù),頁碼數(shù)據(jù)緩存器未填充的概率較低,即使出現(xiàn)頁碼數(shù)據(jù)緩存器未填充的情況,等待未填充頁碼數(shù)據(jù)緩存器填充的時間也遠(yuǎn)遠(yuǎn)小于全量數(shù)據(jù)查詢的時間。
本實施例的方法還包括:如果頁碼數(shù)據(jù)緩存器鏈表建立的時間超過預(yù)設(shè)的時間設(shè)定,則回收頁碼數(shù)據(jù)緩存器鏈表占用的內(nèi)存;
這里,預(yù)先設(shè)計頁碼數(shù)據(jù)緩存器鏈表失效時間,在失效時間到達(dá)時,清理頁碼數(shù)據(jù)緩存器鏈表,釋放相關(guān)的內(nèi)存。
下面結(jié)合具體示例1對本發(fā)明產(chǎn)生的積極效果作進(jìn)一步詳細(xì)的描述;所述示例1為用戶GPRS海量清單實時查詢與分頁展示的設(shè)計。
HBASE數(shù)據(jù)庫設(shè)計如下:
用戶清單索引統(tǒng)計表歷史月HBASE存儲格式結(jié)構(gòu)設(shè)計如下:
RowKey設(shè)計:
MSISDN+日期+業(yè)務(wù)類型
MSISDN:計費號碼
日期:處理時間字段,精確到天
業(yè)務(wù)類型:兩位計費業(yè)務(wù)類型
Column Family設(shè)計:
一個Column Family,三個column。分別為話單總條數(shù)、總流量和總金額。
用戶清單索引統(tǒng)計表當(dāng)前月HBASE存儲格式結(jié)構(gòu)設(shè)計如下:
RowKey設(shè)計
MSISDN+日期+業(yè)務(wù)類型
MSISDN:計費號碼
日期:處理時間字段,精確到天
業(yè)務(wù)類型:兩位計費業(yè)務(wù)類型
Column Family設(shè)計:
一個Column Family,兩個column。分別為流量和金額。
該類表存儲需要在前臺進(jìn)行展示的統(tǒng)計信息,存儲量很小,如用戶GPRS的總流量、總條數(shù)、總金額,對于歷史月的GPRS清單查詢,如果是比當(dāng)期賬期小一月,會在月初由后臺同步程序即圖示的第8步完成統(tǒng)計信息的初始化工作,因為用戶上月的清單已經(jīng)不會再發(fā)生變化,相關(guān)統(tǒng)計信息總額也將是靜態(tài)的,故初始化后,一個用戶對應(yīng)一個總條數(shù)、總流量、總金額;對當(dāng)前月的統(tǒng)計信息,由于其是隨著用戶不斷使用話單而動態(tài)變化的,所以需要在存儲程序進(jìn)行話單實時入庫時,實現(xiàn)在索引表和數(shù)據(jù)總表中的相關(guān)數(shù)據(jù)同步,如前述第6和第7步,當(dāng)前月的索引統(tǒng)計表中一個用戶對應(yīng)多條流量和金額記錄,待賬期切換后,再由第8步的同步初始化程序進(jìn)行處理,變成歷史月統(tǒng)計信息表,屆時一個號碼對應(yīng)一條相關(guān)記錄,查詢效率提升。
用戶數(shù)據(jù)總表HBASE存儲格式結(jié)構(gòu)設(shè)計如下:
RowKey設(shè)計:
MSISDN+日期+業(yè)務(wù)類型
MSISDN:計費號碼
日期:處理時間字段,精確到天
業(yè)務(wù)類型:兩位計費業(yè)務(wù)類型
Column Family設(shè)計:
一個Column Family,多個column。單條話單整體存入column
該表為用戶清單實際數(shù)據(jù)的存儲表,存儲海量的用戶清單相關(guān)信息,在進(jìn)行用戶清單查詢時,如遇到用戶清單量非常大時,由HBASE客戶端查詢程序調(diào)度的并發(fā)查詢子程序?qū)崿F(xiàn)將結(jié)果集異步緩存到數(shù)據(jù)緩存池中,如第三步所 示。
HBASE服務(wù)器端查詢程序設(shè)計,具體為:HBASE服務(wù)器端查詢程序根據(jù)前端展示程序要求要求構(gòu)造,其根據(jù)前端的查詢請求進(jìn)行響應(yīng),其與客戶端展示程序間通過XML報文進(jìn)行通信,接口格式包括請求報體DATA和響應(yīng)報體DATA;所述請求報體DATA包含信息如表1所示,響應(yīng)報體DATA包含信息如表2所示。
表1
表2
HBASE服務(wù)器端查詢程序收到客戶端展示程序發(fā)送的清單查詢請求報文后,判斷是否為首次查詢,如為首次查詢則從統(tǒng)計信息索引表中查詢對應(yīng)用戶的統(tǒng)計信息,然后初始化頁碼數(shù)據(jù)緩存器鏈表,同時啟動兩個查詢填充進(jìn)程對HBASE中的數(shù)據(jù)總表進(jìn)行并發(fā)查詢,并發(fā)程序從HBASE總表中查詢出數(shù)據(jù)后,將數(shù)據(jù)放入頁碼數(shù)據(jù)緩存器鏈表中,頁碼數(shù)據(jù)緩存器的結(jié)構(gòu)后續(xù)單獨介紹,HBASE服務(wù)器端程序在從索引統(tǒng)計表中獲取了用戶的統(tǒng)計信息后,循環(huán)掃描頁碼數(shù)據(jù)緩存器鏈表中的前n個頁碼數(shù)據(jù)緩存器是否已填滿(n的數(shù)量可以通過配置文件定義),如都已填滿,則產(chǎn)生XML報文進(jìn)行響應(yīng),其響應(yīng)報文見上述響應(yīng)報文體,此時所有結(jié)果集的頁碼數(shù)據(jù)緩存器并未填滿,兩個查詢填充程序仍然在順序和逆序的兩個方向上填充頁碼數(shù)據(jù)緩存器鏈表,但前臺展示程序已經(jīng)可以給用戶進(jìn)行展示了,大大提升了展示的效率。
當(dāng)用戶點擊頁碼進(jìn)行展示選擇時,展示端程序發(fā)送請求報文,報文中的beginpage和endpage不為空,此時,HBASE服務(wù)器端程序知曉為非首次查詢,其到頁碼數(shù)據(jù)緩沖池中進(jìn)行查詢,通過傳入的頁碼范圍匹配到對應(yīng)的頁碼數(shù)據(jù)緩存器,并檢查查詢填充進(jìn)程是否已將其所需的頁碼數(shù)據(jù)緩存器填滿,如填滿則讀取相關(guān)數(shù)據(jù)生成XML報文進(jìn)行響應(yīng),如未填滿則繼續(xù)等待,直到其需要的頁碼緩沖器全部被填滿后,生成XML報文進(jìn)行響應(yīng)。由于用戶要求展示的內(nèi)容為全部結(jié)果集的片段,且這些片段的填充被兩個并行服務(wù)器同時進(jìn)行,用戶的請求也是分多次進(jìn)行且是順序增長的,其間的時間間隔足以讓并行服務(wù)器將頁碼數(shù)據(jù)緩存器鏈表填滿,故查詢效率大大提升,另外用戶很可能只瀏覽結(jié)果全集里的很少一部分關(guān)注的內(nèi)容,所以網(wǎng)絡(luò)傳輸?shù)臄?shù)據(jù)量也大大降低,上述處理流程結(jié)構(gòu)如圖2所示。
頁碼數(shù)據(jù)緩存器結(jié)構(gòu)及查詢填充程序設(shè)計,具體為:頁碼數(shù)據(jù)緩存器是一種內(nèi)存結(jié)構(gòu),所有的頁碼數(shù)據(jù)緩存器串成一個雙向鏈表,其頁碼數(shù)據(jù)緩存器雙 向鏈表結(jié)構(gòu)如圖3所示;頁碼數(shù)據(jù)緩存器雙向鏈表頭內(nèi)存結(jié)構(gòu)包括指向第一個頁碼數(shù)據(jù)緩存器的指針和指向最后一個頁碼數(shù)據(jù)緩存器的指針,正序查詢填充程序的填充進(jìn)度指針及倒序查詢填充程序的填充進(jìn)度指針;其中,正序查詢填充程序的填充進(jìn)度指針初始指向第一個頁碼數(shù)據(jù)緩存器,逆序查詢填充程序進(jìn)度指針初始指向最后一個頁碼數(shù)據(jù)緩存器;此外,還有一個鏈表緩存開始時間,具體數(shù)據(jù)結(jié)構(gòu)如下:
Struct pageheader{
Time_t cachebegintime;
Struct pagebody*firstbody;
Struct pagebody*endbody;
Struct pagebody*fill1_body;
Struct pagebody*fill2_body;
}
其中,Time_t是自定義的結(jié)構(gòu)體時間類型數(shù)據(jù),存儲鏈表緩存開始時間,*firstbody是指向首個頁碼數(shù)據(jù)緩存器結(jié)構(gòu)體的指針,*endbody為指向最后一個頁碼數(shù)據(jù)緩存器的指針,*fill1_body為指向順序填充進(jìn)程當(dāng)前填充進(jìn)度的指針,*fill2_body為指向逆序填充進(jìn)程當(dāng)前填充進(jìn)度的指針。
頁碼數(shù)據(jù)緩存器內(nèi)存結(jié)構(gòu),包括一個指向上一個頁碼數(shù)據(jù)緩存器的指針和下一個頁碼數(shù)據(jù)緩存器的指針,一個填充進(jìn)程占用標(biāo)志(標(biāo)志是倒序還是順序進(jìn)程占用)、一個數(shù)據(jù)是否填充滿標(biāo)志
Struct pagebody{
Int filltag;/*是否填充滿標(biāo)志0為未填充,1為填充滿*/
Int fillhold;/*0為未占有,1為填順序填充進(jìn)程占有,2為逆序填充進(jìn)程占有*/
Struct data;*為自定義的用戶詳單記錄數(shù)據(jù)結(jié)構(gòu)體,存儲一條或多條話單記錄*/
Struct pagebody*nextbody;/*指向下一個頁碼數(shù)據(jù)緩存器指針*/
Struct pagebody*prevbody;/*指向上一個頁碼數(shù)據(jù)緩存器指針*/
}
兩個查詢填充進(jìn)程從鏈表的兩端對鏈表的頁碼數(shù)據(jù)緩存器進(jìn)行數(shù)據(jù)填充,其處理流程如圖4所示。
頁碼數(shù)據(jù)緩存器內(nèi)存回收程序設(shè)計,用于根據(jù)緩存超時時間設(shè)定,回收頁碼數(shù)據(jù)緩存器占用的內(nèi)存,其處理流程如圖5所示。
HBASE存儲程序設(shè)計,具體為:HBASE存儲程序在進(jìn)行話單存儲時,同時向HBASE數(shù)據(jù)庫數(shù)據(jù)總表與索引統(tǒng)計表進(jìn)行插入,類似關(guān)系數(shù)據(jù)庫中的表與索引的關(guān)系,在HBASE數(shù)據(jù)庫調(diào)用HBASE接口存儲全量清單數(shù)據(jù)進(jìn)數(shù)據(jù)總表中,在索引統(tǒng)計表中根據(jù)字段過濾存入統(tǒng)計字段數(shù)據(jù),索引統(tǒng)計表占全量清單數(shù)據(jù)的比重一般控制在5%以內(nèi),否則異步展示的效果將打折扣;本例中只有兩個字段:流量和金額,其占全量清單數(shù)據(jù)比重不到1%。HBASE存儲程序處理流程如圖6所示示。
索引統(tǒng)計表信息同步程序,主要用于:當(dāng)賬期切換時,索引統(tǒng)計表信息同步程序?qū)ι显碌乃饕磉M(jìn)行處理,實現(xiàn)每個用戶號碼只對應(yīng)一條統(tǒng)計信息,提升索引表查詢效率,其處理流程如圖7所示。
本發(fā)明實施例提供的大數(shù)據(jù)檢索裝置,如圖8所示,包括:數(shù)據(jù)存儲模塊81、頁碼數(shù)據(jù)緩存模塊82和檢索模塊83,其中,
所述數(shù)據(jù)存儲模塊81,用于建立并更新數(shù)據(jù)庫數(shù)據(jù)對應(yīng)的數(shù)據(jù)總表,統(tǒng)計所述數(shù)據(jù)總表的數(shù)據(jù),按類別建立索引統(tǒng)計表;
具體的,數(shù)據(jù)庫中的數(shù)據(jù)以表的形式儲存,所述數(shù)據(jù)總表為數(shù)據(jù)庫中實際數(shù)據(jù)的存儲表,存儲海量的相關(guān)信息;根據(jù)索引或數(shù)據(jù)總表中的數(shù)據(jù)類型等統(tǒng)計數(shù)據(jù)總表的統(tǒng)計項信息,并生成索引統(tǒng)計表;本實施例中所述數(shù)據(jù)庫可以是分布式計算數(shù)據(jù)庫,數(shù)據(jù)總表可以為用戶GPRS清單,如:日期、業(yè)務(wù)類型、計費號碼等;這樣索引統(tǒng)計表可以針對每個用戶統(tǒng)計GPRS清單的總條數(shù)、總費用、總流量等;針對于電話清單、GPRS清單,為了便于按月結(jié)算費用,所述索引統(tǒng)計表還可以分期建立,如:按月建立。
所述數(shù)據(jù)存儲模塊81,還用于更新所述數(shù)據(jù)總表時,同步更新所述索引統(tǒng)計表;在向數(shù)據(jù)庫中數(shù)據(jù)總表存入清單數(shù)據(jù)時,同時在索引統(tǒng)計表中存入統(tǒng)計項信息,兩個操作同時成功才認(rèn)為數(shù)據(jù)存儲成功。
所述頁碼數(shù)據(jù)緩存模塊82,用于建立頁碼數(shù)據(jù)緩存器鏈表,并指定其中1個以上頁碼數(shù)據(jù)緩存器被指定為前置頁碼數(shù)據(jù)緩存器;
具體的,開始檢索時,所述頁碼數(shù)據(jù)緩存模塊82建立頁碼數(shù)據(jù)緩存器鏈表,頁碼數(shù)據(jù)緩存器鏈表可以由一個以上的的頁碼數(shù)據(jù)緩存器組成,并形成雙向鏈表結(jié)構(gòu),可以分別從所述頁碼數(shù)據(jù)緩存器鏈表兩頭填充;每一個頁碼數(shù)據(jù)緩存器可以用來緩存對應(yīng)的一頁用于返回顯示的檢索結(jié)果內(nèi)容;頁碼數(shù)據(jù)緩存器鏈表實現(xiàn)對數(shù)據(jù)總表檢索出的結(jié)果及數(shù)據(jù)的緩存,供用戶對后續(xù)頁面查詢使用。在頁碼數(shù)據(jù)緩存器鏈表中,可指定一個以上的頁碼數(shù)據(jù)緩存器作為前置頁碼數(shù)據(jù)緩存器;具體指定的數(shù)目根據(jù)用戶需要確定,且每次指定的數(shù)目可變。
所述檢索模塊83,用于從所述索引統(tǒng)計表中查詢出符合檢索條件的統(tǒng)計信息;檢索所述數(shù)據(jù)總表,并將檢索結(jié)果填充到所述頁碼數(shù)據(jù)緩存器鏈表中;確定前置頁碼數(shù)據(jù)緩存器空間填充滿,并返回所述前置頁碼數(shù)據(jù)緩存器的內(nèi)容和所述統(tǒng)計信息到客戶端;這里,所述用于從所述索引統(tǒng)計表中查詢出符合檢索條件的統(tǒng)計信息和所述檢索所述數(shù)據(jù)總表,并將檢索結(jié)果填充到所述頁碼數(shù)據(jù)緩存器中這兩個步驟沒有先后順序,可以對調(diào),也可以同時進(jìn)行;這樣,可以提高檢索的速度。
具體的,開始檢索時,客戶端將檢索條件發(fā)送至數(shù)據(jù)庫;所述檢索模塊83根據(jù)檢索條件在索引統(tǒng)計表的統(tǒng)計結(jié)果中,將符合所述檢索條件的統(tǒng)計信息提取出來;本實施例中,所述檢索條件可以是特定用戶,這樣,統(tǒng)計信息就可以是特定用戶的GPRS清單的總條數(shù)、總費用、總流量等;
所述檢索模塊83可以根據(jù)檢索條件采用順序查詢和逆序查詢兩個進(jìn)程對數(shù)據(jù)總表進(jìn)行檢索;所述順序查詢從數(shù)據(jù)總表的表首開始查詢,所述逆序查詢從數(shù)據(jù)總表的表尾開始查詢;如此,可大大提高檢索的速度;本實施例中,可以調(diào)用兩個查詢程序?qū)η鍐螖?shù)據(jù)總表按HBASE的key-value方式進(jìn)行檢索,一 個順序查、一個逆序查;
所述順序查詢檢索到的數(shù)據(jù)按順序填充到頁碼數(shù)據(jù)緩存器鏈表,所述逆序查詢檢索到的數(shù)據(jù)按逆序填充到頁碼數(shù)據(jù)緩存器鏈表;所述順序查詢從數(shù)據(jù)總表的表首開始查詢;所述逆序查詢從數(shù)據(jù)總表的表尾開始查詢,大大提高檢索的速度;本實施例中,將獲得的檢索結(jié)果不斷填充到頁碼緩沖器鏈表上的頁碼數(shù)據(jù)緩存器中,一個順序填充、一個逆序填充。
所述前置頁碼數(shù)據(jù)緩存器為填充所述頁碼數(shù)據(jù)緩存器鏈表時首先填充的頁碼數(shù)據(jù)緩存器;所述前置頁碼數(shù)據(jù)緩存器中包含的頁碼數(shù)據(jù)緩存器數(shù)量根據(jù)需求預(yù)先設(shè)定,所述前置頁碼數(shù)據(jù)緩存器包含一個以上的頁碼數(shù)據(jù)緩存器;預(yù)先設(shè)定前置頁碼數(shù)據(jù)緩存器中頁碼數(shù)據(jù)緩存器的數(shù)量,在檢索中獲得的檢索結(jié)果會首先填充到前置頁碼數(shù)據(jù)緩存器中;所述統(tǒng)計信息為步驟103中獲取的與所述檢索條件對應(yīng)的索引統(tǒng)計表中的信息;當(dāng)前置頁碼數(shù)據(jù)緩存器被填充滿時,將前置頁碼數(shù)據(jù)緩存器的數(shù)據(jù)和所述統(tǒng)計信息到檢索客戶端,用于對用戶進(jìn)行顯示;此時檢索尚未全部完成,剩余的檢索還在繼續(xù),如此,起到結(jié)果返回和檢索異步并行處理的作用,能及時響應(yīng)檢索客戶端。
本實施例中可以將前置頁碼數(shù)據(jù)緩存器的數(shù)據(jù)和所述統(tǒng)計信息生成XML報文,將報文返回客戶端,對客戶端展示程序進(jìn)行響應(yīng);每個頁碼數(shù)據(jù)緩存器可以對應(yīng)一個顯示頁,用于填充一個頁面的檢索結(jié)果,如此,全部檢索沒有完成的情況下,將先期的檢索結(jié)果以及統(tǒng)計信息在最短的時間內(nèi)向用戶展示,大大縮短用戶的等待時間。
所述檢索模塊83,還用于當(dāng)需求返回頁的頁碼對應(yīng)的頁碼數(shù)據(jù)緩存器未填滿時,則等待所述頁碼數(shù)據(jù)緩存器被填滿,再返回所述對應(yīng)的頁碼數(shù)據(jù)緩存器的數(shù)據(jù)到檢索客戶端。
這里,當(dāng)前置頁碼數(shù)據(jù)緩存器空間填充滿,并返回所述前置頁碼數(shù)據(jù)緩存器的數(shù)據(jù)和所述統(tǒng)計信息到檢索客戶端的同時,檢索模塊83對完整結(jié)果的檢索仍然在并行進(jìn)行并不斷填充到空的頁碼數(shù)據(jù)緩存器鏈表中;當(dāng)用戶需要查詢未展示的清單頁時,首先檢查用戶需要查詢的頁面對應(yīng)的頁碼數(shù)據(jù)緩存器是否已 填完數(shù)據(jù),如果完成則從相關(guān)頁碼數(shù)據(jù)緩存器中取出數(shù)據(jù)對客戶端進(jìn)行響應(yīng),如果未完成則等待頁碼數(shù)據(jù)緩存器被填充,再返回所述對應(yīng)的頁碼數(shù)據(jù)緩存器的數(shù)據(jù)到檢索客戶端;由于采用了異步并行技術(shù),頁碼數(shù)據(jù)緩存器未填充的概率較低,即使出現(xiàn)頁碼數(shù)據(jù)緩存器未填充的情況,等待未填充頁碼數(shù)據(jù)緩存器填充的時間也遠(yuǎn)遠(yuǎn)小于全量數(shù)據(jù)查詢的時間。
本實施例的裝置還包括:索引統(tǒng)計表同步模塊84,用于對于分期建立所述索引統(tǒng)計表,合并往期索引統(tǒng)計表;本實施例中,針對數(shù)據(jù)總表為用戶GPRS清單的情況,可以在賬期切換時,對往期的索引統(tǒng)計表進(jìn)行合并,合并后一個用戶號碼只對應(yīng)一條統(tǒng)計信息,如此,可加快索引統(tǒng)計表的檢索速度。
本實施例的裝置還包括:頁碼數(shù)據(jù)緩存器回收模塊85,用于當(dāng)建立的頁碼數(shù)據(jù)緩存器鏈表超過預(yù)設(shè)的失效時間設(shè)定,則回收頁碼數(shù)據(jù)緩存器鏈表占用的內(nèi)存;
這里,預(yù)先設(shè)計頁碼數(shù)據(jù)緩存器鏈表失效時間,在失效時間到達(dá)時,清理頁碼數(shù)據(jù)緩存器鏈表,釋放相關(guān)的內(nèi)存。
在實際應(yīng)用中,數(shù)據(jù)存儲模塊81、頁碼數(shù)據(jù)緩存模塊82、檢索模塊83、索引統(tǒng)計表同步模塊84、頁碼數(shù)據(jù)緩存器回收模塊85均可由數(shù)據(jù)服務(wù)器的中央處理器(CPU)、微處理器(MPU)、數(shù)字信號處理器(DSP)、或現(xiàn)場可編程門陣列(FPGA)等實現(xiàn)
以上所述,僅為本發(fā)明的佳實施例而已,并非用于限定本發(fā)明的保護(hù)范圍,凡在本發(fā)明的精神和原則之內(nèi)所作的任何修改、等同替換和改進(jìn)等,均應(yīng)包含在本發(fā)明的保護(hù)范圍之內(nèi)。