亚洲成年人黄色一级片,日本香港三级亚洲三级,黄色成人小视频,国产青草视频,国产一区二区久久精品,91在线免费公开视频,成年轻人网站色直接看

一種基于內(nèi)存的xml腳本緩存容器的制作方法

文檔序號(hào):6601356閱讀:480來源:國知局
專利名稱:一種基于內(nèi)存的xml腳本緩存容器的制作方法
技術(shù)領(lǐng)域
本發(fā)明涉及利用內(nèi)存實(shí)現(xiàn)XML腳本的緩沖存取機(jī)制,具體說是一種基于內(nèi)存的 XML腳本緩存容器。尤指基于XML的電信業(yè)務(wù)腳本的緩存,及其性能提升。
背景技術(shù)
本發(fā)明中的名詞解釋如下XML, extensible Markup Language,可擴(kuò)展標(biāo)記語言;DOM, Document Object Model, XML 文檔對(duì)象模型;LRU, Least Recently Used,最近最久未使用置換算法;HashTable,哈希表,一種根據(jù)對(duì)象的特征進(jìn)行定位的數(shù)據(jù)結(jié)構(gòu);Double Linked List,雙向鏈表,數(shù)據(jù)結(jié)構(gòu)鏈表的一種,它的每個(gè)數(shù)據(jù)結(jié)點(diǎn)中都有 兩個(gè)指針,分別指向直接后繼和直接前驅(qū);AddRef and Release,引用計(jì)數(shù),一種共享資源時(shí)的計(jì)數(shù)方法;Jeff Bonwick' s slab allocator,杰夫瑞 邦維克著分層式內(nèi)存分配算法,一 種性能優(yōu)越的分層形式的內(nèi)存分配算法。出自“TheSlab Allocator =An Object-Caching Kernel Memory Allocator (1994) "Jeff Bonwick 最初的論文;XML(extensible Markup Language)又稱可擴(kuò)展標(biāo)記語言,是從標(biāo)準(zhǔn)通用置標(biāo) 語言中簡(jiǎn)化修改出來的。它是一種置標(biāo)語言。置標(biāo)指計(jì)算機(jī)所能理解的信息符號(hào),通過 此種標(biāo)記,計(jì)算機(jī)之間可以處理包含各種信息的內(nèi)容。其特點(diǎn)之一是可以用程序解析成 DOM(DocumentObject Model)對(duì)象,該對(duì)象是XML文檔作為樹結(jié)構(gòu)來查看,能夠通過DOM樹 來訪問所有節(jié)點(diǎn),可以修改或刪除元素的內(nèi)容,并創(chuàng)建新的元素及其屬性。此外XML還有 XML Schema用于描述XML文檔的結(jié)構(gòu),可以用一個(gè)指定的XML Schema(通常以xsd擴(kuò)展名 結(jié)尾)來驗(yàn)證某個(gè)XML文檔,以檢查該XML文檔是否符合其要求。通過它用戶可以根據(jù)不 同的特定領(lǐng)域,可通過XML schema對(duì)XML腳本進(jìn)行更嚴(yán)格的約束。這樣用戶根據(jù)XML語法 規(guī)范,可以自定義組成XML腳本的標(biāo)記集,并描述包括表達(dá)無循環(huán)、可嵌套的處理過程在內(nèi) 的各種邏輯。電信業(yè)務(wù)有其特有的邏輯特性,例如轉(zhuǎn)移過程是無循環(huán)過程,號(hào)碼判斷過濾以及 流量控制策略是可嵌套的處理過程等等。這些都符合XML語言自身的特點(diǎn),通過定義相關(guān) 語義和邏輯可以用基于XML的腳本來描述電信業(yè)務(wù)邏輯,控制電信業(yè)務(wù)的運(yùn)行。這種方式 可以改變?cè)须娦艠I(yè)務(wù)流程完全由程序編寫,不具備靈活的修改配置改變電信業(yè)務(wù)流程的 能力。進(jìn)而突破因原有問題導(dǎo)致的在多樣化需求的情況下產(chǎn)品的開發(fā)維護(hù)代價(jià)不斷提高的 問題。用XML描述業(yè)務(wù)邏輯的另一優(yōu)勢(shì)是使業(yè)務(wù)邏輯直觀化,并能夠描述業(yè)務(wù)間融合的情 況,進(jìn)而有效的加速推動(dòng)業(yè)務(wù)的演化。使用XML語言來完成電信業(yè)務(wù)服務(wù)器,帶來上面提到的優(yōu)勢(shì)以外同樣也帶來了一 些問題,主要表現(xiàn)為首先,由于邏輯和控制在代碼層面實(shí)現(xiàn)了分離,導(dǎo)致業(yè)務(wù)邏輯的獲取 訪問時(shí)間的增加;其次,由于XML語言本身解釋性的特點(diǎn),所有業(yè)務(wù)邏輯都必須通過對(duì)XML腳本的分析交互獲得,必然需要更多的分析處理過程,這樣就反過來也對(duì)產(chǎn)品的性能的帶來了影響,表現(xiàn)為即使能夠不斷提高硬件平臺(tái)處理性能,產(chǎn)品本身性能提升的幅度卻呈現(xiàn) 極大的滯后性。故隨著工程規(guī)模在不斷的擴(kuò)大,要求降低單位產(chǎn)品成本的呼聲不斷,而對(duì)性 能要求又不斷提高的情況中,上述的矛盾更加顯著,甚至?xí)纱藢?dǎo)致無法滿足實(shí)際工程需 要的情形出現(xiàn)。

發(fā)明內(nèi)容
針對(duì)現(xiàn)有技術(shù)中存在的缺陷,本發(fā)明的目的在于提供一種基于內(nèi)存的XML腳本緩 存容器,要解決的技術(shù)問題是基于XML腳本控制業(yè)務(wù)流程的電信業(yè)務(wù)服務(wù)器由于其腳本解 析控制導(dǎo)致的性能難以提高的瓶頸問題。為達(dá)到以上目的,本發(fā)明采取的技術(shù)方案是一種基于內(nèi)存的XML腳本緩存容器,其特征在于包括緩存訪問接口、XML解析接 口和核心緩存,緩存訪問接口、XML解析接口和核心緩存為同一進(jìn)程內(nèi)的不同線程,且通過進(jìn)程內(nèi) 部消息和共享內(nèi)存的方式交換信息,核心緩存內(nèi)包括由3個(gè)不同的類功能模塊實(shí)現(xiàn)的緩存算法處理單元、節(jié)點(diǎn)管理單 元以及公共控制單元,三個(gè)單元均由核心緩存對(duì)應(yīng)線程調(diào)用,核心緩存完成從緩存容器訪 問信息和向緩存容器存儲(chǔ)信息的操作,所述公共控制單元對(duì)應(yīng)的類功能模塊由核心緩存對(duì)應(yīng)線程直接調(diào)用,公共控制單 元負(fù)責(zé)緩存算法具體執(zhí)行過程中依據(jù)JeffBonwick’ s slab allocator實(shí)現(xiàn)的對(duì)內(nèi)存的優(yōu) 化操作,同時(shí)再由其協(xié)調(diào)調(diào)用緩存算法處理單元、節(jié)點(diǎn)管理單元實(shí)現(xiàn)緩存算法,所述緩存算法處理單元對(duì)應(yīng)的類功能模塊實(shí)現(xiàn)緩存算法中的訪問和存儲(chǔ)過程中 與緩存整體相關(guān)的LRU算法的功能,所述節(jié)點(diǎn)管理單元對(duì)應(yīng)的類功能模塊實(shí)現(xiàn)緩存算法中與節(jié)點(diǎn)內(nèi)部相關(guān)的引用計(jì) 數(shù)相關(guān)的功能。在上述技術(shù)方案的基礎(chǔ)上,所述緩存算法包括以下用于實(shí)現(xiàn)緩存算法的內(nèi)存數(shù)據(jù) 結(jié)構(gòu),此數(shù)據(jù)結(jié)構(gòu)供核心緩存中緩存算法處理單元和節(jié)點(diǎn)管理單元所使用緩存整體的哈希表,提供緩存的高速查詢,充當(dāng)緩存算法中的索引數(shù)據(jù)結(jié)構(gòu);緩存節(jié)點(diǎn)單元,是緩存信息的集合體,包含解析后存儲(chǔ)的XML腳本的DOM對(duì)象、DOM 對(duì)象各單元映射結(jié)果的散列表以及緩存節(jié)點(diǎn)引用對(duì)象的索引鏈表;緩存雙向鏈表,記錄緩存節(jié)點(diǎn)的引用次序,充當(dāng)緩存算法中的排序數(shù)據(jù)結(jié)構(gòu),其配 合緩存整體的哈希表完成LRU算法。在上述技術(shù)方案的基礎(chǔ)上,所述DOM對(duì)象是存儲(chǔ)訪問的具體內(nèi)容,所述DOM對(duì)象各 單元映射結(jié)果的散列表提供DOM對(duì)象的高可用備份與恢復(fù)工作,所述緩存節(jié)點(diǎn)引用對(duì)象的 索引鏈表提供了對(duì)節(jié)點(diǎn)引用計(jì)數(shù)的功能,并提供反向索引能力。在上述技術(shù)方案的基礎(chǔ)上,當(dāng)核心緩存需要從緩存容器訪問信息時(shí),包括以下步 驟S10、接收訪問請(qǐng)求,公共控制單元解析這個(gè)訪問請(qǐng)求,分析出請(qǐng)求的類型和待訪問信息的索引值,
S20、搜索緩存數(shù)據(jù),公共控制單元調(diào)用緩存算法處理單元,緩存算法處理單元根據(jù)待訪問信息的索引 值查詢緩存中的節(jié)點(diǎn),查詢時(shí)使用緩存整體的哈希表數(shù)據(jù)結(jié)構(gòu),以保證查詢的程序段時(shí)間 復(fù)雜度小于O(Iog2Ii),或查詢時(shí)使用時(shí)間復(fù)雜度為O(Iog2Ii)的平衡二叉樹結(jié)構(gòu),若查詢到 所需節(jié)點(diǎn)則進(jìn)入記錄節(jié)點(diǎn)引用和調(diào)整緩存結(jié)構(gòu)的流程S30,否則直接轉(zhuǎn)到S40反饋未找到 的結(jié)果,S30、引用記錄及緩存調(diào)整,公共控制單元調(diào)用節(jié)點(diǎn)管理單元,進(jìn)入查找到的節(jié)點(diǎn),當(dāng)請(qǐng)求是獲取信息,則在節(jié)點(diǎn)中記錄下信息的訪問者的引用,引用計(jì)數(shù)加一,當(dāng)請(qǐng)求是使用完畢要求釋放信息,則公共控制單元調(diào)用節(jié)點(diǎn)管理單元?jiǎng)h除此節(jié)點(diǎn) 內(nèi)部的引用鏈表中訪問者的引用,引用計(jì)數(shù)減一,當(dāng)引用計(jì)數(shù)為零時(shí)表示該節(jié)點(diǎn)未被任何訪問者使用,同時(shí)緩存算法處理單元管理 的緩存雙向鏈表不做改變,這樣的調(diào)整保證在緩存算法處理單元管理的緩存雙向鏈表表首部區(qū)域存放的都 是最近請(qǐng)求獲取信息的節(jié)點(diǎn),而鏈表尾部區(qū)域保存的是最近最久未被請(qǐng)求獲取信息的節(jié) 點(diǎn),同時(shí)使用雙向鏈表是為了使鏈表調(diào)整的時(shí)間復(fù)雜度為常數(shù)級(jí)別與存儲(chǔ)數(shù)量η無關(guān),S40、結(jié)果反饋,公共控制單元將從緩存搜尋到的節(jié)點(diǎn)中獲取DOM對(duì)象和相關(guān)信息反饋給訪問者。在上述技術(shù)方案的基礎(chǔ)上,當(dāng)請(qǐng)求是獲取信息,其具體實(shí)現(xiàn)如下在節(jié)點(diǎn)內(nèi)部的引用對(duì)象索引鏈表中添加記錄,同時(shí)公共控制單元調(diào)用緩存算法處 理單元,調(diào)整緩存雙向鏈表,將訪問的節(jié)點(diǎn)調(diào)整到鏈表首部,其余節(jié)點(diǎn)按原順序順延。在上述技術(shù)方案的基礎(chǔ)上,當(dāng)核心緩存需要向緩存容器存儲(chǔ)信息時(shí),包括以下步 驟S100、待存信息預(yù)處理,公共控制單元將收到的待處理的信息初步解析出XML腳本內(nèi)容及其附帶信息,若 信息合乎要求則進(jìn)入緩存存儲(chǔ)上限的判斷S200,否則進(jìn)入異常流程處理S800,所述附帶信 息包括要求緩存動(dòng)態(tài)恢復(fù)某緩存數(shù)據(jù)時(shí)附帶的引用信息和游標(biāo)信息,S200、存儲(chǔ)上限判斷,公共控制單元調(diào)用緩存算法處理單元對(duì)當(dāng)前緩存情況進(jìn)行判斷,首先判斷請(qǐng)求是 否是已經(jīng)存儲(chǔ)節(jié)點(diǎn)的更新,若是則直接進(jìn)入淘汰舊節(jié)點(diǎn)流程S300,執(zhí)行更新舊節(jié)點(diǎn),其次確 定是否已經(jīng)達(dá)到設(shè)定的存儲(chǔ)上限,若達(dá)到上限則需要進(jìn)入淘汰舊節(jié)點(diǎn)的流程S300,否則直 接進(jìn)入解析XML腳本S400,S300、淘汰緩存中的舊節(jié)點(diǎn),當(dāng)情況是更新舊節(jié)點(diǎn),則公共控制單元調(diào)用緩存算法處理單元通過緩存整體哈希 表搜索到該節(jié)點(diǎn)淘汰,淘汰的具體操作是緩存算法處理單元?jiǎng)h除緩存整體哈希表中的該 紀(jì)錄,切斷緩存雙向鏈表中的該紀(jì)錄并直接連接該紀(jì)錄的前驅(qū)節(jié)點(diǎn)和后繼節(jié)點(diǎn);然后節(jié)點(diǎn) 管理單元清除節(jié)點(diǎn)內(nèi)部記錄,最后公共控制單元根據(jù)Jeff Bonwick's slaballocator策略 回收釋放節(jié)點(diǎn)內(nèi)存以及DOM對(duì)象內(nèi)存;當(dāng)情況是達(dá)到存儲(chǔ)上限,則公共控制單元調(diào)用緩存算法處理單元判斷目前緩存中最近最久且未被使用的節(jié)點(diǎn)進(jìn)行淘汰;判斷方法是公共控制單元調(diào)用緩存算法處理單元從 緩存雙向鏈表尾檢索起,尋找第一個(gè)引用計(jì)數(shù)為零的節(jié)點(diǎn),從緩存雙向鏈表和緩存哈希表 中去除,并淘汰對(duì)象,此過程和S600中對(duì)緩存雙向鏈表和緩存哈希表的操作共同組成LRU 算法的具體實(shí)現(xiàn),以上過程若成功淘汰舊節(jié)點(diǎn),則進(jìn)入解析XML腳本的流程S400,否則當(dāng)緩存容器 收到消息且未要求強(qiáng)制淘汰時(shí)給出告警和反饋信息S700,最后進(jìn)入異常處理S800,若此時(shí)收到消息要求強(qiáng)制淘汰,則公共控制單元調(diào)用節(jié)點(diǎn)管理單元依據(jù)節(jié)點(diǎn)中的引用對(duì)象索引鏈表,由公共控制單元通過緩存訪問接口給出反饋通知,接著進(jìn)入XML腳本 DOM對(duì)象化流程S400,同時(shí)進(jìn)行該節(jié)點(diǎn)的淘汰,并在公共控制單元單元中啟動(dòng)等待事件,待 淘汰完畢后,才能進(jìn)入節(jié)點(diǎn)緩存存儲(chǔ)的流程S600, S400、XML 腳本 DOM 對(duì)象化,核心緩存中公共控制單元將收到的文本形式的XML腳本通過XML解析接口調(diào)用外 部XML解析器,解析成樹型結(jié)構(gòu)存儲(chǔ)的DOM對(duì)象,并通過Jeff Bonwick's slab allocator 策略對(duì)此對(duì)象分配內(nèi)存存儲(chǔ),S500、構(gòu)造新緩存節(jié)點(diǎn),公共控制單元調(diào)用節(jié)點(diǎn)管理單元,首先構(gòu)建節(jié)點(diǎn)存儲(chǔ)DOM對(duì)象,添加節(jié)點(diǎn)初始化 管理記錄,記錄主要包括節(jié)點(diǎn)創(chuàng)建時(shí)間、節(jié)點(diǎn)訪問頻率、節(jié)點(diǎn)被訪問的記錄,然后根據(jù)遍歷 DOM對(duì)象其上的單元進(jìn)行映射,并將映射結(jié)果散列存儲(chǔ)于節(jié)點(diǎn)管理信息中;所述的DOM遍歷 采用策略是指深度優(yōu)先或廣度優(yōu)先之一,其映射過程是將DOM上的單元根據(jù)遍歷的次序進(jìn) 行編號(hào),再同單元一起配對(duì),通過哈希算法散列存儲(chǔ)于本節(jié)點(diǎn)內(nèi)部的散列表中,最后根據(jù)附 加的引用信息和游標(biāo)信息配合映射結(jié)果,創(chuàng)建并恢復(fù)對(duì)節(jié)點(diǎn)單元的引用記錄鏈表,存儲(chǔ)于 節(jié)點(diǎn)管理信息中,最后的過程單獨(dú)由公共控制單元之間調(diào)用就實(shí)現(xiàn)了電信業(yè)務(wù)中高可用的 恢復(fù)功能,滿足了動(dòng)態(tài)恢復(fù)的需要,S600、節(jié)點(diǎn)緩存存儲(chǔ),公共控制單元調(diào)用緩存算法處理單元,將由節(jié)點(diǎn)管理單元新構(gòu)造的節(jié)點(diǎn),整體以 索引的方式散列存儲(chǔ)于緩存整體的哈希表中,同時(shí)將節(jié)點(diǎn)索引追加于緩存雙向鏈表表首, 這樣最近最新存入的節(jié)點(diǎn)也保存與緩存雙向鏈表首部,符合LRU算法最新涉及節(jié)點(diǎn)訪問概 率更大的假設(shè),S700、告警信息和管理反饋,公共控制單元通過此過程反饋信息,可以讓管理者或管理程序了解到緩存器的實(shí) 時(shí)狀態(tài),當(dāng)緩存淘汰過于頻繁或者緩存全部節(jié)點(diǎn)都被使用無法置換新節(jié)點(diǎn)時(shí)能夠進(jìn)行適當(dāng) 的調(diào)整,S800、異常流程處理,公共控制單元拋棄此次異常請(qǐng)求,并將異常的原因反饋給訪問請(qǐng)求者。在上述技術(shù)方案的基礎(chǔ)上,SlOO中所述信息合乎要求是指判斷XML腳本信息是 否符合XML規(guī)范,附帶的引用信息和游標(biāo)信息是否完整。本發(fā)明所述的基于內(nèi)存的XML腳本緩存容器,用軟件的方式實(shí)現(xiàn)安裝于通用服務(wù) 器上的程序,此程序利用服務(wù)器提供的內(nèi)存和通信接口,為需要使用XML腳本的其他設(shè)備 或本服務(wù)器上的其他程序提供緩存服務(wù),作為原有系統(tǒng)的新增部分,來提高原系統(tǒng)整體的性能。本發(fā)明與現(xiàn)有技術(shù)中由內(nèi)存實(shí)現(xiàn)的緩存容器相比,其特點(diǎn)是提供嵌入自身內(nèi)部的XML解析器的接口,緩存的內(nèi)容不再是單純的XML腳本文本,而是XML腳本的DOM對(duì)象,而 且提供了對(duì)DOM對(duì)象的跟蹤、重入、淘汰、動(dòng)態(tài)備份與恢復(fù)以及更新的特性。此外配合外部 XML解析器實(shí)現(xiàn)對(duì)象的流化與結(jié)構(gòu)化可以完全復(fù)原以往內(nèi)存緩存容器含有的功能。


本發(fā)明有如下附圖圖1為本發(fā)明中基于內(nèi)存的XML腳本緩存容器結(jié)構(gòu)示意圖;圖2為本發(fā)明中從緩存容器訪問信息的流程圖;圖3為本發(fā)明中向緩存容器存儲(chǔ)信息的流程圖;圖4為本發(fā)明中用于實(shí)現(xiàn)算法的內(nèi)存數(shù)據(jù)結(jié)構(gòu)示意圖。
具體實(shí)施例方式本發(fā)明提供了一種基于內(nèi)存的XML腳本緩存容器及其實(shí)現(xiàn)方法。充分利用電信業(yè) 務(wù)和程序訪問中的局部性原理,根據(jù)Amdahl’s Law(阿姆達(dá)定理)提升程序整體的速度,突 破系統(tǒng)中XML腳本訪問解析的瓶頸問題。以下結(jié)合附圖對(duì)本發(fā)明作進(jìn)一步詳細(xì)說明。本發(fā)明所述的基于內(nèi)存的XML腳本緩存容器,可以用軟件的方式實(shí)現(xiàn)安裝于通用 服務(wù)器上的程序,此程序利用服務(wù)器提供的內(nèi)存和通信接口,為需要使用XML腳本的其他 設(shè)備或本服務(wù)器上的其他程序提供緩存服務(wù),作為原有系統(tǒng)的新增部分,來提高原系統(tǒng)整 體的性能。本發(fā)明所述基于內(nèi)存的XML腳本緩存容器內(nèi)部包含有XML解析接口,可以調(diào)用外 部的XML解析器。存儲(chǔ)于緩存內(nèi)部的核心信息不再是文本形式的XML腳本,而是XML腳本 經(jīng)過解析后的DOM對(duì)象。緩存容器本身含有一種緩存算法,保證其可以在限定容積大小的 前提下,依然能夠高速訪問,而且能夠動(dòng)態(tài)淘汰存儲(chǔ)的陳舊信息。本發(fā)明所述基于內(nèi)存的 XML腳本緩存容器的具體工作過程從整體層面看是由緩存訪問接口獲取外部程序的存儲(chǔ)和 訪問請(qǐng)求,并傳遞給核心緩存處理,最后將處理結(jié)果再通過緩存訪問接口反饋給使用者。在 核心緩存的處理過程中需要通過XML解析接口調(diào)用外部XML解析器進(jìn)行解析工作。所述被 調(diào)用的外部XML解析器需要具備將XML解析成為DOM對(duì)象的能力,且支持對(duì)DOM對(duì)象的遍 歷操作。圖1為基于內(nèi)存的XML腳本緩存容器結(jié)構(gòu)示意圖,緩存訪問接口、XML解析接口和 核心緩存3個(gè)組成部分用同一進(jìn)程內(nèi)的不同線程異步運(yùn)行實(shí)現(xiàn),3個(gè)部分間通過進(jìn)程內(nèi)部 消息和共享內(nèi)存的方式交換信息,核心緩存的各組成部分是核心緩存對(duì)應(yīng)線程調(diào)用3個(gè)不 同的類功能模塊實(shí)現(xiàn)緩存算法處理單元、節(jié)點(diǎn)管理單元以及公共控制單元的劃分。所述緩存訪問接口為外部程序向緩存存儲(chǔ)信息或訪問獲取信息的通道;所述XML解析接口是提供核心緩存訪問外部XML解析器的內(nèi)部接口,允許XML信 息在內(nèi)部的DOM對(duì)象化以及對(duì)DOM對(duì)象的遍歷訪問功能;所述核心緩存完成具體XML信息的緩存和提供信息的高速訪問的功能,包括緩存 算法處理單元、節(jié)點(diǎn)管理單元和公共控制單元。
緩存算法處理單元提供容器內(nèi)部緩存算法的實(shí)現(xiàn),能夠使緩存容器外部程序通過 緩存訪問接口利用哈希表的高效索引來存儲(chǔ)訪問緩存容器內(nèi)部的信息,包含有LRU置換算 法,能夠控制緩存的容量同時(shí)本發(fā)明中的緩存算法中允許信息的動(dòng)態(tài)更新,此外還提供緩 存內(nèi)部的管理統(tǒng)計(jì)包括訪問命中率、平均查詢耗時(shí)統(tǒng)計(jì)、最近訪問排序、緩存剩余空間統(tǒng) 計(jì)。節(jié)點(diǎn)管理單元提供每個(gè)已經(jīng)存儲(chǔ)在內(nèi)的信息單元的管理,提供引用計(jì)數(shù)機(jī)制允許 對(duì)信息單元的共享,控制保存了引用鏈表、游標(biāo),進(jìn)行反向記錄,同時(shí)提供節(jié)點(diǎn)的管理信息 如創(chuàng)建時(shí)間、節(jié)點(diǎn)訪問頻率、節(jié)點(diǎn)被訪問的記錄信息。公共控制單元提供緩存算法處理單元和節(jié)點(diǎn)管理單元對(duì)系統(tǒng)的操作,包括內(nèi)存基 于Jeff Bonwick' s slab allocator訪問機(jī)制的內(nèi)存分配,以及提供緩存訪問接口的請(qǐng)求 在緩存算法處理單元和節(jié)點(diǎn)管理單元的協(xié)同工作以提供對(duì)XML信息DOM對(duì)象的散列化處 理,同時(shí)配合引用游標(biāo)來實(shí)現(xiàn)電信等業(yè)務(wù)要求的高可用功能所需要的動(dòng)態(tài)備份和恢復(fù)的功 能。其中核心緩存的工作過程將依據(jù)圖2、圖3,結(jié)合圖4在后續(xù)詳細(xì)說明。
所述公共控制單元對(duì)應(yīng)的類功能模塊由核心緩存對(duì)應(yīng)線程直接調(diào)用,公共控制單 元負(fù)責(zé)緩存算法具體執(zhí)行過程中依據(jù)JeffBonwick’ s slab allocator實(shí)現(xiàn)的對(duì)內(nèi)存的優(yōu) 化操作,同時(shí)再由其協(xié)調(diào)調(diào)用緩存算法處理單元、節(jié)點(diǎn)管理單元實(shí)現(xiàn)緩存算法。所述緩存算法處理單元對(duì)應(yīng)的類功能模塊實(shí)現(xiàn)緩存算法中的訪問和存儲(chǔ)過程中 與緩存整體相關(guān)的LRU算法的功能。所述節(jié)點(diǎn)管理單元對(duì)應(yīng)的類功能模塊實(shí)現(xiàn)緩存算法中與節(jié)點(diǎn)內(nèi)部相關(guān)的引用計(jì) 數(shù)相關(guān)的功能。本發(fā)明所述緩存算法包括LRU算法和引用計(jì)數(shù)的綜合運(yùn)用。圖4為本發(fā)明中用于 實(shí)現(xiàn)緩存算法的內(nèi)存數(shù)據(jù)結(jié)構(gòu)示意圖,對(duì)應(yīng)于圖1中的核心緩存中緩存算法處理單元和節(jié) 點(diǎn)管理單元所使用的數(shù)據(jù)結(jié)構(gòu)(注圖4數(shù)據(jù)結(jié)構(gòu)中“緩存算法中的索引數(shù)據(jù)結(jié)構(gòu)”存在多 種選擇的可能,由于算法的數(shù)據(jù)結(jié)構(gòu)實(shí)現(xiàn)可以多種多樣,圖4僅僅是可行的實(shí)現(xiàn)方式之一, 以便于闡述本發(fā)明的功能實(shí)現(xiàn)和驗(yàn)證本發(fā)明對(duì)系統(tǒng)性能的提升效果),如圖4所示,用于實(shí) 現(xiàn)緩存算法的內(nèi)存數(shù)據(jù)結(jié)構(gòu)包括緩存整體的哈希表、緩存節(jié)點(diǎn)單元和緩存雙向鏈表,所述 緩存整體的哈希表提供緩存的高速查詢,充當(dāng)緩存算法中的索引數(shù)據(jù)結(jié)構(gòu)(注索引數(shù)據(jù) 結(jié)構(gòu)性能直接影響緩存容器的整體性能,要保證查詢操作時(shí)間復(fù)雜度不大于O(Iog2Ii),可 選擇如哈希表、平衡二叉樹、Map或B樹,圖4和最后的試驗(yàn)數(shù)據(jù)中采用的都是哈希表,而采 用B樹會(huì)更優(yōu)但復(fù)雜度增大,用平衡二叉樹或Map則性能稍次。);所述緩存雙向鏈表記錄 緩存節(jié)點(diǎn)的引用次序,充當(dāng)緩存算法中的排序數(shù)據(jù)結(jié)構(gòu),其配合緩存整體的哈希表完成LRU 算法;所述緩存節(jié)點(diǎn)單元是緩存信息的集合體,包含解析后存儲(chǔ)的XML腳本的DOM對(duì)象、DOM 對(duì)象各單元映射結(jié)果的散列表以及緩存節(jié)點(diǎn)引用對(duì)象的索引鏈表;其中所述DOM對(duì)象是存 儲(chǔ)訪問的具體內(nèi)容;所述DOM對(duì)象各單元映射結(jié)果的散列表提供DOM對(duì)象的高可用備份與 恢復(fù)工作;所述緩存節(jié)點(diǎn)引用對(duì)象的索引鏈表提供了對(duì)節(jié)點(diǎn)引用計(jì)數(shù)的功能,并提供反向 索引能力。核心緩存的工作過程,歸納起來分為從緩存容器訪問信息和向緩存容器存儲(chǔ)信息 兩個(gè)方向的操作,以下分別根據(jù)圖2、圖3流程結(jié)合圖4的結(jié)構(gòu)闡述其實(shí)現(xiàn)過程。其中向緩存容器存儲(chǔ)信息的步驟除了常規(guī)存儲(chǔ),還包含了強(qiáng)制淘汰和動(dòng)態(tài)恢復(fù)兩種特殊情況。圖2為本發(fā)明中含有LRU與引用計(jì)數(shù)相結(jié)合的緩存算法從緩存容器訪問信息的步驟,下面按照?qǐng)D2所述從緩存容器訪問信息的步驟,結(jié)合圖4的數(shù)據(jù)結(jié)構(gòu),詳述核心緩存3 個(gè)功能模塊(緩存算法處理單元、節(jié)點(diǎn)管理單元以及公共控制單元)的邏輯實(shí)現(xiàn)。S10、接收訪問請(qǐng)求。公共控制單元解析這個(gè)訪問請(qǐng)求,分析出請(qǐng)求的類型和待訪問信息的索引值。S20、搜索緩存數(shù)據(jù)。公共控制單元調(diào)用緩存算法處理單元。緩存算法處理單元根據(jù)待訪問信息的索引 值查詢緩存中的節(jié)點(diǎn)。查詢時(shí)使用緩存整體的哈希表數(shù)據(jù)結(jié)構(gòu),保證查詢的程序段時(shí)間復(fù) 雜度小于O(Iog2Ii)(若無較好的哈希結(jié)構(gòu)也可使用時(shí)間復(fù)雜度為O(Iog2Ii)的平衡二叉樹 結(jié)構(gòu))。若查詢到所需節(jié)點(diǎn)則進(jìn)入記錄節(jié)點(diǎn)引用和調(diào)整緩存結(jié)構(gòu)的流程S30,否則直接轉(zhuǎn)到 S40反饋未找到的結(jié)果。S30、引用記錄及緩存調(diào)整。公共控制單元調(diào)用節(jié)點(diǎn)管理單元,進(jìn)入查找到的節(jié)點(diǎn)。當(dāng)請(qǐng)求是獲取信息,則在節(jié)點(diǎn)中記錄下信息的訪問者的引用,引用計(jì)數(shù)加一;具體 實(shí)現(xiàn)是在節(jié)點(diǎn)內(nèi)部的引用對(duì)象索引鏈表中添加記錄。同時(shí)公共控制單元調(diào)用緩存算法處理 單元,調(diào)整緩存雙向鏈表,將訪問的節(jié)點(diǎn)調(diào)整到鏈表首部,其余節(jié)點(diǎn)按原順序順延。當(dāng)請(qǐng)求是使用完畢要求釋放信息,則公共控制單元調(diào)用節(jié)點(diǎn)管理單元?jiǎng)h除此節(jié)點(diǎn) 內(nèi)部的引用鏈表中訪問者的引用,引用計(jì)數(shù)減一。當(dāng)引用計(jì)數(shù)為零時(shí)表示該節(jié)點(diǎn)未被任何 訪問者使用,同時(shí)緩存算法處理單元管理的緩存雙向鏈表不做改變。這樣的調(diào)整保證在緩 存算法處理單元管理的緩存雙向鏈表表首部區(qū)域存放的都是最近請(qǐng)求獲取信息的節(jié)點(diǎn),而 鏈表尾部區(qū)域保存的是最近最久未被請(qǐng)求獲取信息的節(jié)點(diǎn),同時(shí)使用雙向鏈表是為了使鏈 表調(diào)整的時(shí)間復(fù)雜度為常數(shù)級(jí)別與存儲(chǔ)數(shù)量η無關(guān)。S40、結(jié)果反饋。公共控制單元將從緩存搜尋到的節(jié)點(diǎn)中獲取DOM對(duì)象和相關(guān)信息反饋給訪問者。圖3為本發(fā)明中含有LRU與引用計(jì)數(shù)相結(jié)合的緩存算法向緩存容器存儲(chǔ)信息的步 驟,下面按照?qǐng)D3所述向緩存容器存儲(chǔ)信息的步驟,結(jié)合圖4的數(shù)據(jù)結(jié)構(gòu),詳述核心緩存3 個(gè)功能模塊(緩存算法處理單元、節(jié)點(diǎn)管理單元以及公共控制單元)的邏輯實(shí)現(xiàn)。S100、待存信息預(yù)處理。公共控制單元將收到的待處理的信息初步解析出XML腳本內(nèi)容及其附帶信息,若 信息合乎要求(此要求至少包括XML腳本信息是否符合XML規(guī)范,附帶的引用信息和游標(biāo) 信息是否完整,若附帶的引用信息和游標(biāo)信息非空,則每個(gè)引用信息記錄都有對(duì)應(yīng)的游標(biāo) 信息記錄,此時(shí)則認(rèn)為附帶的引用信息和游標(biāo)信息是完整的)則進(jìn)入緩存存儲(chǔ)上限的判斷 S200,否則進(jìn)入異常流程處理S800。所述附帶信息包括要求緩存動(dòng)態(tài)恢復(fù)某緩存數(shù)據(jù)時(shí)附 帶的引用信息和游標(biāo)信息。S200、存儲(chǔ)上限判斷。公共控制單元調(diào)用緩存算法處理單元對(duì)當(dāng)前緩存情況進(jìn)行判斷,首先判斷請(qǐng)求是 否是已經(jīng)存儲(chǔ)節(jié)點(diǎn)的更新,若是則直接進(jìn)入淘汰舊節(jié)點(diǎn)流程S300,執(zhí)行更新舊節(jié)點(diǎn)。其次確 定是否已經(jīng)達(dá)到設(shè)定的存儲(chǔ)上限。若達(dá)到上限則需要進(jìn)入淘汰舊節(jié)點(diǎn)的流程S300,否則直接進(jìn)入解析XML腳本S400。S300、淘汰緩存中的舊節(jié)點(diǎn)。當(dāng)情況是更新舊節(jié)點(diǎn),則公共控制單元調(diào)用緩存算法處理單元通過緩存整體哈希表搜索到該節(jié)點(diǎn)淘汰,淘汰的具體操作是緩存算法處理單元?jiǎng)h除緩存整體哈希表中的該 紀(jì)錄,切斷緩存雙向鏈表中的該紀(jì)錄并直接連接該紀(jì)錄的前驅(qū)節(jié)點(diǎn)和后繼節(jié)點(diǎn);然后節(jié)點(diǎn) 管理單元清除節(jié)點(diǎn)內(nèi)部記錄,最后公共控制單元根據(jù)Jeff Bonwick's slaballocator策略 回收釋放節(jié)點(diǎn)內(nèi)存以及DOM對(duì)象內(nèi)存;當(dāng)情況是達(dá)到存儲(chǔ)上限,則公共控制單元調(diào)用緩存算法處理單元判斷目前緩存中 最近最久且未被使用的節(jié)點(diǎn)進(jìn)行淘汰;判斷方法是公共控制單元調(diào)用緩存算法處理單元從 緩存雙向鏈表尾檢索起,尋找第一個(gè)引用計(jì)數(shù)為零的節(jié)點(diǎn),從緩存雙向鏈表和緩存哈希表 中去除,并淘汰對(duì)象(注此過程和S600中對(duì)緩存雙向鏈表和緩存哈希表的操作共同組成 LRU算法的具體實(shí)現(xiàn))。以上過程若成功淘汰舊節(jié)點(diǎn),則進(jìn)入解析XML腳本的流程S400,否 則當(dāng)緩存容器收到消息且未要求強(qiáng)制淘汰時(shí)給出告警和反饋信息S700,最后進(jìn)入異常處理 S800;但若此時(shí)收到消息要求強(qiáng)制淘汰,則公共控制單元調(diào)用節(jié)點(diǎn)管理單元依據(jù)節(jié)點(diǎn)中的 引用對(duì)象索引鏈表,由公共控制單元通過緩存訪問接口給出反饋通知,接著進(jìn)入XML腳本 DOM對(duì)象化流程S400,同時(shí)進(jìn)行該節(jié)點(diǎn)的淘汰,并在公共控制單元單元中啟動(dòng)等待事件,待 淘汰完畢后,才能進(jìn)入節(jié)點(diǎn)緩存存儲(chǔ)的流程S600。S400、XML 腳本 DOM 對(duì)象化。核心緩存中公共控制單元將收到的文本形式的XML腳本通過XML解析接口調(diào)用外 部XML解析器,解析成樹型結(jié)構(gòu)存儲(chǔ)的DOM對(duì)象,并通過Jeff Bonwick's slab allocator 策略對(duì)此對(duì)象分配內(nèi)存存儲(chǔ)。S500、構(gòu)造新緩存節(jié)點(diǎn)。公共控制單元調(diào)用節(jié)點(diǎn)管理單元,首先構(gòu)建節(jié)點(diǎn)存儲(chǔ)DOM對(duì)象,添加節(jié)點(diǎn)初始化 管理記錄,記錄主要包括節(jié)點(diǎn)創(chuàng)建時(shí)間、節(jié)點(diǎn)訪問頻率、節(jié)點(diǎn)被訪問的記錄。然后根據(jù)遍歷 DOM對(duì)象其上的單元進(jìn)行映射,并將映射結(jié)果散列存儲(chǔ)于節(jié)點(diǎn)管理信息中。所述的DOM遍歷 采用策略是指深度優(yōu)先或廣度優(yōu)先之一,其映射過程是將DOM上的單元根據(jù)遍歷的次序進(jìn) 行編號(hào),再同單元一起配對(duì),通過哈希算法散列存儲(chǔ)于本節(jié)點(diǎn)內(nèi)部的散列表中。最后根據(jù)附 加的引用信息和游標(biāo)信息配合映射結(jié)果,創(chuàng)建并恢復(fù)對(duì)節(jié)點(diǎn)單元的引用記錄鏈表,存儲(chǔ)于 節(jié)點(diǎn)管理信息中。最后的過程單獨(dú)由公共控制單元之間調(diào)用就實(shí)現(xiàn)了電信業(yè)務(wù)中高可用的 恢復(fù)功能,滿足了動(dòng)態(tài)恢復(fù)的需要。S600、節(jié)點(diǎn)緩存存儲(chǔ)。公共控制單元調(diào)用緩存算法處理單元,將由節(jié)點(diǎn)管理單元新構(gòu)造的節(jié)點(diǎn),整體以 索引的方式散列存儲(chǔ)于緩存整體的哈希表中,同時(shí)將節(jié)點(diǎn)索引追加于緩存雙向鏈表表首, 這樣最近最新存入的節(jié)點(diǎn)也保存與緩存雙向鏈表首部,符合LRU算法最新涉及節(jié)點(diǎn)訪問概 率更大的假設(shè)。S700、告警信息和管理反饋。公共控制單元通過此過程反饋信息,可以讓管理者或管理程序了解到緩存器的實(shí) 時(shí)狀態(tài),當(dāng)緩存淘汰過于頻繁或者緩存全部節(jié)點(diǎn)都被使用無法置換新節(jié)點(diǎn)時(shí)能夠進(jìn)行適當(dāng) 的調(diào)整。
S800、異常流程處理。公共控制單元拋棄此次異常請(qǐng)求,并將異常的原因反饋給訪問請(qǐng)求者。以下為本發(fā)明給出一個(gè)簡(jiǎn)單的實(shí)例測(cè)試數(shù)據(jù),實(shí)驗(yàn)環(huán)境3GHZ雙核X86處理器。所 述實(shí)例所有步驟采用流水的方式執(zhí)行,統(tǒng)計(jì)并計(jì)算使用緩存容器后全部命中的情況和原來 的未使用緩存前的區(qū)別。
當(dāng)訪問的數(shù)量只有1時(shí),從請(qǐng)求獲取XML腳本到解析成為DOM對(duì)象提供系統(tǒng)使用, 未使用緩存前耗時(shí)8秒左右,而使用緩存容器命中的情況耗時(shí)小于1毫秒(統(tǒng)計(jì)工具精度 最小1毫秒),保守估計(jì)兩者速度差距在3個(gè)數(shù)量級(jí)或更多。當(dāng)訪問數(shù)量達(dá)到IO3時(shí),平均每次從請(qǐng)求獲取XML腳本到解析成為DOM對(duì)象提供系 統(tǒng)使用,未使用緩存前耗時(shí)600毫秒左右,而使用緩存容器命中的情況耗時(shí)0. 18毫秒左右。 比較兩者速度差距為3個(gè)數(shù)量級(jí)。分析未使用緩存速度提升的原因是在較多數(shù)量訪問時(shí)流 水方式提高了各個(gè)步驟的利用率從而提高了效率,同時(shí)大量XML腳本的請(qǐng)求在查詢和傳輸 中的優(yōu)化也起到了提高速度的作用。當(dāng)訪問數(shù)量達(dá)到IO6時(shí),平均每次從請(qǐng)求獲取XML腳本到解析成為DOM對(duì)象提供系 統(tǒng)使用,未使用緩存前耗時(shí)400毫秒左右,而使用緩存容器命中的情況耗時(shí)0. 12毫秒左右。 比較兩者速度差距仍為3個(gè)數(shù)量級(jí)。而且分析速度提升比例基本一致,該少量提升應(yīng)為流 水方式的作用。結(jié)合到整體系統(tǒng)下,一般在基于XML腳本控制流程的電信業(yè)務(wù)服務(wù)器中其腳本解 析控制的時(shí)間開銷占總流程時(shí)間開銷的40%左右,同時(shí)此部分功能處理的CPU占用也要維 持在30%。根據(jù)上述實(shí)驗(yàn)分析得到的加速比,根據(jù)阿姆達(dá)定理可以算出使用該緩存全命中 的情況下系統(tǒng)整體的加速比約為167%,而實(shí)測(cè)于一套基于XML腳本控制流程的電信業(yè)務(wù) 服務(wù)器后,發(fā)現(xiàn)在硬件條件相同的情況下,原未使用緩存的系統(tǒng)能夠穩(wěn)定處理的最大能力 是每秒220個(gè)左右的請(qǐng)求,而使用緩存容器后在85%左右的命中率的情況下系統(tǒng)能夠穩(wěn)定 處理的最大能力達(dá)到350個(gè)左右的請(qǐng)求,加速比接近160%非常接近理論值。
權(quán)利要求
一種基于內(nèi)存的XML腳本緩存容器,其特征在于包括緩存訪問接口、XML解析接口和核心緩存,緩存訪問接口、XML解析接口和核心緩存為同一進(jìn)程內(nèi)的不同線程,且通過進(jìn)程內(nèi)部消息和共享內(nèi)存的方式交換信息,核心緩存內(nèi)包括由3個(gè)不同的類功能模塊實(shí)現(xiàn)的緩存算法處理單元、節(jié)點(diǎn)管理單元以及公共控制單元,三個(gè)單元均由核心緩存對(duì)應(yīng)線程調(diào)用,核心緩存完成從緩存容器訪問信息和向緩存容器存儲(chǔ)信息的操作,所述公共控制單元對(duì)應(yīng)的類功能模塊由核心緩存對(duì)應(yīng)線程直接調(diào)用,公共控制單元負(fù)責(zé)緩存算法具體執(zhí)行過程中依據(jù)JeffBonwick’s slab allocator實(shí)現(xiàn)的對(duì)內(nèi)存的優(yōu)化操作,同時(shí)再由其協(xié)調(diào)調(diào)用緩存算法處理單元、節(jié)點(diǎn)管理單元實(shí)現(xiàn)緩存算法,所述緩存算法處理單元對(duì)應(yīng)的類功能模塊實(shí)現(xiàn)緩存算法中的訪問和存儲(chǔ)過程中與緩存整體相關(guān)的LRU算法的功能,所述節(jié)點(diǎn)管理單元對(duì)應(yīng)的類功能模塊實(shí)現(xiàn)緩存算法中與節(jié)點(diǎn)內(nèi)部相關(guān)的引用計(jì)數(shù)相關(guān)的功能。
2.如權(quán)利要求1所述的基于內(nèi)存的XML腳本緩存容器,其特征在于,所述緩存算法包括 以下用于實(shí)現(xiàn)緩存算法的內(nèi)存數(shù)據(jù)結(jié)構(gòu),此數(shù)據(jù)結(jié)構(gòu)供核心緩存中緩存算法處理單元和節(jié) 點(diǎn)管理單元所使用緩存整體的哈希表,提供緩存的高速查詢,充當(dāng)緩存算法中的索引數(shù)據(jù)結(jié)構(gòu); 緩存節(jié)點(diǎn)單元,是緩存信息的集合體,包含解析后存儲(chǔ)的XML腳本的DOM對(duì)象、DOM對(duì) 象各單元映射結(jié)果的散列表以及緩存節(jié)點(diǎn)引用對(duì)象的索引鏈表;緩存雙向鏈表,記錄緩存節(jié)點(diǎn)的引用次序,充當(dāng)緩存算法中的排序數(shù)據(jù)結(jié)構(gòu),其配合緩 存整體的哈希表完成LRU算法。
3.如權(quán)利要求2所述的基于內(nèi)存的XML腳本緩存容器,其特征在于所述DOM對(duì)象是 存儲(chǔ)訪問的具體內(nèi)容,所述DOM對(duì)象各單元映射結(jié)果的散列表提供DOM對(duì)象的高可用備份 與恢復(fù)工作,所述緩存節(jié)點(diǎn)引用對(duì)象的索引鏈表提供了對(duì)節(jié)點(diǎn)引用計(jì)數(shù)的功能,并提供反 向索引能力。
4.如權(quán)利要求1或2或3所述的基于內(nèi)存的XML腳本緩存容器,其特征在于,當(dāng)核心緩 存需要從緩存容器訪問信息時(shí),包括以下步驟S10、接收訪問請(qǐng)求,公共控制單元解析這個(gè)訪問請(qǐng)求,分析出請(qǐng)求的類型和待訪問信息的索引值, S20、搜索緩存數(shù)據(jù),公共控制單元調(diào)用緩存算法處理單元,緩存算法處理單元根據(jù)待訪問信息的索引值查 詢緩存中的節(jié)點(diǎn),查詢時(shí)使用緩存整體的哈希表數(shù)據(jù)結(jié)構(gòu),以保證查詢的程序段時(shí)間復(fù)雜 度小于0 (Iog2Ii),或查詢時(shí)使用時(shí)間復(fù)雜度為O (Iog2Ii)的平衡二叉樹結(jié)構(gòu),若查詢到所需 節(jié)點(diǎn)則進(jìn)入記錄節(jié)點(diǎn)引用和調(diào)整緩存結(jié)構(gòu)的流程S30,否則直接轉(zhuǎn)到S40反饋未找到的結(jié) 果,S30、引用記錄及緩存調(diào)整,公共控制單元調(diào)用節(jié)點(diǎn)管理單元,進(jìn)入查找到的節(jié)點(diǎn), 當(dāng)請(qǐng)求是獲取信息,則在節(jié)點(diǎn)中記錄下信息的訪問者的引用,引用計(jì)數(shù)加一,當(dāng)請(qǐng)求是使用完畢要求釋放信息,則公共控制單元調(diào)用節(jié)點(diǎn)管理單元?jiǎng)h除此節(jié)點(diǎn)內(nèi)部 的引用鏈表中訪問者的引用,引用計(jì)數(shù)減一,當(dāng)引用計(jì)數(shù)為零時(shí)表示該節(jié)點(diǎn)未被任何訪問者使用,同時(shí)緩存算法處理單元管理的緩 存雙向鏈表不做改變,這樣的調(diào)整保證在緩存算法處理單元管理的緩存雙向鏈表表首部區(qū)域存放的都是最 近請(qǐng)求獲取信息的節(jié)點(diǎn),而鏈表尾部區(qū)域保存的是最近最久未被請(qǐng)求獲取信息的節(jié)點(diǎn),同 時(shí)使用雙向鏈表是為了使鏈表調(diào)整的時(shí)間復(fù)雜度為常數(shù)級(jí)別與存儲(chǔ)數(shù)量η無關(guān), S40、結(jié)果反饋,公共控制單元將從緩存搜尋到的節(jié)點(diǎn)中獲取DOM對(duì)象和相關(guān)信息反饋給訪問者。
5.如權(quán)利要求4所述的基于內(nèi)存的XML腳本緩存容器,其特征在于,當(dāng)請(qǐng)求是獲取信 息,其具體實(shí)現(xiàn)如下在節(jié)點(diǎn)內(nèi)部的引用對(duì)象索引鏈表中添加記錄,同時(shí)公共控制單元調(diào)用緩存算法處理單 元,調(diào)整緩存雙向鏈表,將訪問的節(jié)點(diǎn)調(diào)整到鏈表首部,其余節(jié)點(diǎn)按原順序順延。
6.如權(quán)利要求1或2或3所述的基于內(nèi)存的XML腳本緩存容器,其特征在于,當(dāng)核心緩 存需要向緩存容器存儲(chǔ)信息時(shí),包括以下步驟S100、待存信息預(yù)處理,公共控制單元將收到的待處理的信息初步解析出XML腳本內(nèi)容及其附帶信息,若信息 合乎要求則進(jìn)入緩存存儲(chǔ)上限的判斷S200,否則進(jìn)入異常流程處理S800,所述附帶信息包 括要求緩存動(dòng)態(tài)恢復(fù)某緩存數(shù)據(jù)時(shí)附帶的引用信息和游標(biāo)信息, S200、存儲(chǔ)上限判斷,公共控制單元調(diào)用緩存算法處理單元對(duì)當(dāng)前緩存情況進(jìn)行判斷,首先判斷請(qǐng)求是否是 已經(jīng)存儲(chǔ)節(jié)點(diǎn)的更新,若是則直接進(jìn)入淘汰舊節(jié)點(diǎn)流程S300,執(zhí)行更新舊節(jié)點(diǎn),其次確定是 否已經(jīng)達(dá)到設(shè)定的存儲(chǔ)上限,若達(dá)到上限則需要進(jìn)入淘汰舊節(jié)點(diǎn)的流程S300,否則直接進(jìn) 入解析XML腳本S400,S300、淘汰緩存中的舊節(jié)點(diǎn),當(dāng)情況是更新舊節(jié)點(diǎn),則公共控制單元調(diào)用緩存算法處理單元通過緩存整體哈希表搜 索到該節(jié)點(diǎn)淘汰,淘汰的具體操作是緩存算法處理單元?jiǎng)h除緩存整體哈希表中的該紀(jì)錄, 切斷緩存雙向鏈表中的該紀(jì)錄并直接連接該紀(jì)錄的前驅(qū)節(jié)點(diǎn)和后繼節(jié)點(diǎn);然后節(jié)點(diǎn)管理單 元清除節(jié)點(diǎn)內(nèi)部記錄,最后公共控制單元根據(jù)Jeff Bonwick's slaballocator策略回收釋 放節(jié)點(diǎn)內(nèi)存以及DOM對(duì)象內(nèi)存;當(dāng)情況是達(dá)到存儲(chǔ)上限,則公共控制單元調(diào)用緩存算法處理單元判斷目前緩存中最近 最久且未被使用的節(jié)點(diǎn)進(jìn)行淘汰;判斷方法是公共控制單元調(diào)用緩存算法處理單元從緩存 雙向鏈表尾檢索起,尋找第一個(gè)引用計(jì)數(shù)為零的節(jié)點(diǎn),從緩存雙向鏈表和緩存哈希表中去 除,并淘汰對(duì)象,此過程和S600中對(duì)緩存雙向鏈表和緩存哈希表的操作共同組成LRU算法 的具體實(shí)現(xiàn),以上過程若成功淘汰舊節(jié)點(diǎn),則進(jìn)入解析XML腳本的流程S400,否則當(dāng)緩存容器收到 消息且未要求強(qiáng)制淘汰時(shí)給出告警和反饋信息S700,最后進(jìn)入異常處理S800,若此時(shí)收到消息要求強(qiáng)制淘汰,則公共控制單元調(diào)用節(jié)點(diǎn)管理單元依據(jù)節(jié)點(diǎn)中的引用 對(duì)象索引鏈表,由公共控制單元通過緩存訪問接口給出反饋通知,接著進(jìn)入XML腳本DOM對(duì)象化流程S400,同時(shí)進(jìn)行該節(jié)點(diǎn)的淘汰,并在公共控制單元單元中啟動(dòng)等待事件,待淘汰完 畢后,才能進(jìn)入節(jié)點(diǎn)緩存存儲(chǔ)的流程S600,S400、XML腳本DOM對(duì)象化,核心緩存中公共控制單元將收到的文本形式的XML腳本通過XML解析接口調(diào)用外部 XML解析器,解析成樹型結(jié)構(gòu)存儲(chǔ)的DOM對(duì)象,并通過Jeff Bonwick's slab allocator策 略對(duì)此對(duì)象分配內(nèi)存存儲(chǔ),S500、構(gòu)造新緩存節(jié)點(diǎn),公共控制單元調(diào)用節(jié)點(diǎn)管理單元,首先構(gòu)建節(jié)點(diǎn)存儲(chǔ)DOM對(duì)象,添加節(jié)點(diǎn)初始化管理 記錄,記錄主要包括節(jié)點(diǎn)創(chuàng)建時(shí)間、節(jié)點(diǎn)訪問頻率、節(jié)點(diǎn)被訪問的記錄,然后根據(jù)遍歷DOM 對(duì)象其上的單元進(jìn)行映射,并將映射結(jié)果散列存儲(chǔ)于節(jié)點(diǎn)管理信息中;所述的DOM遍歷采 用策略是指深度優(yōu)先或廣度優(yōu)先之一,其映射過程是將DOM上的單元根據(jù)遍歷的次序進(jìn)行 編號(hào),再同單元一起配對(duì),通過哈希算法散列存儲(chǔ)于本節(jié)點(diǎn)內(nèi)部的散列表中,最后根據(jù)附加 的引用信息和游標(biāo)信息配合映射結(jié)果,創(chuàng)建并恢復(fù)對(duì)節(jié)點(diǎn)單元的引用記錄鏈表,存儲(chǔ)于節(jié) 點(diǎn)管理信息中,最后的過程單獨(dú)由公共控制單元之間調(diào)用就實(shí)現(xiàn)了電信業(yè)務(wù)中高可用的恢 復(fù)功能,滿足了動(dòng)態(tài)恢復(fù)的需要,S600、節(jié)點(diǎn)緩存存儲(chǔ),公共控制單元調(diào)用緩存算法處理單元,將由節(jié)點(diǎn)管理單元新構(gòu)造的節(jié)點(diǎn),整體以索引 的方式散列存儲(chǔ)于緩存整體的哈希表中,同時(shí)將節(jié)點(diǎn)索引追加于緩存雙向鏈表表首,這樣 最近最新存入的節(jié)點(diǎn)也保存與緩存雙向鏈表首部,符合LRU算法最新涉及節(jié)點(diǎn)訪問概率更 大的假設(shè),S700、告警信息和管理反饋,公共控制單元通過此過程反饋信息,可以讓管理者或管理程序了解到緩存器的實(shí)時(shí)狀 態(tài),當(dāng)緩存淘汰過于頻繁或者緩存全部節(jié)點(diǎn)都被使用無法置換新節(jié)點(diǎn)時(shí)能夠進(jìn)行適當(dāng)?shù)恼{(diào) 整,S800、異常流程處理,公共控制單元拋棄此次異常請(qǐng)求,并將異常的原因反饋給訪問請(qǐng)求者。
7.如權(quán)利要求6所述的基于內(nèi)存的XML腳本緩存容器,其特征在于,SlOO中所述信息 合乎要求是指判斷XML腳本信息是否符合XML規(guī)范,附帶的引用信息和游標(biāo)信息是否完整
全文摘要
本發(fā)明是一種基于內(nèi)存的XML腳本緩存容器,內(nèi)部包含有XML解析接口,可以調(diào)用外部的XML解析器。存儲(chǔ)于緩存內(nèi)部的核心信息不再是文本形式的XML腳本,而是XML腳本經(jīng)過解析后的DOM對(duì)象。緩存容器本身含有一種緩存算法,保證其可以在限定容積大小的前提下,依然能夠高速訪問,而且能夠動(dòng)態(tài)淘汰存儲(chǔ)的陳舊信息。本發(fā)明所述的基于內(nèi)存的XML腳本緩存容器,提供嵌入自身內(nèi)部的XML解析器的接口,緩存的內(nèi)容不再是單純的XML腳本文本,而是XML腳本的DOM對(duì)象,而且提供了對(duì)DOM對(duì)象的跟蹤、重入、淘汰、動(dòng)態(tài)備份與恢復(fù)以及更新的特性。此外配合外部XML解析器實(shí)現(xiàn)對(duì)象的流化與結(jié)構(gòu)化可以完全復(fù)原以往內(nèi)存緩存容器含有的功能。
文檔編號(hào)G06F17/30GK101819596SQ20101015745
公開日2010年9月1日 申請(qǐng)日期2010年4月28日 優(yōu)先權(quán)日2010年4月28日
發(fā)明者畢海, 趙頔 申請(qǐng)人:烽火通信科技股份有限公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1