目前國內(nèi)各電信運(yùn)營商的計(jì)費(fèi)系統(tǒng)基本都實(shí)現(xiàn)了省級集中,電信用戶可以查詢最近幾個(gè)月的話費(fèi)詳單,但由于數(shù)據(jù)量過于龐大,各省運(yùn)營商一般不再提供更早的話單查詢服務(wù),只是由各地市公司自行備份數(shù)據(jù),自行處理。如果用戶需要查詢更早的話單記錄,欠費(fèi)催繳人員需要查詢欠費(fèi)用戶多年以前的歷史話單作為催繳憑據(jù),以及其他一些類似的需要,怎么辦?這是擺在各地市電信公司面前的一個(gè)問題。
背景分析
在地市級電信公司,歷史話單數(shù)據(jù)有以下一些特性,也可以說是實(shí)現(xiàn)備份查詢方案的關(guān)鍵點(diǎn)。
較快的數(shù)據(jù)增長速度:隨著用戶數(shù)和業(yè)務(wù)的擴(kuò)展,話單數(shù)據(jù)容量呈幾何級數(shù)增長,一般業(yè)務(wù)增長較快的地市公司,如果不壓縮的話,最近幾年的話單數(shù)據(jù)都有上百GB的容量。
靜態(tài)數(shù)據(jù):歷史話單數(shù)據(jù)從計(jì)費(fèi)系統(tǒng)落單后,除非出現(xiàn)重大變故,一般不易發(fā)生變化。用大型關(guān)系數(shù)據(jù)庫存儲這種數(shù)據(jù)略顯浪費(fèi),而且數(shù)據(jù)庫空間有限,不可能無限存儲所有歷史數(shù)據(jù)。
查詢用戶單一和不確定性:個(gè)別用戶可能由于特殊的原因,需要查詢自己很早以前的話單記錄,或者是欠費(fèi)催繳人員,需要查詢某個(gè)欠費(fèi)用戶多年以前的歷史話單作為催繳憑據(jù),等等。
查詢響應(yīng)要求一般:用戶對查詢的響應(yīng)速度要求不高,只要有數(shù)據(jù)就行,不會在乎等待十分鐘還是一天。
5.查詢時(shí)間范圍跨度長:一般如果用戶要查詢自己的歷史話單,時(shí)間跨度都會要求盡可能大,有可能要查自己從開戶以來所有話單記錄。圖1是某地市電信公司某年的用戶查詢歷史話單次數(shù)的分布統(tǒng)計(jì),可以看出有兩個(gè)臺階,查詢半年前到一年半前的次數(shù)較多,查詢一年半前到三年半前的次數(shù)次之,超過三年半的則趨近于零。
圖1 某地市電信公司某年的用戶查詢歷史話單次數(shù)的分布圖
方案設(shè)計(jì)
方案概述
針對歷史話單的上述特性,筆者提出了實(shí)現(xiàn)歷史話單備份查詢的基本思路。采用VisualFoxpro軟件編程,將話單數(shù)據(jù)分月分號段存成一個(gè)個(gè)的dbf文件,并用壓縮軟件壓縮,以硬盤和光盤存儲壓縮文件,在索引表中記錄每個(gè)壓縮文件的物理存放位置,實(shí)現(xiàn)最近兩年數(shù)據(jù)從硬盤快速檢索、兩年以上數(shù)據(jù)從光盤海量檢索的功能。
備份方法
將關(guān)系數(shù)據(jù)庫的話單記錄按月按萬號段進(jìn)行存儲,如“13912340000~13912349999”就是一個(gè)萬號段,先將該號段的數(shù)據(jù)存成一個(gè)dbf文件,文件名形如“1391234_YYYYMM.dbf”,并以gzip壓縮,生成“1391234_YYYYMM.dbf.gz”,相同月份的文件都存放在目錄名為當(dāng)月“YYYYMM”的子目錄內(nèi)。
之所以按這種方式存儲數(shù)據(jù),是因?yàn)闅v史話單查詢應(yīng)用一般只查某個(gè)號碼在某兩個(gè)月份之間的數(shù)據(jù)。文件壓縮可以節(jié)省磁盤空間,按月和按號段存儲相當(dāng)于數(shù)據(jù)庫的分區(qū)操作,而且分區(qū)相對合適,壓縮文件的字節(jié)量在幾十MB到幾百M(fèi)B之間,相對一個(gè)上GB的大文件,可以節(jié)省不少文件拷貝、解壓縮等操作的開銷。隨著用戶數(shù)據(jù)量的增長,某些號段可能需要采用千號段甚至百號段的規(guī)模來形成壓縮文件,這樣可以將壓縮文件的字節(jié)量控制在較小的區(qū)間內(nèi)。另外由于話單數(shù)據(jù)過于龐大,單日數(shù)據(jù)另存為dbf就可能超過2GB,超出VisualFoxpro軟件的處理極限,此時(shí)必須在關(guān)系數(shù)據(jù)庫中將話單表按號段分區(qū)存儲,再按分區(qū)導(dǎo)成dbf,即避免文件容量問題,又提高了導(dǎo)出速度。
在關(guān)系數(shù)據(jù)庫中創(chuàng)建索引日志表,記錄各月各號段壓縮文件的相關(guān)信息,包括月份、文件名、起始號碼、截止號碼、存放路徑、光盤標(biāo)簽,用于快速檢索某個(gè)號碼某月數(shù)據(jù)的存放路徑或光盤標(biāo)簽。
查詢方法
在關(guān)系數(shù)據(jù)庫中創(chuàng)建查詢?nèi)罩颈恚糜谟涗浢看尾樵兊娜罩,包括號碼、話單起始時(shí)間、話單截止時(shí)間、查詢者、查詢時(shí)間(如圖2所示)。將光盤盤符作為一個(gè)預(yù)設(shè)參數(shù),用于查詢光盤數(shù)據(jù)。查詢時(shí)以查詢起始時(shí)間開始,依次檢索當(dāng)月歷史話單壓縮文件的存放位置和備份光盤的標(biāo)簽,如果文件不在本機(jī)硬盤,則提示插入相應(yīng)標(biāo)簽的光盤到預(yù)設(shè)光驅(qū)盤符,在介質(zhì)上找到文件后,將文件拷到臨時(shí)目錄,再解壓縮,查詢到記錄后,追加另存到一個(gè)目標(biāo)文件,如此反復(fù)直到循環(huán)結(jié)束,最后記錄查詢?nèi)罩,并提交目?biāo)文件。查詢單個(gè)號碼歷史數(shù)據(jù)的流程圖如下。
圖2 在關(guān)系數(shù)據(jù)庫中查詢單個(gè)號碼歷史數(shù)據(jù)的流程圖
此備份查詢方案針對歷史話單特性,使用較少的投入,即可以較快地速度檢索某個(gè)用戶號碼在任意時(shí)間段的話單記錄,將各月話單數(shù)據(jù)一次性按號段壓縮備份,平時(shí)只要避免介質(zhì)損壞,備份文件就可以長期多次使用,從而實(shí)現(xiàn)了超長年限歷史話單的快速查詢。