專(zhuān)利名稱(chēng):一種電信海量話單數(shù)據(jù)存儲(chǔ)方法
技術(shù)領(lǐng)域:
本發(fā)明涉及電信數(shù)據(jù)的處理,具體是指一種電信海量話單數(shù)據(jù)存儲(chǔ)方法,包括電信數(shù)據(jù)的存儲(chǔ)結(jié)構(gòu)和編碼的方法。
背景技術(shù):
目前電信業(yè)務(wù)系統(tǒng)中詳單存儲(chǔ)格式都是定長(zhǎng)定格式,即記錄分條存放到文件,字段按照固有長(zhǎng)度按順序排列,如圖1所示。這樣做對(duì)系統(tǒng)處理相對(duì)簡(jiǎn)單,效率因轉(zhuǎn)換步驟少而相對(duì)較高。同時(shí)對(duì)系統(tǒng)維護(hù)人員和客戶(hù)而言,這種話單也比較容易直接讀取。但這種格式話單冗余度很高為了保證存放足夠的數(shù)據(jù),每個(gè)字段長(zhǎng)度以可能出現(xiàn)的字符的最大值設(shè)定,不夠最大值長(zhǎng)度的用空白填充。過(guò)大的數(shù)據(jù)冗余(并不代表相當(dāng)?shù)男畔⒘?對(duì)存儲(chǔ)、備份、管理、容災(zāi)都造成很大困難。另外,由于冗余數(shù)據(jù)也需要磁盤(pán)進(jìn)行傳輸,造成系統(tǒng)IO浪費(fèi)。定長(zhǎng)話單格式的存儲(chǔ)還造成復(fù)合話單存儲(chǔ)困難。定長(zhǎng)話單格式是一種“流”,話單字段順序存儲(chǔ),字段和字段間只有先后關(guān)系而沒(méi)有歸屬關(guān)系。但隨著電信業(yè)務(wù)的快速發(fā)展, 字段間關(guān)系逐漸有包含和從屬關(guān)系產(chǎn)生,目前處理方式是將一對(duì)多的從屬關(guān)系拆分成一對(duì)一的從屬關(guān)系后再采用定長(zhǎng)方式進(jìn)行存儲(chǔ)。這樣造成更多的數(shù)據(jù)冗余。
發(fā)明內(nèi)容
本發(fā)明所要解決的技術(shù)問(wèn)題是提供一種新的話單數(shù)據(jù)存儲(chǔ)方法,通過(guò)改變?cè)拞蔚拇鎯?chǔ)形式,減少數(shù)據(jù)的冗余。本發(fā)明解決上述技術(shù)問(wèn)題的技術(shù)方案如下一種電信海量話單數(shù)據(jù)存儲(chǔ)方法,包括如下步驟
步驟1 建立樹(shù)形話單數(shù)據(jù)存儲(chǔ)結(jié)構(gòu),其中樹(shù)形結(jié)構(gòu)的葉子用于存儲(chǔ)話單中各個(gè)字段的記錄,樹(shù)形結(jié)構(gòu)的節(jié)點(diǎn)用于對(duì)所述字段進(jìn)行分組;
步驟2 向所述樹(shù)形話單數(shù)據(jù)存儲(chǔ)結(jié)構(gòu)中添加數(shù)據(jù),將話單各個(gè)字段中的記錄根據(jù)字段名稱(chēng)添加到各個(gè)字段所對(duì)應(yīng)的葉子中。本發(fā)明的有益效果是采用樹(shù)形結(jié)構(gòu)替代傳統(tǒng)的定長(zhǎng)定格式的話單數(shù)據(jù)存儲(chǔ)形式,使得話單數(shù)據(jù)具有更好的擴(kuò)展能力,同時(shí)使數(shù)據(jù)的不同字段之間具有更靈活的從屬關(guān)系;通過(guò)樹(shù)形結(jié)構(gòu)的節(jié)點(diǎn)對(duì)字段進(jìn)行的分組,通過(guò)這些節(jié)點(diǎn)體現(xiàn)了數(shù)據(jù)分組間的層次和嵌套關(guān)系;當(dāng)修改或者插入新的字段數(shù)據(jù)時(shí),只需通過(guò)調(diào)整或者增加節(jié)點(diǎn)和葉子進(jìn)行數(shù)據(jù)插入,而傳統(tǒng)的定長(zhǎng)定格式的話單數(shù)據(jù),因?yàn)樽侄闻c字段間的順序是固定的,調(diào)整某個(gè)字段的位置或變更長(zhǎng)度將是一件十分困難的事情,這需要改動(dòng)讀取數(shù)據(jù)的相關(guān)程序以及對(duì)歷史數(shù)據(jù)進(jìn)行區(qū)別訪問(wèn)或全量格式轉(zhuǎn)換;另外,因?yàn)椴捎脴?shù)型結(jié)構(gòu)話單可以遞歸定義,所以對(duì)未來(lái)復(fù)雜的計(jì)費(fèi)業(yè)務(wù)具有很強(qiáng)的支撐能力;采用樹(shù)型的字段存儲(chǔ)方式應(yīng)用到電信海量話單數(shù)據(jù)存儲(chǔ)當(dāng)中,解決了電信數(shù)據(jù)存儲(chǔ)面臨的數(shù)據(jù)格式擴(kuò)展能力差、字段之間只存在先后關(guān)系而沒(méi)有包含關(guān)系的問(wèn)題。
進(jìn)一步,所述各個(gè)字段中的記錄采用TLV (Tag-Length-Value)的流碼組織或者TV (Tag-Value)的標(biāo)記式文本組織。采用上述進(jìn)一步方案的有益效果是,降低了數(shù)據(jù)在讀取和處理過(guò)程中的額外開(kāi)銷(xiāo),并且減少了數(shù)據(jù)的冗余。
圖1為目前的定長(zhǎng)話單存儲(chǔ)格式示意圖2為本發(fā)明的方法中與圖1對(duì)應(yīng)的樹(shù)型話單格式示意圖; 圖3A為本發(fā)明的方法中采用的TLV編碼方案的第一實(shí)施例示意圖; 圖3B為本發(fā)明的方法中采用的TLV編碼方案的第二實(shí)施例示意圖; 圖4為采用本發(fā)明的方法,利用既有開(kāi)發(fā)包實(shí)現(xiàn)變長(zhǎng)數(shù)據(jù)編碼的流程圖; 圖5為采用本發(fā)明的方法,利用既有開(kāi)發(fā)包實(shí)現(xiàn)變長(zhǎng)數(shù)據(jù)解碼的流程圖。
具體實(shí)施例方式以下結(jié)合附圖對(duì)本發(fā)明的原理和特征進(jìn)行描述,所舉實(shí)例只用于解釋本發(fā)明,并非用于限定本發(fā)明的范圍。本發(fā)明所提供的電信海量話單數(shù)據(jù)存儲(chǔ)方法,主要包括
步驟1 建立樹(shù)形話單數(shù)據(jù)存儲(chǔ)結(jié)構(gòu),其中樹(shù)形結(jié)構(gòu)的葉子用于存儲(chǔ)話單中各個(gè)字段的記錄,樹(shù)形結(jié)構(gòu)的節(jié)點(diǎn)用于對(duì)所述字段進(jìn)行分組;
步驟2 向所述樹(shù)形話單數(shù)據(jù)存儲(chǔ)結(jié)構(gòu)中添加數(shù)據(jù),將話單各個(gè)字段中的記錄根據(jù)字段名稱(chēng)添加到各個(gè)字段所對(duì)應(yīng)的葉子中。其中,各個(gè)字段中的記錄采用TLV (Tag-Length-Value )的流碼組織或者TV (Tag-Value)的標(biāo)記式文本組織。步驟1中,節(jié)點(diǎn)對(duì)字段進(jìn)行的分組,使節(jié)點(diǎn)體現(xiàn)出了數(shù)據(jù)分組間的層次和嵌套關(guān)系。如圖1所示,目前的電信計(jì)費(fèi)記錄基本都以定長(zhǎng)方式存儲(chǔ),字段與字段間存在固定順序,每個(gè)字段長(zhǎng)度均固定,并且以此字段中數(shù)據(jù)的最大長(zhǎng)度做為字段的默認(rèn)長(zhǎng)度。其中所有字段均為可見(jiàn)字符,日期型、整型或浮點(diǎn)型字段也都轉(zhuǎn)換為可見(jiàn)字符進(jìn)行展現(xiàn)。如此編碼顯然每條記錄的長(zhǎng)度均相同,每個(gè)字段起始位置也相同,方便直接對(duì)文件記錄進(jìn)行操作, 比如計(jì)算記錄數(shù)或截取某個(gè)字段等等。但因?yàn)樽侄伍L(zhǎng)度采用的是字段內(nèi)數(shù)據(jù)的最大長(zhǎng)度, 因此記錄中存儲(chǔ)的并非全部為有效數(shù)據(jù),浪費(fèi)字節(jié)數(shù)較多;另外,因?yàn)樽侄闻c字段間的順序是固定的,調(diào)整某個(gè)字段的位置或變更長(zhǎng)度將是一件十分困難的事情,這需要改動(dòng)讀取數(shù)據(jù)的相關(guān)程序以及對(duì)歷史數(shù)據(jù)進(jìn)行區(qū)別訪問(wèn)或全量格式轉(zhuǎn)換。圖2為本發(fā)明的方法中,與圖1的定長(zhǎng)話單存儲(chǔ)格式相對(duì)應(yīng)的樹(shù)形話單格式。計(jì)費(fèi)數(shù)據(jù)存儲(chǔ)結(jié)構(gòu)的改造,主要將圖1這種定長(zhǎng)定格式的一維數(shù)據(jù),改造成圖2所示的樹(shù)型二維話單數(shù)據(jù),樹(shù)形存儲(chǔ)的數(shù)據(jù)中的字段均為樹(shù)的葉子,樹(shù)的非葉子結(jié)點(diǎn)則用于字段的分組和管理。樹(shù)型結(jié)構(gòu)的字段多少和順序沒(méi)有強(qiáng)制要求,并且因?yàn)闃?shù)型話單可以遞歸定義,所以對(duì)未來(lái)復(fù)雜的計(jì)費(fèi)業(yè)務(wù)有很強(qiáng)的支撐能力。圖1和圖2說(shuō)明了從普通定長(zhǎng)話單轉(zhuǎn)換為樹(shù)型話單的過(guò)程。圖1描述的種定
4長(zhǎng)格式的數(shù)據(jù)組織方式,話單中字段之間先后順序必須固定,字段位置決定字段含義,字段個(gè)數(shù)無(wú)法靈活擴(kuò)展。圖2則在圖1字段的基礎(chǔ)上增加若干邏輯控制節(jié)點(diǎn),控制節(jié)點(diǎn)中不存儲(chǔ)數(shù)據(jù),只標(biāo)識(shí)字段之間從屬關(guān)系??刂乒?jié)點(diǎn)可以是實(shí)例化的數(shù)據(jù)節(jié)點(diǎn),比如TLV (Tag-Length-Value)結(jié)構(gòu)中定義的控制類(lèi)節(jié)點(diǎn);也可以是虛擬的數(shù)據(jù)分組描述,比如XML 方式的文本描述。通過(guò)控制節(jié)點(diǎn)的加入,結(jié)合配置文件中對(duì)數(shù)據(jù)結(jié)構(gòu)預(yù)定義類(lèi)型,實(shí)現(xiàn)圖1 中各個(gè)字段分組和建立歸屬關(guān)系。采用圖2所示的樹(shù)型話單格式后,數(shù)據(jù)編碼可以采用更新的快速編碼方案,以降低在數(shù)據(jù)在讀取和處理過(guò)程中的額外開(kāi)銷(xiāo)。新數(shù)據(jù)編碼方法,采用定長(zhǎng)屬性域、變長(zhǎng)數(shù)據(jù)域的方式進(jìn)行編碼,編碼方案采用“屬性一值對(duì)(Tag-Value Pairs)"實(shí)現(xiàn)對(duì)上述樹(shù)型結(jié)構(gòu)的存儲(chǔ)。Tag-Value Pairs (TVP)實(shí)際是通過(guò)屬性中的長(zhǎng)度屬性,實(shí)現(xiàn)樹(shù)的當(dāng)前節(jié)點(diǎn)在兄弟節(jié)點(diǎn)中位置信息的。而TVP結(jié)構(gòu)本身是對(duì)數(shù)型數(shù)據(jù)結(jié)構(gòu)的先序遍歷結(jié)果,因此TVP方式的線性存儲(chǔ),同時(shí)具備了樹(shù)型數(shù)據(jù)結(jié)構(gòu)的先序和中序遍歷結(jié)果,所以可以唯一確定一顆有序樹(shù)。屬性編碼中的標(biāo)記屬性(Tag)為8位無(wú)符號(hào)整型,可以有256種不同編碼方式。 由于Tag在本編碼規(guī)則的配置文檔中定義成上下文相關(guān),當(dāng)話單結(jié)構(gòu)分為η層時(shí),理論可用 Tag將有256的η次方個(gè)。因此在每個(gè)話單子層區(qū)分256個(gè)不同標(biāo)簽已經(jīng)足夠。屬性編碼中的長(zhǎng)度屬性(Length)為變長(zhǎng)無(wú)符號(hào)整型數(shù)。如果長(zhǎng)度第一個(gè)bit位是0,則表示長(zhǎng)度占用15bit(如圖3A所示),如果第一個(gè)bit位是1,則表示長(zhǎng)度占用31bit (如圖:3B所示)。普通單條詳單存儲(chǔ),Mbit的長(zhǎng)度(31)已經(jīng)足夠,對(duì)特殊應(yīng)用場(chǎng)景下的復(fù)合話單,31bit (2G)的長(zhǎng)度才有實(shí)際存在意義。編碼中Value為變長(zhǎng)的二進(jìn)制流。二進(jìn)制流對(duì)應(yīng)的數(shù)據(jù)類(lèi)型,則由配置文檔中定義的數(shù)據(jù)類(lèi)型進(jìn)行轉(zhuǎn)換。本發(fā)明將樹(shù)型的字段存儲(chǔ)方式應(yīng)用到電信海量數(shù)據(jù)存儲(chǔ)當(dāng)中,解決電信數(shù)據(jù)存儲(chǔ)面臨的數(shù)據(jù)格式擴(kuò)展能力差、字段之間只存在先后關(guān)系而沒(méi)有包含關(guān)系的問(wèn)題。樹(shù)型結(jié)構(gòu)的存儲(chǔ)方式是一種數(shù)據(jù)組織方案,不是特指某種基于此方案的編碼策略?;诖朔桨傅木幋a策略可以是TLV(Tag-Length-Value)的流碼組織,比如上面列出的快速數(shù)據(jù)編碼方案; 也可以是TV(Tag-Value)的標(biāo)記式文本組織,比如類(lèi)似XML的標(biāo)記類(lèi)文本,不指定段落長(zhǎng)度,而是通過(guò)在段落結(jié)束時(shí)增加段落結(jié)束的標(biāo)記(note)標(biāo)識(shí)段落結(jié)束??焖俚腡LV編碼方法,是一種快速實(shí)現(xiàn)數(shù)據(jù)樹(shù)型存儲(chǔ)的編碼方案,以實(shí)際進(jìn)行高效的信息編解碼。TLV (Tag-Length-Value)編碼中標(biāo)簽(Tag)是關(guān)于標(biāo)簽和編碼格式的信息; 長(zhǎng)度(Length)定義數(shù)值的長(zhǎng)度;內(nèi)容(Value)表示實(shí)際的數(shù)值。因此,一個(gè)編碼值又稱(chēng) TLV (Tag-Length-Value)三元組。TLV編碼就是指先對(duì)Tag編碼,再對(duì)Length編碼,最后對(duì) Value編碼。本發(fā)明采用新的編碼轉(zhuǎn)換,詳單具備較靈活的字段擴(kuò)充能力。由于編碼獲取字段值的方式是通過(guò)Tag做索引獲取,因此只要新的話單結(jié)構(gòu)中定義的Tag是原話單結(jié)構(gòu)定義 Tag的超集,則在詳單格式升級(jí)后,自然兼容舊話單格式,避免對(duì)海量數(shù)據(jù)的轉(zhuǎn)換工作。對(duì)整型或字節(jié)流類(lèi)型的數(shù)據(jù),統(tǒng)一按照二進(jìn)制方式進(jìn)行存儲(chǔ),極大降低了對(duì)存儲(chǔ)的消耗。與定長(zhǎng)話單的存儲(chǔ)格式冗余分析對(duì)比如下
以安徽移動(dòng)業(yè)務(wù)支撐系統(tǒng)的詳單格式為例,定長(zhǎng)編碼話單中,普通語(yǔ)音詳單共計(jì)39個(gè)數(shù)據(jù)字段,每條話單定義長(zhǎng)度固定465字節(jié)。隨機(jī)取一批語(yǔ)音話單文件,統(tǒng)計(jì)其中空格字符和換行符的個(gè)數(shù)。然后計(jì)算所有文件大小,用空格符和換行符占總文件大小的比例來(lái)計(jì)算文件中記錄的冗余度。經(jīng)統(tǒng)計(jì),語(yǔ)音話單冗余度38. 5%,短信話單冗余度51. 4%,彩信話單冗余度60. 2 %,其他業(yè)務(wù)數(shù)據(jù)量相對(duì)較小暫未統(tǒng)計(jì)。在新的數(shù)據(jù)存儲(chǔ)方案中,每個(gè)字段平均冗余1 + 2 (Tag+Length)個(gè)字節(jié),在普通語(yǔ)音類(lèi)詳單中,39個(gè)字段將產(chǎn)生39X3個(gè)字節(jié)的冗余數(shù)據(jù)。將上述定長(zhǎng)話單中非空格和非換行符的數(shù)據(jù)量,加上(39X3X話單數(shù))個(gè)冗余數(shù)據(jù),在與(39X3X話單數(shù))做比計(jì)算冗余系數(shù),得到語(yǔ)音在新的話單格式中冗余度約26. 7%,短信話單冗余度26. 95%,彩信話單冗余度40. 2% ο由此可見(jiàn),新的編碼方式雖然引入部分控制數(shù)據(jù)造成一定的數(shù)據(jù)冗余,但冗余度較原有的定長(zhǎng)話單冗余度還要低得多。換句話說(shuō),即存儲(chǔ)相同數(shù)據(jù)量的詳單數(shù)據(jù),新編碼詳單將占用更少的存儲(chǔ)資源。對(duì)于新編碼格式的編碼和解碼效率,單進(jìn)程單線程,在CPU主頻1. 65GHz的主機(jī)上效率不低于7800條/秒,達(dá)到海量數(shù)據(jù)處理效率的要求。圖3A和圖;3B的快速編碼方案,其對(duì)應(yīng)軟件開(kāi)發(fā)包的名字為FEDX (Flexible & Extensible Data expression),由北京神州數(shù)碼思特奇信息技術(shù)股份有限公司開(kāi)發(fā)。這種快速編碼方案能夠在滿(mǎn)足電信領(lǐng)域詳單、賬單類(lèi)數(shù)據(jù)特征(記錄數(shù)多,以?xún)|計(jì);但單條記錄長(zhǎng)度不大,一般不超過(guò)1MB)的前提下,提供足夠高的編解碼效率和最小的編解碼系統(tǒng)開(kāi)銷(xiāo)。 FEDX數(shù)據(jù)編碼方法,采用定長(zhǎng)Tag,變長(zhǎng)Length的方式進(jìn)行編碼。編碼中Tag為8位無(wú)符號(hào)整型,可以有256種不同編碼方式。由于Tag在新編碼規(guī)則的配置文檔中定義成上下文相關(guān),當(dāng)話單結(jié)構(gòu)分為η層時(shí),理論可用Tag將有256的η次方個(gè)。因此在每個(gè)話單子層區(qū)分256個(gè)不同標(biāo)簽對(duì)電信計(jì)費(fèi)行業(yè)已經(jīng)足夠。編碼中Length為變長(zhǎng)無(wú)符號(hào)整型數(shù)。如果長(zhǎng)度第一個(gè)bit位是0,則表示長(zhǎng)度占用15bit,如果第一個(gè)bit位是1,則表示長(zhǎng)度占用 31bit。普通單條詳單存儲(chǔ),Mbit的長(zhǎng)度(31)已經(jīng)足夠,對(duì)特殊應(yīng)用場(chǎng)景下的復(fù)合話單, 31bit (2G)的長(zhǎng)度才有實(shí)際存在意義。圖4為FEDX產(chǎn)品在進(jìn)行TLV數(shù)據(jù)編碼時(shí)的開(kāi)發(fā)流程實(shí)現(xiàn)。圖4中所示的編碼過(guò)程如下
1、正確安裝FEDX產(chǎn)品開(kāi)發(fā)包;
2、設(shè)置相關(guān)環(huán)境變量
FEDX_CONFIG_NAME 此變量設(shè)置的是FEDX的XML配置文件名; FEDX_CONFIG_PATH 此變量設(shè)置的是FEDX的XML配置文件路徑; FEDX_H0ME 此變量設(shè)置的是FEDX的安裝目錄; FEDX_VERSI0N 此變量設(shè)置的是FEDX的當(dāng)前版本;
3、開(kāi)始調(diào)用開(kāi)發(fā)包環(huán)境進(jìn)行編碼首先調(diào)用fedX_getC0nf和fecb^paramhit進(jìn)行相關(guān)變量和數(shù)據(jù)的初始化;
4、調(diào)用fecb^getHeadNode根據(jù)配置文件描述的業(yè)務(wù)類(lèi)型初始化一條變長(zhǎng)話單句柄;
5、多次調(diào)用fedLsetFieldValueByName按照字段名稱(chēng)向空話單中填寫(xiě)數(shù)據(jù);
6、調(diào)用fedX_Write_mem_reC0rd將這條樹(shù)型話單進(jìn)行序列化操作,形成TLV編碼的數(shù)據(jù)流;
7、完成序列化后即完成FEDX的以此快速TLV編碼,調(diào)用fedx_freeRecord和fedx_freeGlobalMem進(jìn)行內(nèi)存的清理和釋放; 8、程序退出;
實(shí)例完整程序參見(jiàn)附錄1。圖5為FEDX產(chǎn)品在進(jìn)行TLV數(shù)據(jù)解碼時(shí)的開(kāi)發(fā)流程實(shí)現(xiàn)。圖5中所示的解碼過(guò)程如下
1、正確安裝FEDX產(chǎn)品開(kāi)發(fā)包;
2、設(shè)置相關(guān)環(huán)境變量
FEDX_CONFIG_NAME 此變量設(shè)置的是FEDX的XML配置文件名; FEDX_CONFIG_PATH 此變量設(shè)置的是FEDX的XML配置文件路徑; FEDX_H0ME 此變量設(shè)置的是FEDX的安裝目錄; FEDX_VERSI0N 此變量設(shè)置的是FEDX的當(dāng)前版本;
3、開(kāi)始調(diào)用開(kāi)發(fā)包環(huán)境進(jìn)行編碼首先調(diào)用fedX_getC0nf和fecb^paramhit進(jìn)行相關(guān)變量和數(shù)據(jù)的初始化;
4、調(diào)用fedxJoadMem將FEDX編碼文件中的一條!7EDX編碼的完整記錄讀入內(nèi)存;
5、調(diào)用fedLgetHeadNode獲取并識(shí)別當(dāng)前FEDX編碼記錄的記錄類(lèi)型以及此類(lèi)型與配置文件中預(yù)定義的話單結(jié)構(gòu)進(jìn)行匹配;
6、調(diào)用fedX_read_mem_reC0rd將當(dāng)前話單平面化(解碼),生成樹(shù)型話單結(jié)構(gòu)供后續(xù)訪
問(wèn);
7、多次調(diào)用fedLgetFieldValueByName按照字段名稱(chēng)進(jìn)行數(shù)據(jù)獲?。?br>
8、完成數(shù)據(jù)讀取后,即完成對(duì)FEDX的快速解碼過(guò)程,調(diào)用fedx_freeReC0rd和fedx_ freeGlobalMem進(jìn)行內(nèi)存的清理和釋放;
8、程序退出。實(shí)例完整程序參見(jiàn)附錄2。 附錄1
編碼程序示例 f edx_params_f edx_param; FILE^fp=NULL; intlength=0;
unsignedchar氺re su11=NULL;
charfieldName[128+1];
charpath[128+1];
charfieldValue[128+1];
fedx—getConf ( "/pkg/cfg/config. xml,,);
fedx—paramlnit (&s_fedx—param);
fp=fopen( “/data/test. 2008”,”wb”);
strcpy (fieldName,,,system—type,,);
strcpy (path, NULL);
strcpy (f ieldValue,,,vc,,);if(fedx_getHeadNode(&s_fedx_param, fieldValue)!=0)
{
fprintf (stderr,〃pCurrNodewrong!\n〃); return-1;
ι
if (fedx_setFieIdValueByName(&s_fedx_param, fieldValue, fieldName,path)!=0)
{
printf (〃fedx_setFieldValueByNamewrong\n〃); break;
ι
strcpy (fieldName, ” msisdn,,);
strcpy (path, NULL);
strcpy (fieldValue, ” 13552272654”);
if (fedx_setFieIdValueByName(&s_fedx_param, fieldValue, fieldName, path) !=0)
{
printf(〃fedx_setFieldValueByNamewrong\n〃); break;
ι
if(result=fedx—write—mem—record(&s_fedx—param,&length)!=NULL)
{
printf (〃fedx—write—mem—recordwrong\n〃); break;
ι
fwrite (result,sizeof (unsignedchar),length, fp); fflush(fp);
fedx_freeRecord (&s_fedx_param); fclose (fp); fedx_freeGlobalMem(); 附錄2
解碼程序示例
fedx_params_fedx_param;
FILE^fp=NULL;
charfieldName[128+1];
charpath[128+1];
charfieldValue[128+1];
fedx_getConf ( "/pkg/cfg/config. xml,,);
fedx_paramlnit(&s_fedx_param);
fp=fopen( "/data/test. 2008”,”rb”);
while (fedx_loadMem(&s_fedx_param, fp)!=0)
權(quán)利要求
1.一種電信海量話單數(shù)據(jù)存儲(chǔ)方法,包括如下步驟步驟1 建立樹(shù)形話單數(shù)據(jù)存儲(chǔ)結(jié)構(gòu),其中樹(shù)形結(jié)構(gòu)的葉子用于存儲(chǔ)話單中各個(gè)字段的記錄,樹(shù)形結(jié)構(gòu)的節(jié)點(diǎn)用于對(duì)所述字段進(jìn)行分組;步驟2 向所述樹(shù)形話單數(shù)據(jù)存儲(chǔ)結(jié)構(gòu)中添加數(shù)據(jù),將話單各個(gè)字段中的記錄根據(jù)字段名稱(chēng)添加到各個(gè)字段所對(duì)應(yīng)的葉子中。
2.根據(jù)權(quán)利要求1所述的電信海量話單數(shù)據(jù)存儲(chǔ)方法,其特征在于所述各個(gè)字段中的記錄采用TLV的流碼組織或者TV的標(biāo)記式文本組織。
全文摘要
本發(fā)明涉及一種電信海量話單數(shù)據(jù)存儲(chǔ)方法,包括步驟1建立樹(shù)形話單數(shù)據(jù)存儲(chǔ)結(jié)構(gòu),其中樹(shù)形結(jié)構(gòu)的葉子用于存儲(chǔ)話單中各個(gè)字段的記錄,樹(shù)形結(jié)構(gòu)的節(jié)點(diǎn)用于對(duì)所述字段進(jìn)行分組和管理;步驟2向所述樹(shù)形話單數(shù)據(jù)存儲(chǔ)結(jié)構(gòu)中添加數(shù)據(jù),將話單各個(gè)字段中的記錄根據(jù)字段名稱(chēng)添加到各個(gè)字段所對(duì)應(yīng)的葉子中。其中,各個(gè)字段中的記錄采用TLV的流碼組織或者TV的標(biāo)記式文本組織。采用本發(fā)明提供的數(shù)據(jù)存儲(chǔ)方法,使得話單數(shù)據(jù)具有更好的擴(kuò)展能力,同時(shí)使數(shù)據(jù)的不同字段之間具有更靈活的從屬關(guān)系;減少了數(shù)據(jù)冗余;解決了電信數(shù)據(jù)存儲(chǔ)面臨的數(shù)據(jù)格式擴(kuò)展能力差、字段之間只存在先后關(guān)系而沒(méi)有包含關(guān)系的問(wèn)題。
文檔編號(hào)G06F17/30GK102156743SQ201110097349
公開(kāi)日2011年8月17日 申請(qǐng)日期2011年4月18日 優(yōu)先權(quán)日2011年4月18日
發(fā)明者張奇?zhèn)?申請(qǐng)人:北京神州數(shù)碼思特奇信息技術(shù)股份有限公司