龍鳳+王凡+鮮鵬+唐堂
【摘 要】現(xiàn)有大數(shù)據(jù)集實(shí)時(shí)查詢和分頁(yè)展示的兩種方法存在時(shí)延大、適用場(chǎng)景有限等問(wèn)題,為支撐4G用戶海量流量話單的查詢,構(gòu)建對(duì)應(yīng)于大數(shù)據(jù)表的統(tǒng)計(jì)信息索引小表,同時(shí)設(shè)計(jì)一套異步數(shù)據(jù)頁(yè)緩存裝置,實(shí)現(xiàn)對(duì)數(shù)據(jù)服務(wù)器查詢出的數(shù)據(jù)的緩存,供用戶對(duì)后續(xù)頁(yè)面的查詢使用,以提高查詢和展示效率。
【關(guān)鍵詞】HBASE 流量話單 分頁(yè)展示
中圖分類(lèi)號(hào):TN929 文獻(xiàn)標(biāo)志碼:A 文章編號(hào):1006-1010(2017)19-0024-05
Method of Real-time Inquiry and Pagination Display of 4G Traffic Bill Based on HBASE
LONG Feng, WANG Fan, XIAN Peng, TANG Tang
[Abstract] The two methods of existing big data set real-time inquiry and pagination display suffer from large delay and limited application scenario. In order to support the massive 4G user traffic bill inquiry, a small statistical information index table was constructed according to the big data table. A set of asynchronous data page buffer device was designed. Data buffer of data server inquiry output was realized. It can be provided to user to inquire the subsequent page. The efficiency of inquiry and display is enhanced.
[Key words]HBASE traffic bill pagination display
1 引言
隨著4G業(yè)務(wù)的快速發(fā)展,電信運(yùn)營(yíng)商計(jì)費(fèi)系統(tǒng)中用戶的流量清單飛速增長(zhǎng),目前占到用戶清單總存儲(chǔ)量的70%以上,在查詢用戶月流量清單時(shí),需要對(duì)超過(guò)10萬(wàn)條的結(jié)果集進(jìn)行查詢及展示,用戶等待時(shí)間較長(zhǎng),滿意度低。因此本文接下來(lái)將介紹一種新的大量數(shù)據(jù)實(shí)時(shí)查詢及分頁(yè)展示的方法,提高查詢效率,提升用戶滿意度。
2 分頁(yè)查詢展示方法的現(xiàn)狀研究
目前常見(jiàn)的大數(shù)據(jù)實(shí)時(shí)查詢和分頁(yè)展示有兩種方法:
(1)方法一:客戶端發(fā)送請(qǐng)求到數(shù)據(jù)服務(wù)器,數(shù)據(jù)服務(wù)器將查詢結(jié)果返回給客戶端,客戶端根據(jù)獲取的數(shù)據(jù)集進(jìn)行處理,統(tǒng)計(jì)數(shù)據(jù)集的一些相關(guān)信息,然后在前臺(tái)界面分頁(yè)展示給用戶。該種方法易管理、易維護(hù),技術(shù)體系成熟,但是當(dāng)查詢的數(shù)據(jù)集過(guò)大時(shí),超過(guò)10萬(wàn)條記錄,服務(wù)端的查詢時(shí)間長(zhǎng),網(wǎng)絡(luò)數(shù)據(jù)傳輸量大,用戶等待時(shí)間長(zhǎng)。
(2)方法二:客戶端在發(fā)送請(qǐng)求到數(shù)據(jù)服務(wù)器時(shí),采用頁(yè)碼索引的方式,每次只發(fā)送需要查詢的頁(yè)碼給數(shù)據(jù)服務(wù)器,數(shù)據(jù)服務(wù)器根據(jù)特定算法,每次根據(jù)頁(yè)碼范圍進(jìn)行查詢,將查詢的結(jié)果集返回給客戶端。該種方法適用于只展示明細(xì)數(shù)據(jù)、不需要展示統(tǒng)計(jì)數(shù)據(jù)的場(chǎng)景。
3 統(tǒng)計(jì)信息索引表和異步數(shù)據(jù)緩存的技術(shù)
原理
本文介紹一種大數(shù)據(jù)實(shí)時(shí)查詢分頁(yè)展示的方法,通過(guò)建立統(tǒng)計(jì)信息索引表和異步數(shù)據(jù)頁(yè)緩存裝置方式解決現(xiàn)有的數(shù)據(jù)查詢與分頁(yè)展示方法存在的問(wèn)題。
在數(shù)據(jù)查詢系統(tǒng)(本文以HBASE數(shù)據(jù)庫(kù)為例)中,構(gòu)建對(duì)應(yīng)于大數(shù)據(jù)表的統(tǒng)計(jì)信息索引小表,并通過(guò)相關(guān)技術(shù)保證統(tǒng)計(jì)索引小表與清單大表間的數(shù)據(jù)實(shí)時(shí)同步。同時(shí)設(shè)計(jì)一套異步數(shù)據(jù)頁(yè)緩存裝置,實(shí)現(xiàn)對(duì)數(shù)據(jù)服務(wù)器查詢出的結(jié)果集數(shù)據(jù)的緩存,供用戶對(duì)后續(xù)頁(yè)面查詢使用。從索引統(tǒng)計(jì)小表中查詢出統(tǒng)計(jì)信息,在清單查詢填充程序完成初始設(shè)定的展示頁(yè)碼緩存容器填充時(shí),HBASE服務(wù)器端查詢應(yīng)用程序就可以對(duì)客戶端展示程序進(jìn)行結(jié)果響應(yīng),客戶端展示程序在收到返回的報(bào)文后,給用戶展現(xiàn)統(tǒng)計(jì)信息及經(jīng)過(guò)排序后的前幾頁(yè)清單數(shù)據(jù)。
同時(shí),對(duì)完整結(jié)果集的查詢并行進(jìn)行,并不斷填充到空的頁(yè)碼緩存容器中。當(dāng)用戶需要檢索未展示的清單頁(yè)時(shí),頁(yè)碼索引信息被發(fā)送到HBASE服務(wù)端查詢程序,HBASE服務(wù)端查詢程序通過(guò)算法分析其對(duì)應(yīng)的頁(yè)碼緩存容器是否已填完數(shù)據(jù),如完成則從相關(guān)頁(yè)碼緩存容器中取出數(shù)據(jù),對(duì)客戶端進(jìn)行響應(yīng),如未完成則等待頁(yè)碼容器被填充。由于采用了異步并行技術(shù),頁(yè)碼容器未填充的概率較低,即使出現(xiàn),其等待填充的時(shí)間也遠(yuǎn)遠(yuǎn)小于全量數(shù)據(jù)查詢的時(shí)間,故采用本方法后,大大改善了用戶在查詢大數(shù)據(jù)清單時(shí)的查詢展示時(shí)間,能提升用戶感知及滿意度,同時(shí)避免了全量查詢數(shù)據(jù)結(jié)果集的網(wǎng)絡(luò)傳輸。
4 統(tǒng)計(jì)信息索引表和異步數(shù)據(jù)緩存的技術(shù)
實(shí)現(xiàn)
下面以用戶GPRS海量清單實(shí)時(shí)查詢與分頁(yè)展示的設(shè)計(jì)為實(shí)例進(jìn)行說(shuō)明。
4.1 邏輯結(jié)構(gòu)
本方法實(shí)現(xiàn)的邏輯與物理結(jié)構(gòu)如圖1所示:
步驟1:HBASE服務(wù)器端查詢程序收到客戶端展示程序的請(qǐng)求,根據(jù)查詢條件檢索索引統(tǒng)計(jì)小表,獲取用戶查詢結(jié)果集的統(tǒng)計(jì)信息,如GPRS清單的總條數(shù)、總費(fèi)用、總流量。
步驟2:HBASE服務(wù)器端查詢程序初始化異步數(shù)據(jù)緩沖池中的頁(yè)碼緩沖器鏈表,調(diào)用2個(gè)查詢填充程序?qū)η鍐螖?shù)據(jù)大表按HBASE的key-value方式進(jìn)行檢索,一個(gè)順序查、一個(gè)逆序查。
步驟3:查詢填充程序?qū)@得的查詢結(jié)果不斷填充到異步數(shù)據(jù)緩沖池中對(duì)應(yīng)的頁(yè)碼緩沖器鏈表上的頁(yè)碼緩沖容器中,一個(gè)順序填充、一個(gè)逆序填充。endprint
步驟4:HBASE服務(wù)器端查詢程序在從索引統(tǒng)計(jì)小表中獲取結(jié)果集統(tǒng)計(jì)信息且啟動(dòng)了查詢填充程序后,監(jiān)控其對(duì)應(yīng)的頁(yè)緩沖鏈表上,前幾個(gè)頁(yè)緩沖容器是否被填滿(展示幾個(gè)頁(yè)可以通過(guò)配置文件配置)。
步驟5:當(dāng)HBASE服務(wù)器端查詢程序發(fā)現(xiàn)前幾個(gè)頁(yè)緩沖容器已經(jīng)被填滿后,HBASE服務(wù)器端查詢程序讀取相關(guān)頁(yè)緩沖容器中的數(shù)據(jù),結(jié)合前面獲得的結(jié)果集統(tǒng)計(jì)信息,生成XML返回報(bào)文對(duì)客戶端展示程序進(jìn)行響應(yīng),客戶端展示程序獲取到返回報(bào)文后,給用戶進(jìn)行初步展示。
步驟6、7:和HBASE存儲(chǔ)程序在對(duì)原始清單文件進(jìn)行解析存儲(chǔ),在向HBASE數(shù)據(jù)庫(kù)清單大表存入清單數(shù)據(jù)時(shí),同時(shí)存入統(tǒng)計(jì)項(xiàng)信息,兩個(gè)操作同時(shí)成功方認(rèn)為數(shù)據(jù)存儲(chǔ)成功。
步驟8:索引統(tǒng)計(jì)小表同步程序?qū)崿F(xiàn)清單大表與索引小表的信息同步,在帳期切換時(shí),對(duì)索引小表進(jìn)行合并,合并后一個(gè)用戶號(hào)碼只對(duì)應(yīng)一條統(tǒng)計(jì)信息,加快了索引小表的檢索速度。
步驟9:頁(yè)碼緩沖容器內(nèi)存回收程序根據(jù)配置設(shè)定的緩沖失效時(shí)間,在失效時(shí)間到達(dá)時(shí),清理頁(yè)碼緩沖容器鏈表,釋放相關(guān)的內(nèi)存。
4.2 HBASE數(shù)據(jù)庫(kù)設(shè)計(jì)
(1)用戶清單索引統(tǒng)計(jì)小表歷史月HBASE存儲(chǔ)格式設(shè)計(jì)
1)RowKey設(shè)計(jì)
MSISDN+日期+業(yè)務(wù)類(lèi)型;
MSISDN:計(jì)費(fèi)號(hào)碼;
日期:處理時(shí)間字段,精確到天;
業(yè)務(wù)類(lèi)型:兩位計(jì)費(fèi)業(yè)務(wù)類(lèi)型。
2)Column Family設(shè)計(jì)
一個(gè)Column Family、3個(gè)column,分別為話單總條數(shù)、總流量和總金額。
(2)用戶清單索引統(tǒng)計(jì)小表當(dāng)前月HBASE存儲(chǔ)格式設(shè)計(jì)
1)RowKey設(shè)計(jì)
MSISDN+日期+業(yè)務(wù)類(lèi)型;
MSISDN:計(jì)費(fèi)號(hào)碼;
日期:處理時(shí)間字段,精確到天;
業(yè)務(wù)類(lèi)型:兩位計(jì)費(fèi)業(yè)務(wù)類(lèi)型。
2)Column Family設(shè)計(jì)
一個(gè)Column Family、2個(gè)column,分別為流量和金額。
該類(lèi)表存儲(chǔ)需要在前臺(tái)進(jìn)行展示的統(tǒng)計(jì)信息,存儲(chǔ)量很小,如用戶GPRS的總流量、總條數(shù)、總金額,對(duì)于歷史月的GPRS清單查詢,如果是比當(dāng)期帳期小一月,會(huì)在月初由后臺(tái)同步程序,即圖1的步驟8完成統(tǒng)計(jì)信息的初始化工作。
(3)用戶清單大表HBASE存儲(chǔ)格式設(shè)計(jì)
1)RowKey設(shè)計(jì)
MSISDN+日期+業(yè)務(wù)類(lèi)型;
MSISDN:計(jì)費(fèi)號(hào)碼;
日期:處理時(shí)間字段,精確到天;
業(yè)務(wù)類(lèi)型:兩位計(jì)費(fèi)業(yè)務(wù)類(lèi)型。
2)Column Family設(shè)計(jì)
一個(gè)Column Family、多個(gè)column,單條話單整體存入column。
該表為用戶清單實(shí)際數(shù)據(jù)的存儲(chǔ)表,存儲(chǔ)海量的用戶清單相關(guān)信息,在進(jìn)行用戶清單查詢時(shí),如遇到用戶清單量非常大時(shí),由HBASE客戶端查詢程序調(diào)度的并發(fā)查詢子程序?qū)崿F(xiàn)將結(jié)果集異步緩存到數(shù)據(jù)緩存池中,如步驟3所示。
4.3 HBASE服務(wù)器端查詢程序設(shè)計(jì)
HBASE服務(wù)器端查詢程序根據(jù)前端展示程序要求構(gòu)造,響應(yīng)前段查詢請(qǐng)求時(shí),與客戶端展示程序間通過(guò)XML報(bào)文進(jìn)行通信
HBASE服務(wù)器端查詢程序收到客戶端展示程序發(fā)送的清單查詢請(qǐng)求報(bào)文后,判斷是否為首次查詢,如為首次查詢則從統(tǒng)計(jì)信息索引小表中查詢對(duì)應(yīng)用戶的統(tǒng)計(jì)信息,然后初始化頁(yè)碼緩存容器鏈表,同時(shí)啟動(dòng)2個(gè)查詢填充進(jìn)程對(duì)HBASE中的清單大表進(jìn)行并發(fā)查詢,并發(fā)程序從HBASE大表中查詢出數(shù)據(jù)后,將數(shù)據(jù)放入頁(yè)碼緩存容器鏈表中,HBASE服務(wù)器端程序在從索引統(tǒng)計(jì)小表中獲取了用戶的統(tǒng)計(jì)信息后,循環(huán)掃描頁(yè)碼緩存容器鏈表中的前n個(gè)容器是否已填滿(n的數(shù)量可以通過(guò)配置文件定義),如都已填滿,則產(chǎn)生XML報(bào)文進(jìn)行響應(yīng),其響應(yīng)報(bào)文見(jiàn)上述響應(yīng)報(bào)文體,此時(shí)所有結(jié)果集的頁(yè)碼緩存容器并未填滿,兩個(gè)查詢填充程序仍然在順序和逆序的兩個(gè)方向上填充頁(yè)碼緩存容器鏈表,但前臺(tái)展示程序已經(jīng)可以給用戶進(jìn)行展示了,大大提升了展示的效率。
當(dāng)用戶點(diǎn)擊頁(yè)碼進(jìn)行展示選擇時(shí),展示端程序發(fā)送請(qǐng)求報(bào)文,報(bào)文中的beginpage和endpage不為空,此時(shí)HBASE服務(wù)器端程序知曉為非首次查詢,其到頁(yè)碼數(shù)據(jù)緩沖池中進(jìn)行查詢,通過(guò)傳入的頁(yè)碼范圍匹配到對(duì)應(yīng)的頁(yè)碼緩存容器,并檢查查詢填充進(jìn)程是否已將其所需的頁(yè)碼緩存容器填滿,如填滿則讀取相關(guān)數(shù)據(jù)生成XML報(bào)文進(jìn)行響應(yīng),如未填滿則繼續(xù)等待,直到其需要的頁(yè)碼緩沖器全部被填滿后,生成XML報(bào)文進(jìn)行響應(yīng)。由于用戶要求展示的內(nèi)容為全部結(jié)果集的片段,且這些片段的填充被2個(gè)并行服務(wù)器同時(shí)進(jìn)行,用戶的請(qǐng)求也是分多次進(jìn)行且是順序增長(zhǎng)的,其時(shí)間間隔足以讓并行服務(wù)器將頁(yè)碼緩存容器鏈表填滿,故查詢效率大大提升,另外用戶很可能只瀏覽結(jié)果全集里的很少一部分關(guān)注的內(nèi)容,所以網(wǎng)絡(luò)傳輸?shù)臄?shù)據(jù)量也大大降低,上述處理流程結(jié)構(gòu)如圖2所示:
4.4 頁(yè)碼緩存容器結(jié)構(gòu)及查詢填充程序設(shè)計(jì)
頁(yè)碼緩存容器是一種內(nèi)存結(jié)構(gòu),所有的頁(yè)碼緩存容器串成一個(gè)雙向鏈表,其結(jié)構(gòu)如圖3所示:
頁(yè)緩存容器頭內(nèi)存結(jié)構(gòu)包括指向第一個(gè)頁(yè)碼緩存器的指針和指向最后一個(gè)頁(yè)碼緩存器的指針,正序查詢填充程序的填充進(jìn)度指針及倒序查詢填充程序的填充進(jìn)度指針(其中正序查詢填充程序的填充進(jìn)度指針初始指向第一個(gè)頁(yè)碼緩存容器,逆序查詢填充程序進(jìn)度指針初始指向最后一個(gè)頁(yè)碼緩存容器),兩個(gè)查詢填充進(jìn)程從鏈表的兩端對(duì)鏈表的頁(yè)碼緩存容器進(jìn)行數(shù)據(jù)填充,其處理流程如圖4所示:
4.5 頁(yè)碼緩存容器內(nèi)存回收程序設(shè)計(jì)
該程序根據(jù)緩存超時(shí)時(shí)間設(shè)定,回收頁(yè)碼緩存容器占用的內(nèi)存,其處理流程如圖5所示。endprint
4.6 HBASE存儲(chǔ)程序設(shè)計(jì)
HBASE存儲(chǔ)程序在進(jìn)行話單存儲(chǔ)時(shí),同時(shí)向HBASE數(shù)據(jù)庫(kù)清單大表與索引統(tǒng)計(jì)小表進(jìn)行插入,類(lèi)似關(guān)系數(shù)據(jù)庫(kù)中的表與索引的關(guān)系,在HBASE數(shù)據(jù)庫(kù)調(diào)用HBASE接口存儲(chǔ)全量清單數(shù)據(jù)進(jìn)清單大表中,在索引統(tǒng)計(jì)小表中根據(jù)字段過(guò)濾存入統(tǒng)計(jì)字段數(shù)據(jù),索引統(tǒng)計(jì)小表占全量清單數(shù)據(jù)的比重一般控制在5%以內(nèi),否則異步展示的效果將打折扣,本例中只有2個(gè)字段:流量和金額,其占全量清單數(shù)據(jù)比重不到1%。
4.7 索引統(tǒng)計(jì)小表信息同步程序
當(dāng)帳期切換時(shí),索引統(tǒng)計(jì)小表信息同步程序?qū)ι显碌乃饕”磉M(jìn)行處理,實(shí)現(xiàn)每個(gè)用戶號(hào)碼只對(duì)應(yīng)一條統(tǒng)計(jì)信息,提升索引小表查詢效率。
5 結(jié)論
本文提供了一種大數(shù)據(jù)實(shí)時(shí)查詢分頁(yè)展示的方法,通過(guò)數(shù)據(jù)的異步處理技術(shù),使清單數(shù)據(jù)可以異步按用戶需要展示,而統(tǒng)計(jì)數(shù)據(jù)通過(guò)小表查詢同步展示,節(jié)約了查詢和展示時(shí)間,同時(shí)設(shè)計(jì)了頁(yè)數(shù)據(jù)緩存容器裝置,降低了數(shù)據(jù)服務(wù)器的訪問(wèn)量,并提升了用戶查詢與分頁(yè)展示的速度,特別是在查詢分頁(yè)展示超過(guò)上百頁(yè)或上千頁(yè)的數(shù)據(jù)時(shí),具備很高的應(yīng)用價(jià)值。該方法在某省移動(dòng)公司的業(yè)務(wù)支撐系統(tǒng)HBASE用戶詳單數(shù)據(jù)庫(kù)中已進(jìn)行使用,降低了數(shù)據(jù)服務(wù)器的訪問(wèn)負(fù)荷,提高了用戶的查詢效率。
參考文獻(xiàn):
[1] 楊志. 一種實(shí)時(shí)大數(shù)據(jù)查詢技術(shù)——對(duì)象分布式查詢[J]. 計(jì)算機(jī)與數(shù)字工程, 2015,43(10): 1851-1856.
[2] 涂新莉,劉波,林偉偉. 大數(shù)據(jù)研究綜述[J]. 計(jì)算機(jī)應(yīng)用研究, 2014,31(6): 1612-1616.
[3] 衛(wèi)長(zhǎng)安. 大數(shù)據(jù)環(huán)境下數(shù)據(jù)的查詢優(yōu)化研究[J]. 長(zhǎng)治學(xué)院學(xué)報(bào), 2015,32(5): 56-57.
[4] 蔡志剛,閻潔. 基于緩存框架的Web緩存研究[J]. 計(jì)算機(jī)教學(xué)與教育信息化, 2009,5(31): 8737-8739.
[5] 嚴(yán)霄鳳,張德馨. 大數(shù)據(jù)研究[J]. 計(jì)算機(jī)技術(shù)與發(fā)展, 2013,23(4): 168-172.
[6] 萬(wàn)虎,徐遠(yuǎn)超,孫鳳蕓,等. 面向大數(shù)據(jù)應(yīng)用的眾核處理器緩存結(jié)構(gòu)設(shè)計(jì)[J]. 計(jì)算機(jī)工程與科學(xué), 2015,37(1): 28-35.
[7] 陳潔,陳冬杰,黃幫明. 基于HBASE的大數(shù)據(jù)壓縮算法的研究[J]. 電腦知識(shí)與技術(shù), 2014,10(13): 3146-3147.
[8] 張雄彪. Hibernate數(shù)據(jù)緩存技術(shù)[J]. 湖北第二師范學(xué)院學(xué)報(bào), 2013,30(8): 69-70.
[9] 張輝,趙郁亮,徐江,等. 基于Oracle數(shù)據(jù)庫(kù)海量數(shù)據(jù)的查詢優(yōu)化研究[J]. 計(jì)算機(jī)技術(shù)與發(fā)展, 2012,22(2): 165-167.
[10] 王珊,王會(huì)舉,覃雄派,等. 架構(gòu)大數(shù)據(jù):挑戰(zhàn)、現(xiàn)狀與展望[J]. 計(jì)算機(jī)學(xué)報(bào), 2011,34(10): 1741-1752.endprint