一種瀏覽解碼話單文件方法
【專利摘要】本發(fā)明公開了一種瀏覽解碼話單文件方法,客戶端把要解碼的話單文件列表根據(jù)客戶端與服務端通信協(xié)議格式傳送到服務端,服務端解析客戶端解碼請求,獲取解碼文件列表與解碼查詢條件,調(diào)用話單解碼庫對請求的話單文件進行解碼,解碼結(jié)果存入服務端的臨時文件中,服務端第一次返回解碼結(jié)果的話單給客戶端客戶端收到第一次解碼結(jié)果返回,計算出這次解碼的話單需要顯示的總頁數(shù),并顯示第一頁的話單;同時服務端在向客戶端返回首頁信息時,按照客戶端每頁顯示的話單數(shù),對解碼結(jié)果臨時文件建立索引。通過客戶端分開請求與解碼結(jié)果臨時文件建立索引,瀏覽大量話單文件的情況下,系統(tǒng)性能得到幾何級的提高。
【專利說明】一種瀏覽解碼話單文件方法
【技術領域】
[0001]本發(fā)明涉及計算機與通信領域,特別是一種瀏覽解碼話單文件方法。
【背景技術】
[0002]通信計費系統(tǒng)中,要分析查看計費信息,需要對話單文件進行解碼,原始話單文件解碼后的文件內(nèi)容是原話單的8倍以上,同時通信系統(tǒng)中的數(shù)據(jù)流量大,一個地級市在通信繁忙階段,系統(tǒng)小時產(chǎn)生的話單文件達到幾十G字節(jié),一個小時的話單文件解碼后,將會達到幾百G字節(jié),解碼后的這幾百G字節(jié)的話單信息,服務端直接傳給客戶端,客戶端進行加載顯示,將會出現(xiàn)如下兩個嚴重問題:
[0003]1.服務端向客戶端傳送解碼結(jié)果的時間非常長,對網(wǎng)絡帶寬占用大;
[0004]2.客戶端加載解碼結(jié)果的話單時間非常長,這么大的數(shù)據(jù)量,導致客戶端加載過程中,直接死掉;
[0005]基于以上原因,一般解決方法是服務端把解碼文件進行切分,然后把結(jié)果分批傳送到客戶端,客戶端對解碼結(jié)果進行分開加載,這種方案雖然解決了客戶端加載解碼結(jié)果死掉的問題,但性能非常低,導致在大話單以及大數(shù)據(jù)量的話單查詢功能基本不可用。
【發(fā)明內(nèi)容】
[0006]針對現(xiàn)有技術中存在的問題,本發(fā)明的目的是提出一種客戶端分開請求、服務端對解碼結(jié)果建立索引并根據(jù)客戶端需求分頁向客戶端傳送解碼結(jié)果,能解決了計費系統(tǒng)瀏覽大文件以及瀏覽大數(shù)據(jù)量文件的難題,同時計費系統(tǒng)在查看大數(shù)據(jù)量的話單文件時,也有非常高的性能,系統(tǒng)穩(wěn)定性高的瀏覽解碼話單文件方法。
[0007]為了達到上述目的,本發(fā)明采用以下技術方案:一種瀏覽解碼話單文件方法,步驟包括:
[0008]I)客戶端接收需要解碼話單文件的條件,并把條件按照協(xié)議格式組織成字節(jié)序,發(fā)送查詢請求命令到服務端,話單查詢請求協(xié)議格式是二進制序列,條件通過0x070x07兩個字節(jié)分開,之后執(zhí)行步驟2);
[0009]2)服務端接收到查詢請求,對請求命令進行解碼,獲取查詢請求條件,然后根據(jù)查詢請求中的時間條件選擇滿足時間的話單文件,對文件進行解碼,獲取話單,客戶端接收到的用戶輸入的條件,當話單滿足查詢請求的條件,則把話單按行寫入臨時文件,之后執(zhí)行步驟3),否則直接執(zhí)行步驟3);
[0010]3)當解碼結(jié)束時,則執(zhí)行步驟4),否則執(zhí)行步驟2);
[0011]4)對臨時文件建立索引,服務端讀取客戶端每頁顯示話單條數(shù)的配置,得到客戶端每頁顯示話單數(shù)的值N ;建立頁碼序號PageIndex與頁碼對應臨時文件中話單位置CDRPos的映射緩存區(qū)CacheM,對話單文件進行預讀取,對讀取的話單文件行數(shù)Row與N取模,當模的值為O,則建立一個頁碼序號PageIndex與話單所在文件中位置⑶RPos的map實例,把這個實例放入到CacheM中,同時頁碼序號PageIndex加I,通過這種預讀取的方式,對話單解碼結(jié)果臨時文件按頁建立索引,之后執(zhí)行步驟5),否則直接執(zhí)行步驟5);
[0012]5)話單解碼結(jié)果臨時文件按頁建立索引完成后,向客戶端查詢請求返回查詢結(jié)果,返回結(jié)果的協(xié)議格式為:話單總行數(shù)⑶RTotalRoWS0X070X07每頁顯示的話單數(shù)PageCDRRows0x070x07 一頁話單記錄數(shù)據(jù),客戶端通過CDRTotalRows或者PageCDRRows計算出這次查詢請求得到的客戶端顯示話單需要的總頁數(shù),在客戶端初始化分頁顯示界面并顯示第一頁話單,之后執(zhí)行步驟6);
[0013]6)用戶點擊客戶端中需要顯示話單對應的頁碼后,客戶端發(fā)送包含頁碼信息的消息到服務端請求該頁的話單數(shù)據(jù),請求協(xié)議格式為:命令碼0x070x07頁碼號;服務端收到請求信息,解析請求數(shù)據(jù)獲取頁碼號,通過頁碼號從CacheM內(nèi)存區(qū)域中獲取該頁面與頁碼對應話單文件在臨時文件中的數(shù)據(jù)位置的映射,通過映射獲取該頁話單文件在臨時文件中的實際位置IndexPos,服務端進程打開臨時文件,移動文件位置到IndexPos,讀取PageCDRRows行話單數(shù)據(jù),把讀取的數(shù)據(jù)返回到客戶端,客戶端解析獲取到的話單數(shù)據(jù)并進行顯示。
[0014]采用上述技術方案后,本發(fā)明具有以下有益效果:本發(fā)明的客戶端分開請求、服務端對解碼結(jié)果建立索引并根據(jù)客戶端需求分頁向客戶端傳送解碼結(jié)果的方法,不但解決了計費系統(tǒng)瀏覽大文件以及瀏覽大數(shù)據(jù)量文件的難題,同時計費系統(tǒng)在查看大數(shù)據(jù)量的話單文件時,也有非常高的性能,且系統(tǒng)穩(wěn)定性高。
【專利附圖】
【附圖說明】
[0015]圖1話單解碼建立索引以及分頁查詢流程圖。
【具體實施方式】
[0016]下面根據(jù)說明書附圖和具體實施例對本發(fā)明作進一步的解釋。
[0017]如圖1所示,一種瀏覽解碼話單文件方法,步驟包括:
[0018]I)客戶端接收需要解碼話單文件的條件,并把條件按照協(xié)議格式組織成字節(jié)序,發(fā)送查詢請求命令到服務端,話單查詢請求協(xié)議格式是二進制序列,條件通過0x070x07兩個字節(jié)分開,之后執(zhí)行步驟2);
[0019]2)服務端接收到查詢請求,對請求命令進行解碼,解碼結(jié)果寫在服務端的臨時文件中,每條話單寫一行,對解碼結(jié)果的臨時文件建立索引,獲取查詢請求條件,然后根據(jù)查詢請求中的時間條件選擇滿足時間的話單文件,對文件進行解碼,獲取話單,客戶端接收到的用戶輸入的條件,當話單滿足查詢請求的條件,則把話單按行寫入臨時文件,之后執(zhí)行步驟3),否則直接執(zhí)行步驟3);
[0020]3)當解碼結(jié)束時,則執(zhí)行步驟4),否則執(zhí)行步驟2);
[0021]4)對臨時文件建立索引,服務端讀取客戶端每頁顯示話單條數(shù)的配置,得到客戶端每頁顯示話單數(shù)的值N ;解碼結(jié)果有M條話單,客戶端每頁顯示N條話單,索引段記錄數(shù)為:X=M/N ;服務端內(nèi)存建立一個保存索引段與每頁話單所在臨時文件中位置的映射關系Map序列,每頁話單所在臨時文件中位置計算方式為:按行讀取臨時文件,記錄讀取每行話單在臨時文件中的位置,建立頁碼序號PageIndex與頁碼對應臨時文件中話單位置⑶RPos的映射緩存區(qū)CacheM,對話單文件進行預讀取,對讀取的話單文件行數(shù)Row與N取模,當模的值為O,則建立一個頁碼序號PageIndex與話單所在文件中位置⑶RPos的map實例,把這個實例放入到CacheM中,同時頁碼序號PageIndex加I,通過這種預讀取的方式,對話單解碼結(jié)果臨時文件按頁建立索引,之后執(zhí)行步驟5),否則直接執(zhí)行步驟5);
[0022]5)話單解碼結(jié)果臨時文件按頁建立索引完成后,向客戶端查詢請求返回查詢結(jié)果,返回結(jié)果的協(xié)議格式為:話單總行數(shù)⑶RTotalRoWS0X070X07每頁顯示的話單數(shù)PageCDRRows0x070x07 一頁話單記錄數(shù)據(jù),客戶端通過CDRTotalRows或者PageCDRRows計算出這次查詢請求得到的客戶端顯示話單需要的總頁數(shù),在客戶端初始化分頁顯示界面并顯示第一頁話單,之后執(zhí)行步驟6);
[0023]6)用戶點擊客戶端中需要顯示話單對應的頁碼后,客戶端發(fā)送包含頁碼信息的消息到服務端請求該頁的話單數(shù)據(jù),請求協(xié)議格式為:命令碼0x070x07頁碼號;服務端收到請求信息,解析請求數(shù)據(jù)獲取頁碼號,通過頁碼號從CacheM內(nèi)存區(qū)域中獲取該頁面與頁碼對應話單文件在臨時文件中的數(shù)據(jù)位置的映射,通過映射獲取該頁話單文件在臨時文件中的實際位置IndexPos,服務端進程打開臨時文件,移動文件位置到IndexPos,讀取PageCDRRows行話單數(shù)據(jù),把讀取的數(shù)據(jù)返回到客戶端,客戶端解析獲取到的話單數(shù)據(jù)并進行顯示。
【權利要求】
1.一種瀏覽解碼話單文件方法,其特征在于步驟包括: 1)客戶端接收需要解碼話單文件的條件,并把條件按照協(xié)議格式組織成字節(jié)序,發(fā)送查詢請求命令到服務端,話單查詢請求協(xié)議格式是二進制序列,條件通過0x070x07兩個字節(jié)分開,之后執(zhí)行步驟2); 2)服務端接收到查詢請求,對請求命令進行解碼,獲取查詢請求條件,然后根據(jù)查詢請求中的時間條件選擇滿足時間的話單文件,對文件進行解碼,獲取話單,客戶端接收到的用戶輸入的條件,當話單滿足查詢請求的條件,則把話單按行寫入臨時文件,之后執(zhí)行步驟3),否則直接執(zhí)行步驟3); 3)當解碼結(jié)束時,則執(zhí)行步驟4),否則執(zhí)行步驟2); 4)對臨時文件建立索引,服務端讀取客戶端每頁顯示話單條數(shù)的配置,得到客戶端每頁顯示話單數(shù)的值N ;建立頁碼序號PageIndex與頁碼對應臨時文件中話單位置⑶RPos的映射緩存區(qū)CacheM,對話單文件進行預讀取,對讀取的話單文件行數(shù)Row與N取模,當模的值為0,則建立一個頁碼序號PageIndex與話單所在文件中位置⑶RPos的map實例,把這個實例放入到CacheM中,同時頁碼序號PageIndex加I,通過這種預讀取的方式,對話單解碼結(jié)果臨時文件按頁建立索引,之后執(zhí)行步驟5),否則直接執(zhí)行步驟5); 5)話單解碼結(jié)果臨時文件按頁建立索引完成后,向客戶端查詢請求返回查詢結(jié)果,返回結(jié)果的協(xié)議格式為:話單總行數(shù)⑶RTotalRoWS0X070X07每頁顯示的話單數(shù)PageCDRRows0x070x07 一頁話單記錄數(shù)據(jù),客戶端通過CDRTotalRows或者PageCDRRows計算出這次查詢請求得到的客戶端顯示話單需要的總頁數(shù),在客戶端初始化分頁顯示界面并顯示第一頁話單,之后執(zhí)行步驟6); 6)用戶點擊客戶端中需要顯示話單對應的頁碼后,客戶端發(fā)送包含頁碼信息的消息到服務端請求該頁的話單數(shù)據(jù),請求協(xié)議格式為:命令碼0x070x07頁碼號;服務端收到請求信息,解析請求數(shù)據(jù)獲取頁碼號,通過頁碼號從CacheM內(nèi)存區(qū)域中獲取該頁面與頁碼對應話單文件在臨時文件中的數(shù)據(jù)位置的映射,通過映射獲取該頁話單文件在臨時文件中的實際位置IndexPos,服務端進程打開臨時文件,移動文件位置到IndexPos,讀取PageCDRRows行話單數(shù)據(jù),把讀取的數(shù)據(jù)返回到客戶端,客戶端解析獲取到的話單數(shù)據(jù)并進行顯示。
【文檔編號】G06F17/30GK103699699SQ201410020836
【公開日】2014年4月2日 申請日期:2014年1月16日 優(yōu)先權日:2014年1月16日
【發(fā)明者】李曉芳, 彭建華, 莊燕濱, 肖賢建 申請人:常州工學院