專利名稱::一種在服務器/客戶端結構中構造拓撲樹的方法
技術領域:
:本發明涉及網絡中定位被管理設備的方法,更具體地說,涉及一種在服務器/客戶端結構中構造拓撲樹的方法。
背景技術:
:在網絡管理中,管理者必須知道的基本事實之一是有多少設備連接在本系統中、每個設備的位置(包括該設備與其他設備或某些設定的管理層的邏輯關系)、該設備的屬性等,通常,人們使用拓撲圖的方式來組織和表示上述事實,以便于管理。常用的拓撲圖包括總線型拓撲、樹型拓撲等,而樹型拓撲即拓撲樹在網絡中使用得較多,傳統構造拓撲樹的方法,主要是通過遞歸算法實現的。其主要思想是構造一個節點,然后判斷其是否有子節點,如果有,則依次構造其子節點。在構造其子節點過程中,就遞歸上面方法。在數據組織方面,傳統構造樹型結構的數據模型一般為ID、名稱、父ID。這種結構構造的樹有個特點就是一個數據在樹上只對應一個節點。這種方法構造拓撲樹,思路、方法雖很簡單,但其拓撲樹的結構單一、不豐富,如果需要構造拓撲樹的數據量巨大,則性能相當的不好。另一方面,即使樹構造出來了,但要從樹上査找定位一個節點,多是采用逐節點遍歷的方法,搜索性能也很差。
發明內容本發明要解決的技術問題在于,針對現有技術的上述結構單一、搜索性能差的缺陷,提供一種結構豐富、搜索性能好的構造拓撲樹的方法。本發明解決其技術問題所采用的技術方案是構造一種在服務器/客戶端結構中構造拓撲樹的方法,包括如下步驟A)根據相連的被管理設備的屬性數據,定義拓撲樹結構,并保存于所述服務器數據庫中;B)使用戶與至少一個拓撲樹結構相關聯;C)從服務器數據庫中讀取網元數據及被關聯的拓撲樹結構數據,并創建拓撲樹節點數據集;D)按定義的拓撲樹結構構造拓撲樹,在構造過程中對應每個節點,在拓撲樹節點數據集中加入相應數據,用于快速定位所述拓撲樹的節點。在本發明所述的構造拓撲樹的方法中,所述步驟A)進一步包括如下步驟Al)定義對拓撲樹的描述,包括樹編號、樹名稱;A2)定義拓撲樹的結構,包括樹編號、節點層次、網元屬性。在本發明所述的構造拓撲樹的方法中,所述步驟A2)中的網元屬性包括被管理設備所具有的屬性。在本發明所述的構造拓撲樹的方法中,所述步驟B)中關聯方式包括用戶編號、樹編號、顯示順序。在本發明所述的構造拓撲樹的方法中,所述步驟C)中所述的拓撲樹節點數據集所包含的數據包括網元屬性名、網元屬性值以及樹節點對象指針。在本發明所述的構造拓撲樹的方法中,所述步驟C)進一步包括如下步驟Cl)根據所述拓撲樹結構,創建網元數據索引,將讀取的網元數據按所述索引排序,得到網元數據集;C2)創建網元結構對象鏈表。在本發明所述的構造拓撲樹的方法中,所述步驟Cl)中所述的網元數據索引形式包括節點層次1網元屬性+節點層次2網元屬性+…+節點層次N網元屬性。在本發明所述的構造拓撲樹的方法中,所述步驟C2)中所述的網元結構的屬性包括樹編號、節點層次、網元屬性、節點指針、父節點指針和上一值。在本發明所述的構造拓撲樹的方法中,所述步驟D)進一步包括如下步驟Dl)設置網元數據指針和網元結構對象指針及其初始值;D2)判斷網元數據集中的網元數據是否遍歷,如完成,則表示完成拓撲樹的構造,執行步驟D7);如未完成,執行步驟D2);D3)判斷網元結構對象鏈表中的網元結構對象是否遍歷,如是,網元數據指針加l,并執行步驟D2),如否,執行下一步D4);D4)從該網元結構對象中得到網元屬性值,在網元數據集中取出當前行中字段名為所述網元屬性值的字段值,與網元結構對象中的上一值比較,如果不等,則執行下一步驟D5),否則執行步驟D7);D5)在樹上新建一個網元節點,其父節點為當前網元結構對象中的父節點指針,將當前網元結構對象的上一值用所述字段名為所述網元屬性值的字段值替換,將網元結構對象鏈表中從網元結構對象指針指向的網元結構對象開始的父節點指針全指向此新建節點,上一值則全部設置為初始值;D6)向所述拓撲樹節點數據集中插入一行數據,其網元屬性名為所述網元屬性值,網元屬性值為前行中字段名為所述網元屬性值的字段值,樹節點對象指針指向新建節點;D7)所述網元結構對象指針加l,返回步驟D3);D8)結束。在本發明所述的構造拓撲樹的方法中,在所述步驟D5)中,當所述父節點指針為nil時,該新建網元節點為根節點。實施本發明的在服務器/客戶端結構中構造拓撲樹的方法,具有以下有益效果由于拓撲樹的結構可由用戶自己設定,且用戶可選擇與自己相關聯的拓撲樹結構,同時也由于設置了拓撲樹節點數據集,且在每創建一個網絡節點時均將相應數據放入拓撲樹節點數據集中,所以用本方法構造的拓撲樹結構豐富、搜索性能好。下面將結合附圖及實施例對本發明作進一步說明,附圖中圖1是本發明一種在服務器/客戶端結構中構造拓撲樹的方法實施例的流程圖;圖2是本發明實施例中讀取數據創建拓撲樹節點數據集步驟的流程圖;圖3本發明實施例中按拓撲樹結構展開網元數據的流程圖。具體實施方式以下用一個在通信中的直放站管理系統中實現本發明的方法作為實施例,具體說明本發明的具體實施方式。如圖1所示,在本發明在服務器/客戶端結構中構造拓撲樹的方法實施例中,包括如下步驟Sll根據網元屬性數據,定義拓撲樹結構,保存于服務器數據庫中在本步驟中服務器收集與其通過網絡相連的被管理設備的各種屬性,如所屬地區、設備類型、供應商、代維廠商、功率、使用狀態、運行狀態等等,這些屬性的總和構成網元屬性數據;另外,用戶需要定義在本系統中使用的拓撲樹的結構,包括對拓撲樹的描述和拓撲樹的構成,在本實施例中,對拓撲樹的描述為樹編號加上樹名稱,即用兩個字段來描述拓撲樹,第一個是變量樹編號,第二個是變量樹名稱;(本文中凡是被符號標記的均為變量,即存儲在計算機中的一個或多個字節,以后不再特別標明。)本實施例中對拓撲樹結構的定義是樹編號節點層次網元屬性。其中網元屬性必須是直放站設備具備的屬性,即只能從直放站設備屬性中選取。在本實施例中,我們定義一個"廠商拓撲"樹,其主要結構為"中心一廠商一地區一邏輯站"。S12關聯用戶與至少一個拓撲樹結構設置用戶登錄時可以顯示的拓撲樹結構,其關聯方式為用戶編號樹編號顯示順序。由于允許一個用戶同時顯示多棵拓撲樹,所以如果一個用戶設置要同時顯示多棵樹,則需要設置顯示順序。S13讀取網元數據及被關聯的拓撲樹結構數據,創建網元數據集和拓撲樹節點數據集在本步驟中,用戶于客戶端或服務器登錄后系統自動調出在步驟S11和S12中存儲或定義的數據,并利用這些數據,生成網元數據集和拓撲樹節點數據集,在本實施例中,用戶是由客戶端登錄后,從服務器的數據庫讀回上述數據的,且這些數據暫存在客戶端的內存中。S14按設定構造將網元數據展開為樹型結構,并在展開過程中對應每個網絡節點,在拓撲樹節點數據集中加入相應數據按照前面步驟得到的數據,根據調出的用戶的設定,將由服務器端讀取的網元數據展開為樹型,并在上述展開過程中在每一次建立節點時,將相應的數據存入上述的拓撲樹節點數據集中,從而可以在需要的時候迅速査到在展開的樹型網元數據中該節點的位置。如圖2所示,在本實施例中,步驟S13進一步包括如下步驟S21讀取網元數據客戶端讀取保存在服務器數據庫中的網元數據,并以一數據集的形式保存在客戶端的內存中。S22讀取被關聯的拓撲樹結構:客戶端根據步驟S12中設定的用戶與拓撲樹的關聯關系,讀取保存在服務器數據庫中的拓撲樹結構,并式保存在客戶端的內存中;當步驟S12中的關聯關系中包括顯示順序時,還要按顯示順序讀取多個拓撲樹結構。S23創建網元數據索引并排序網元數據,得到網元數據集將上述存儲在客戶端的網元數據按要顯示的樹結構建立索引,索引為節點層次l網元屬性+節點層次2網元屬性+…+節點層次N網元屬性,在得到該索引后,將網元數據按該索引重新排序,從而得到網元數據集。S24創建網元結構對象鏈表構造一個網元結構對象鏈表,將網元結構封裝成對象,壓入該網元結構對象鏈表,網元結構對象在該鏈表中是按要顯示的拓撲樹結構定義的節點層次排序的。網元結構對象包含屬性為樹編號節點層次網元屬性節點指針父節點指針上一值。初始化鏈表中所有網元結構對象的節點指針與父節點指針為nil,上一值設為一個特殊初始值,此特殊值必須保證不會出現在設備的屬性值中。S25創建拓撲樹節點數據集動態創建一個空的內存數據集,即拓撲樹節點數據集,其結構為網元屬性名,網元屬性值,樹節點對象指針。其主要作用是供快速搜索定位樹節點用。此時,其數據為空。同樣,在本實施例中步驟S14進一步包括如下步驟S301設置網元數據指針和網元結構對象指針及其初始值,其中網元數據指針是指當前處理的網元數據是處于上述網元結構數據集中的位置,網元結構對象指針是指當前處理的網元結構對象在其所在的網元結構鏈表中的位置(在網元結構對象鏈表中,網元結構對象是按要顯示的拓撲樹結構定義的節點層次排序的);其初始值分別表示其起始位置,在本實施例中,網元數據指針的初始值指向網元數據集的第一行,網元結構對象指針的初始值為0,指向網元結構對象鏈表的排在第一的網元結構對象。S302.是否完成網元數據遍歷?判斷是否完成網元數據的遍歷,如是,表示拓撲樹己構造完畢,執行步驟S311;如否,執行步驟S304。S303網元數據指針加一將網元數據指針加一指向下一行,并返回執行步驟S302S304是否完成網元結構對象鏈表的遍歷?判斷是否完成網元結構對象的遍歷,如是,表明當前網元數據指針所指向的網元數據已處理完畢,轉而執行步驟S303;如否,執行步驟S306。S306得到名為網元屬性值的字段值及網元結構中的上一值在本步驟中,首先從網元結構對象中得到網元屬性,設其值為P1;之后,在網元數據集中取出當前行中字段名為P1的字段值,設其值為V1;同時,從該網元結構對象中得到上一值,設其值為V2。S307比較上述二值同否比較上述的VI和V2,如果二者不等,則執行S308;否則跳到步驟S310繼續執行。S308新建一網元節點,設置其屬性及該網元結構對象鏈表中在其之后的網元對象的父節點指針在拓撲樹上新建一個網元節點,其父節點為網元結構對象中的父節點指針。然后將當前網元結構對象的上一值中的字段值V2用字段值VI替換。將網元結構對象鏈表中從K+l開始的網元結構對象的父節點指針全指向新建節點,上一值則全部置為初始值。S309向拓撲樹節點數據集中插入新建節點數據往上述拓撲樹節點數據集中插入一行數據,其中網元屬性名等于P1,網元屬性值等于V1,樹節點對象指針指向新建節點。S310網元結構對象在其鏈表中的位置加1:將網元結構對象在其鏈表中的位置向后推一位,即將K變為K+1,進而執行步驟S304。S311結束下面用表格的形式具體說明在執行過程中網元結構對象鏈表的變化在執行步驟S23后,得到網元數據集如下表-中心供應商地區邏輯站...網管中心國人福田CI景X酒店網管中心國人福田CI藍X石家園網管中心國人羅湖CI名X大廈網管中心京x福田CI筆x山山莊在執行步驟S24后,得到網元結構對象鏈表如下:樹編號節點層次網元屬性父節點指針上一值11中心nilNULL12供應商nilNULL13地區nilNULL14邏輯站nilNULL在執行步驟S25后,得到拓撲樹節點數據集如下:網元屬性名網元屬性值樹節點指針在執行步驟301后,網元數據指針指向網元數據的第一行,網元結構對象指針指向網元結構對象鏈表中的第一個網元結構數據,即節點層次為1的網元結構對象。在步驟S306中,根據上述網元結構對象鏈表可以得到P1為"中心";VI為上述網元數據集中當前行中字段名為"中心"的值"網管中心";V2為NULL。在步驟S308中,新建一個樹節點N(網管中心)(以下用N(XX)代替所有新建節點);由于表5中的父節點指針項為nil,故N(網管中心)為根節點;然后將上一值修改為"網管中心"。將網元結構對象鏈表中從K+l開始的網元結構對象的父節點指針全指向新建節點,上一值全置為初始值。執行完本步后,網元結構對象鏈表中的數據變得如下表<table>tableseeoriginaldocumentpage13</column></row><table>向拓撲樹節點數據集中插入一行相應數據,拓撲樹節點數據集變為:網元屬性名網元屬性值樹節點指針中心網管中心樹節點N(網管中心)地址指針至此,網元結構對象鏈表中的第一個網元結構對象處理完成,在步驟S310,網元結構對象指針加l,執行步驟S304—S309,于是,網元結構對象鏈表和拓撲樹節點數據集分別變為-<table>tableseeoriginaldocumentpage13</column></row><table><table>tableseeoriginaldocumentpage13</column></row><table>處理網元結構對象鏈表中余下的網元結構對象,網元結構對象鏈表變為:<table>tableseeoriginaldocumentpage13</column></row><table>至此,網元數據集中第一行處理完畢,執行步驟S303,網元數據指針加1,指向網元數據集中的第二行,重復執行上述步驟后,得到網元結構對象鏈表如下:<table>tableseeoriginaldocumentpage14</column></row><table>同樣,處理網元數據集第三行后,得到網元結構對象鏈表數據如下:<table>tableseeoriginaldocumentpage14</column></row><table>類似地,處理網元數據集中第四行數據時,由于供應商變化,故需新建供應商節點。此時網元結構對象鏈表數據變為<table>tableseeoriginaldocumentpage14</column></row><table>然后由于地區的上一值被重置,地區節點又需要新建,不過此次新建的地區節點的上級節點為N(京X)。最后新建邏輯站節點。于是網元數據集中整個4行數據就處理完畢。由于每新建一個節點,都會往內存表拓撲樹節點數據集中加入一行數據。因此當用戶有需要査找定位某節點時,只需在此內存表中搜索,就可迅速得到該節點指針,效率較高。雖然以上描述本發明的具體實施方式,但本領域普通技術人員應當知道,這些僅為舉例說明,可以對這些實施方式做出多種變更或修改,而不背離本發明的原理和實質。權利要求1、一種在服務器/客戶端結構中構造拓撲樹的方法,其特征在于,包括如下步驟A)根據相連的被管理設備的屬性數據,定義拓撲樹結構,并保存于所述服務器數據庫中;B)使用戶與至少一個拓撲樹結構相關聯;C)從服務器數據庫中讀取網元數據及被關聯的拓撲樹結構數據,并創建拓撲樹節點數據集;D)按定義的拓撲樹結構構造拓撲樹,在構造過程中對應每個節點,在拓撲樹節點數據集中加入相應數據,用于快速定位所述拓撲樹的節點。2、根據權利要求1所述的構造拓撲樹的方法,其特征在于,所述步驟A)進一步包括如下步驟Al)定義對拓撲樹的描述,包括樹編號、樹名稱;A2)定義拓撲樹的結構,包括樹編號、節點層次、網元屬性。3、根據權利要求2所述的構造拓撲樹的方法,其特征在于,所述步驟A2)中的網元屬性包括被管理設備所有其具有的屬性。4、根據權利要求1所述的構造拓撲樹的方法,其特征在于,所述步驟B)中關聯方式包括用戶編號、樹編號、顯示順序。5、根據權利要求1所述的構造拓撲樹的方法,其特征在于,所述步驟C)中所述的拓撲樹節點數據集所包含的數據包括網元屬性名、網元屬性值以及樹節點對象指針。6、根據權利要求5所述的構造拓撲樹的方法,其特征在于,所述步驟C)進一步包括如下步驟-Cl)根據所述拓撲樹結構,創建網元數據索引,將讀取的網元數據按所述索引排序,得到網元數據集;C2)創建網元結構對象鏈表。7、根據權利要求6所述的構造拓撲樹的方法,其特征在于,所述步驟Cl)中所述的網元數據索引形式包括節點層次1網元屬性+節點層次2網元屬性+…+節點層次N網元屬性。8、根據權利要求7所述的構造拓撲樹的方法,其特征在于,所述步驟C2)中所述的網元結構的屬性包括樹編號、節點層次、網元屬性、節點指針、父節點指針和上一值。9、根據權利要求8所述的構造拓撲樹的方法,其特征在于,所述步驟D)進一步包括如下步驟Dl)設置網元數據指針和網元結構對象指針及其初始值;D2)判斷網元數據集中的網元數據是否遍歷完成,如完成,則表示完成拓撲樹的構造,執行步驟D7);如未完成,執行步驟D2);D3)判斷網元結構對象鏈表中的網元結構對象是否遍歷完畢,如是,網元數據指針加l,并執行步驟D2),如否,執行下一步D4);D4)從該網元結構對象中得到網元屬性值,在網元數據集中取出當前行中字段名為所述網元屬性值的字段值,與網元結構對象中的上一值比較,如果不等,則執行下一步驟D5),否則執行步驟D7);D5)在樹上新建一個網元節點,其父節點為當前網元結構對象中的父節點指針,將當前網元結構對象的上一值用所述字段名為所述網元屬性值的字段值替換,將網元結構對象鏈表中從網元結構對象指針指向的網元結構對象開始的父節點指針全指向此新建節點,上一值則全部設置為初始值;D6)向所述拓撲樹節點數據集中插入一行數據,其網元屬性名為所述網元屬性值,網元屬性值為前行中字段名為所述網元屬性值的字段值,樹節點對象指針指向新建節點;D7)所述網元結構對象指針加l,返回步驟E3);D8)結束。10、根據權利要求9所述的構造拓撲樹的方法,其特征在于,在所述步驟D5)中,當所述父節點指針為nil時,該新建網元節點為根節點。全文摘要本發明涉及一種在服務器/客戶端結構中構造拓撲樹的方法,包括如下步驟根據相連的被管理設備的屬性數據,定義拓撲樹結構,并保存于所述服務器數據庫中;使用戶與至少一個拓撲樹結構相關聯;從服務器數據庫中讀取網元數據及被關聯的拓撲樹結構數據,并創建拓撲樹節點數據集;按定義的拓撲樹結構構造拓撲樹,在構造過程中對應每個節點,在拓撲樹節點數據集中加入相應數據,用于快速定位所述拓撲樹的節點。實施本發明的在服務器/客戶端結構中構造拓撲樹的方法,具有以下有益效果用本方法構造的拓撲樹結構豐富、搜索性能好。文檔編號H04L12/28GK101222391SQ20071007752公開日2008年7月16日申請日期2007年11月30日優先權日2007年11月30日發明者彭宇環,黃平剛申請人:深圳國人通信有限公司