專利名稱:數(shù)據(jù)庫和數(shù)據(jù)庫處理方法
技術(shù)領(lǐng)域:
本發(fā)明涉及數(shù)據(jù)庫和用于在數(shù)據(jù)庫樹結(jié)構(gòu)中存儲和搜索數(shù)據(jù) 的方法。特別地,但不排他地,本發(fā)明涉及對存儲在數(shù)據(jù)庫樹結(jié)構(gòu) 中的數(shù)據(jù)的處理,供數(shù)據(jù)包路由應(yīng)用程序之用。
背景技術(shù):
網(wǎng)際協(xié)議(ip)網(wǎng)絡(luò)包括許多互連路由器實體,其負(fù)責(zé)作出關(guān) 于數(shù)據(jù)包可以從源流到目的地的那些路徑的決定。路由協(xié)議被用于 獲取關(guān)于網(wǎng)絡(luò)的信息,并確定特定網(wǎng)絡(luò)目的地或不同區(qū)域或該網(wǎng)絡(luò)
的子網(wǎng)絡(luò)之間的路由。在每個i 各由器處,可以將這些路由存儲在祐: 稱為路由表的數(shù)據(jù)庫中。創(chuàng)建和維護(hù)路由表內(nèi)容的過程通常被稱作 為ip路由。
路由器還可以存儲執(zhí)行轉(zhuǎn)發(fā)數(shù)據(jù)庫中的數(shù)據(jù)包所必須的信息, 其通常被稱作為轉(zhuǎn)發(fā)表。使用存儲在轉(zhuǎn)發(fā)表中的信息接收數(shù)據(jù)包并 將該數(shù)據(jù)包發(fā)送到其目的地上的處理通常^皮稱作為ip轉(zhuǎn)發(fā)。
通常不直接將路由表用在包轉(zhuǎn)發(fā)處理中。而是,包路由處理根 據(jù)路由信息和一個或多個路由協(xié)議(諸如路由選擇信息協(xié)i義(RIP)
或邊界網(wǎng)關(guān)協(xié)議(BGP))將關(guān)于所選路由的數(shù)據(jù)輸出到轉(zhuǎn)發(fā)表。 然后,可以(例如)使用有效的硬件實現(xiàn)方式在包轉(zhuǎn)發(fā)過程期間訪 問轉(zhuǎn)發(fā)表的內(nèi)容。
被傳輸?shù)絀P網(wǎng)絡(luò)中的數(shù)據(jù)包將包括IP目的地址。IPv4地址是 32位長,其給出了超過40億的IP地址的范圍,而IPv6地址更長。 在每個路由器處為這個數(shù)目的IP地址交換和更新轉(zhuǎn)發(fā)信息通常是 不切實際的。
代替地,路由器將通常地維護(hù)包含許多IP地址前綴條目和對 應(yīng)于這些前綴條目的每一個的轉(zhuǎn)發(fā)信息的轉(zhuǎn)發(fā)表。當(dāng)關(guān)于網(wǎng)絡(luò)目的 i也址的^f言息到達(dá)路由器時,可以由該路由器4企查網(wǎng)纟各目的;也的IP 地址,然后,該路由器可以搜索其路由表,查找對網(wǎng)絡(luò)目的地的IP 目的地址的最長的匹配。該最長的匹配按照匹配目的IP地址的最長 前綴的形式出現(xiàn),即,具有匹配IP網(wǎng)絡(luò)地址的最大數(shù)目的初始位的 ^各由。這^皮稱作為'最長前綴匹配,。
然后,路由器可以將該信息輸出到轉(zhuǎn)發(fā)表,從而當(dāng)該目的地址 的數(shù)據(jù)包到達(dá)該路由器時,可以使用包含在轉(zhuǎn)發(fā)表中的轉(zhuǎn)發(fā)信息通 過該路由器中的包轉(zhuǎn)發(fā)功能或模塊轉(zhuǎn)發(fā)這些數(shù)據(jù)包??梢园凑账?的頻率來重復(fù)包轉(zhuǎn)發(fā)處理,可以將數(shù)據(jù)包從一個路由器轉(zhuǎn)發(fā)到另一 個if各由器,直到其到達(dá)期望的IP目的i也址。
通常地,將IPv4地址表示為通過小數(shù)點所分隔的一連串的四 個十進(jìn)制數(shù)。每個十進(jìn)制數(shù)代表32位IPv4地址的八個位,從而每 個十進(jìn)制數(shù)處于從零至255的范圍。
前綴指的是IP地址或其初始部分J吏用IPv4,例如"192.168/16" 是"192.168.1.4,,、 "192.168.200.200,,、以及"192.168.26.8"等的 16位前綴。事實上,"192.168/16"是所有地址為"192.168.x.y"的 16 4立前綴,其中,0 2x^255,以及0Sy^255。這才羊,3各由器處 包含前綴"192.168/16"的路由信息的路由表能夠?qū)Ψ秶?"192.168.x.y"內(nèi)的所有IP目的地址的數(shù)據(jù)包進(jìn)行路由。然而,路 由器還可以包含i者如"192.168.4.5"的32 ^f立IP目的;也的更具體的
路由信息。這樣,網(wǎng)絡(luò)IP地址可以與路由器的路由表中的所有前綴 進(jìn)行比4交,以^是供最長匹配前綴形式的合適的(諸如更具體地)路 由信息,然后可以將該信息輸出到轉(zhuǎn)發(fā)表。
這樣,IP網(wǎng)絡(luò)中的路由過程涉及通過大量路由器的路由表的大 量搜索。此外,當(dāng)添加新路由并且其他路由變?yōu)閺U棄時,會頻繁地 改變路由表。因此,就較高搜索速度同時所需數(shù)據(jù)存儲資源保持較 低而言,期望實現(xiàn)這些系統(tǒng)的算法和數(shù)據(jù)結(jié)構(gòu)是高效的。
樹是廣泛使用的一種具有樹形狀的數(shù)據(jù)結(jié)構(gòu),該樹形狀具有一 組基于根節(jié)點的鏈接節(jié)點。每個節(jié)點可以包含值或條件,并具有零 個或多個子節(jié)點,其緊接著位于樹中的每個節(jié)點之下。具有孩子的 節(jié)點被稱為孩子的雙親。節(jié)點具有至多一個雙親。葉節(jié)點是具有零 個子節(jié)點的樹數(shù)據(jù)結(jié)構(gòu)的節(jié)點,其常常離根節(jié)點最遠(yuǎn)。
節(jié)點的祖先是該節(jié)點的雙親,或該節(jié)點的雙親的雙親等。根是 樹中所有其他節(jié)點的祖先。給定節(jié)點的 一組祖先是從根到該節(jié)點通 過該樹的(最短)路徑。節(jié)點的后裔是該節(jié)點的孩子,或該節(jié)點的
孩子的孩子等。當(dāng)且僅當(dāng)節(jié)點B是節(jié)點A的后裔時,節(jié)點A是節(jié) 點B的^L先。
二叉查找樹是二叉樹數(shù)據(jù)結(jié)構(gòu),其中每個節(jié)點具有相應(yīng)的關(guān)鍵 字(key )。 二叉查找樹中的節(jié)點的左子樹僅包含小于該節(jié)點值的值, 而二叉查找樹中節(jié)點的右子樹僅包含大于或等于該節(jié)點值的值。二 叉樹的排序和搜索算法相對來說易于高效。
數(shù)字樹是用于存儲字符串的樹,在其中通過兩個或多個字符串 共有的子字符串來組織節(jié)點。數(shù)字樹的搜索只涉及搜索關(guān)鍵字的使 用,即,當(dāng)遍歷該樹時在每個節(jié)點處不讀取與每個節(jié)點相關(guān)聯(lián)的值。
代替地,在樹的搜索期間,僅當(dāng)發(fā)現(xiàn)合適的節(jié)點關(guān)鍵字時才讀取節(jié) 點值。
有時被稱為前綴樹的特里結(jié)構(gòu)(trie)是有序的樹數(shù)據(jù)結(jié)構(gòu),其 被用于存儲關(guān)鍵字是字符串的關(guān)聯(lián)陣列。不像二叉查找樹,樹中沒 有節(jié)點存儲與該節(jié)點相關(guān)聯(lián)的關(guān)鍵字。代替地,樹中節(jié)點的位置確 定節(jié)點與什么關(guān)鍵字相關(guān)聯(lián)。任何一個節(jié)點的所有后裔都具有與該 節(jié)點相關(guān)聯(lián)的字符串的公共前綴。根節(jié)點通常與空字符串相關(guān)聯(lián)。
特里結(jié)構(gòu)的優(yōu)點包括快速的關(guān)鍵字查找時間和其對于最長前 綴匹配的適用性。最長前綴匹配涉及識別其節(jié)點關(guān)鍵字與給出的搜 索關(guān)鍵字共享最長前綴的節(jié)點。特里結(jié)構(gòu)還允許搜索關(guān)4建字與具有 公共前綴的整組節(jié)點關(guān)鍵字的關(guān)聯(lián)。特里結(jié)構(gòu)具有以下缺點當(dāng)節(jié) 點關(guān)鍵的集合較稀疏時(即,當(dāng)實際節(jié)點關(guān)鍵字形成潛在關(guān)鍵字的 集合的小子集時)特里結(jié)構(gòu)內(nèi)的許多內(nèi)部節(jié)點(非葉節(jié)點)具有一 個后裔,引起該特里結(jié)構(gòu)的高空間占有率。
Patricia算法,4全索以字母凄t字混合所編碼的信息的實際算 法',(Donald R. Morrison, Journal of the ACM, 15欄,第4期,1968 年10月,pp514-534) 1是提供在大文件中存儲、索引、以及檢索 信息的靈活手段的算法,其節(jié)省了索引空間和再索引的時間。當(dāng)添 加新資料時,其不需要文本或索引的重排。Patricia算法能夠用于創(chuàng) 建和處理Patricia初t結(jié)構(gòu)。
Patricia杉于(有時被_稱為radix樹)是二叉凄t字特里結(jié)構(gòu)(binary digital trie )的實例,在該二叉數(shù)字特里結(jié)構(gòu)中,僅是作為孩子的任 何節(jié)點與其雙親合并。傳統(tǒng)特里結(jié)構(gòu)的遍歷使用關(guān)鍵字的每個部分 來確定哪個子樹至分枝,然而通過存儲搜索關(guān)^t字部分的標(biāo)識符, Patricia樹指定接下來應(yīng)當(dāng)使用搜索關(guān)鍵字的哪個要素來確定分枝, 并且因此接下來應(yīng)當(dāng)遍歷哪個節(jié)點。這去除了對于樹中的任何節(jié)點
僅具有一個后裔的需求,從而僅將真實的分枝包括在索引中。這意 味著索引的大小獨立于所存儲的短語的長度。
Patricia算法允許以下的快速確定對于需要'約與logn相似, 的計算(O (logn))的n個節(jié)點,搜索關(guān)鍵字是否對應(yīng)于樹中的節(jié) 點關(guān)鍵字;樹中任何節(jié)點的關(guān)鍵字是否是搜索關(guān)鍵字的前綴,以及 如果是的話,在O (logn)的計算中哪個這種前綴是最長的;以及 在O (logn)的計算中搜索關(guān)鍵字是否是樹中的任何節(jié)點關(guān)鍵字的 前綴,以及如果是的話,在O (m)計算中走查(walkthrough)帶 有該前綴的m個節(jié)點關(guān)鍵字。這些特性使Patricia算法成為IP轉(zhuǎn)發(fā) 應(yīng)用程序的合適選擇,這些IP轉(zhuǎn)發(fā)應(yīng)用程序依賴IP目的地址與前 綴的快速匹配,即,溲索關(guān)4建字與節(jié)點關(guān)4建字的匹配。
根據(jù)Patricia算法所構(gòu)造的數(shù)據(jù)結(jié)構(gòu)具有限制,這是由于存儲 在數(shù)據(jù)結(jié)構(gòu)中的節(jié)點關(guān)鍵字不能是彼此前綴。
已經(jīng)進(jìn)行多種嘗試來解決這個限制,例如,美國專利US 6,396,842 Bl描述了 一種^t索方法,其利用具有可變長度關(guān)4建字的 基于最長匹配的radix 4臾索特里結(jié)構(gòu)并且具有處理作為其他關(guān)4建字 前綴的關(guān)4建字的能力。該方法基于Patricia算法。在由該算法處理 之前〗奮改代表樹的關(guān)4建字的地址前綴。將單個字節(jié)加到每個地址前 綴的開始,其被設(shè)置為等于地址前綴的長度。后面是地址前綴的組 合地址長度字節(jié)^皮Patricia算法所4吏用。當(dāng)一個地址是另一個地址 的前綴時,所添加的字節(jié)將佳_地址^舉一并且互不相同。因為已經(jīng)4吏 節(jié)點關(guān)^T建字唯一,所以Patricia算法能夠被用于搜索特里結(jié)構(gòu)。在 解決Patricia的關(guān)4建字前綴限制中,因為該方法需要增加的存儲容 量并且還需要對于不同前綴長度的額外的搜索,所以降低了性能。
解決樹數(shù)據(jù)結(jié)構(gòu)的關(guān)鍵字前綴限制的其他嘗試(諸如才艮據(jù)
Patricia算法所構(gòu)造的那些數(shù)據(jù)結(jié)構(gòu))破壞樹數(shù)據(jù)結(jié)構(gòu)的合乎要求的 性質(zhì),例如,當(dāng)遍歷樹時需要頻繁的檢查節(jié)點關(guān)鍵字。
因此,需要提供一種改進(jìn)的方案來克服用于處理樹數(shù)據(jù)結(jié)構(gòu)中 的凌t據(jù)的算法(類似于Patricia算法)的節(jié)點關(guān)4建字前綴限制。
發(fā)明內(nèi)容
根據(jù)本發(fā)明的第一方面,提出了一種使用搜索關(guān)鍵字搜索數(shù)據(jù) 庫的方法,該數(shù)據(jù)庫包含按照樹結(jié)構(gòu)來存儲的凄t據(jù),該樹結(jié)構(gòu)包括 多個節(jié)點,節(jié)點具有相關(guān)聯(lián)的數(shù)據(jù),該相關(guān)聯(lián)的數(shù)據(jù)包括
一個或多個節(jié)點指針,該節(jié)點指針包括識別在搜索該樹結(jié)構(gòu)時 可以被遍歷的節(jié)點的數(shù)據(jù);
節(jié)點關(guān)鍵字;以及
4叟索關(guān)4建字部分標(biāo)識符,識別4臾索關(guān)4定字部分,該4臾索關(guān)4定字 部分將被用于確定在遍歷節(jié)點時將要被使用的節(jié)點指針,
其中,該方法包4舌
將關(guān)于第一節(jié)點的第一關(guān)聯(lián)數(shù)據(jù)以及關(guān)于第二節(jié)點的第二關(guān) 聯(lián)數(shù)據(jù)存儲在該數(shù)據(jù)庫中,該第一關(guān)聯(lián)數(shù)據(jù)包括第一節(jié)點關(guān)鍵字, 以及該第二關(guān)聯(lián)數(shù)據(jù)包括第二節(jié)點關(guān)鍵字,其中,第一節(jié)點關(guān)4建字 是第二節(jié)點關(guān)鍵字的前綴(第二節(jié)點關(guān)鍵字以第一節(jié)點關(guān)鍵字作為 前綴);以及
使用搜索關(guān)鍵字搜索該樹結(jié)構(gòu),
其中,使用該搜索關(guān)鍵字的搜索涉及正被遍歷的第二節(jié)點,以 及如果第 一節(jié)點關(guān)鍵字具有匹配該搜索關(guān)鍵字的前綴,則在遍歷第 二節(jié)點之后識別該第 一節(jié)點。
因此,本發(fā)明允許搜索數(shù)據(jù)庫中的數(shù)據(jù),在該數(shù)據(jù)庫中,存儲 在數(shù)據(jù)庫中的 一個或多個節(jié)點具有相關(guān)聯(lián)的節(jié)點關(guān)鍵字,其作為與 存儲在該數(shù)據(jù)庫中的其他節(jié)點相關(guān)聯(lián)的節(jié)點關(guān)鍵字的前綴。因此本 發(fā)明允許將較寬范圍的節(jié)點關(guān)鍵字表示在該數(shù)據(jù)庫中。
如果數(shù)據(jù)庫的搜索涉及遍歷第一節(jié)點,其中,第一節(jié)點的節(jié)點 關(guān)鍵字是第二節(jié)點的節(jié)點關(guān)鍵字的前綴,則本發(fā)明允許在遍歷第二 節(jié)點之后識別第 一節(jié)點。這可以涉及將所識別的節(jié)點的節(jié)點關(guān)鍵字 與搜索關(guān)鍵字進(jìn)行比較,以確定在所識別的節(jié)點關(guān)鍵字與搜索關(guān)鍵 字之間是否存在嚴(yán)格匹配、前纟叕匹配、或不匹配。
本發(fā)明通常地需要兩個節(jié)點指針和數(shù)據(jù)的存儲,其中,該數(shù)據(jù)
識別在遍歷節(jié)點時將^皮4吏用的搜索關(guān)4建字的一部分,即,搜索關(guān)鍵: 字部分標(biāo)識符。在搜索數(shù)據(jù)庫期間需要對節(jié)點關(guān)鍵字的有限的訪 問,并且搜索速度有利地獨立于搜索關(guān)鍵字長度。不需要將節(jié)點關(guān) 鍵字存儲在樹結(jié)構(gòu)自身中。代替地,可以將節(jié)點關(guān)鍵字存儲在別處, 以及(例如)通過指針將節(jié)點關(guān)鍵字與其節(jié)點相關(guān)聯(lián)??商娲?, 這可以通過將該節(jié)點和其節(jié)點關(guān)鍵字嵌入到^^共數(shù)據(jù)結(jié)構(gòu)中來實 現(xiàn),使得通過其在存儲器中相對固定位置來確定它們的關(guān)聯(lián)。接下 來,這種實現(xiàn)方式將不需要節(jié)點和其節(jié)點關(guān)鍵字之間的指針。
優(yōu)選地,存儲第三數(shù)據(jù),該第三數(shù)據(jù)指示第一節(jié)點關(guān)鍵字是第 二節(jié)點關(guān)鍵字的前綴(第二節(jié)點關(guān)鍵字以第一節(jié)點關(guān)鍵字作為前 綴)。因此,如果第二節(jié)點關(guān)鍵字與搜索關(guān)^:字的比較導(dǎo)致不匹配, 則可以識別其節(jié)點關(guān)鍵字是搜索關(guān)鍵字的前綴的第 一節(jié)點。
在 一個實施例中,這可以通過存儲與從第二節(jié)點指向第 一 節(jié)點 的節(jié)點指針相關(guān)聯(lián)的數(shù)據(jù)并跟隨該節(jié)點指針以從第二節(jié)點至第一 節(jié)點來遍歷樹結(jié)構(gòu)來實現(xiàn)。因此,可以使用這些節(jié)點指4十來識別和
遍歷其節(jié)點關(guān)^t字是^:此前綴的節(jié)點。
可替代地,這可以通過在遍歷第二節(jié)點之后但在隨后的遍歷第 一節(jié)點之前,遍歷樹結(jié)構(gòu)中第一節(jié)點之上的一個或多個節(jié)點來實 現(xiàn)。因此,可以對樹結(jié)構(gòu)的所有或部分搜索額外時間,4旦額外^:索 可以在遍歷第一節(jié)點期間而不是繼續(xù)遍歷第二節(jié)點期間完成。
此外,可替代地,這可以通過在遍歷樹期間對其搜索關(guān)鍵字部 分標(biāo)識符匹配其雙親的4叟索關(guān)4定字部分標(biāo)識符的 一個或多個節(jié)點 進(jìn)行記錄(即,通過留意具有匹配節(jié)點關(guān)4建字的潛在前綴的那些節(jié) 點)來實現(xiàn)。
優(yōu)選地,特定節(jié)點的搜索關(guān)鍵字部分標(biāo)識符涉及搜索關(guān)鍵字 位,搜索關(guān)鍵字位將被用于確定在遍歷特定節(jié)點時將被4吏用的節(jié)點 指針。因此,代替在遍歷節(jié)點時必須檢測每個單個節(jié)點的節(jié)點關(guān)鍵 字,僅需要檢查其搜索關(guān)鍵字部分標(biāo)識符,以確定接下來遍歷哪個 節(jié)點。就與搜索數(shù)據(jù)樹結(jié)構(gòu)相關(guān)聯(lián)的計算復(fù)雜度而言,這給出了提 高的效率。
在一個實施例中,特定節(jié)點的搜索關(guān)鍵字部分標(biāo)識符涉及將被 使用的搜索關(guān)鍵字位與先前被使用的搜索關(guān)4定字位相比的相對位 置。因此,節(jié)點的搜索關(guān)鍵字部分標(biāo)識符可以涉及一個或多個先前 尋皮遍歷的節(jié)點。
可替代地,特定節(jié)點的搜索關(guān)鍵字部分標(biāo)識符可以涉及將被使 用的搜索關(guān)鍵字位的絕對位置。這可以有助于降低在遍歷節(jié)點期間 所需的處理的量,例如,降低需要被比較的搜索關(guān)鍵字和節(jié)點關(guān)鍵
字位的^t目。優(yōu)選地,4臾索關(guān)4建字部分標(biāo)識符的檢查允"i午通過4企查 由指針?biāo)玫墓?jié)點是否具有較低的搜索關(guān)鍵字部分標(biāo)識符來確 定節(jié)點指針的類型,即,來自特定節(jié)點的指針是否是祖先指針或孩 子指針。這能夠幫助避免對于指示節(jié)點指針類型的標(biāo)記等的需求。
優(yōu)選地,存儲與多個節(jié)點中的 一個或多個節(jié)點相關(guān)^:的數(shù)據(jù)參 數(shù)。因此,能夠?qū)⑿畔⒁运鎯Φ臄?shù)據(jù)參數(shù)的形式與每個數(shù)據(jù)節(jié)點 相關(guān)聯(lián)。這種所存儲的數(shù)據(jù)參數(shù)能夠被看作與樹結(jié)構(gòu)相關(guān)聯(lián)的有效 載荷。樹結(jié)構(gòu)的最終結(jié)果的搜索結(jié)果可以包括訪問以及隨后輸出所 存儲的數(shù)據(jù)參數(shù)。在IP路由實現(xiàn)中,這種所存儲的數(shù)據(jù)參數(shù)可以包
括路由或轉(zhuǎn)發(fā)與路由、網(wǎng)絡(luò)實體、網(wǎng)絡(luò)地址或部分網(wǎng)絡(luò)等相關(guān):f關(guān)的
JS息。
優(yōu)選地,對數(shù)據(jù)庫的搜索包括使用基本上類似于Patricia算法 的算法(其提供高效的搜索能力)搜索。
根據(jù)本發(fā)明的第二方面,提供了 一種將數(shù)據(jù)存儲到數(shù)據(jù)庫中的 方法,該數(shù)據(jù)庫包含按照樹結(jié)構(gòu)來存儲的數(shù)據(jù),該樹結(jié)構(gòu)包括多個 節(jié)點,節(jié)點相關(guān)聯(lián)的數(shù)據(jù),該相關(guān)聯(lián)的數(shù)據(jù)包括
一個或多個節(jié)點指針,該節(jié)點指針包括識別在搜索該樹結(jié)構(gòu)時 可以纟支遍歷的節(jié)點的lt據(jù);
節(jié)點關(guān)鍵字;
搜索關(guān)鍵字部分標(biāo)識符,識別搜索關(guān)鍵字部分,該搜索關(guān)鍵字 部分將被用于確定在遍歷節(jié)點時將要使用的節(jié)點指針,
其中,該方法包括將新節(jié)點插入到該樹結(jié)構(gòu)中,該新節(jié)點具有 相關(guān)聯(lián)的節(jié)點關(guān)鍵字,該插入包括
使用插入搜索關(guān)鍵字來搜索該數(shù)據(jù)庫,該插入搜索關(guān)鍵字包括 該新節(jié)點關(guān)鍵字,使用該插入搜索關(guān)鍵字的該搜索識別該樹結(jié)構(gòu)中 的給定節(jié)點,該給定節(jié)點的節(jié)點關(guān)鍵字與該插入搜索關(guān)鍵字具有給
定前綴關(guān)系;
以對于識別出的該給出節(jié)點最近的關(guān)系將該第 一 新節(jié)點插入 到該樹結(jié)構(gòu)中;以及
向該第一新節(jié)點分配
一個或多個節(jié)點指針,
等于該插入的搜索關(guān)鍵字的節(jié)點關(guān)鍵字,
等于該樹中該第 一新節(jié)點之上的節(jié)點的搜索關(guān)鍵字部分 標(biāo)識符的4叟索關(guān)4建字部分標(biāo)識符。
因此,本發(fā)明允許將數(shù)據(jù)存儲到數(shù)據(jù)庫中,在該數(shù)據(jù)庫中,存 儲在該數(shù)據(jù)庫中的某些節(jié)點具有作為與存儲在該數(shù)據(jù)庫中的其他 節(jié)點相關(guān)聯(lián)的節(jié)點關(guān)鍵字的前綴的關(guān)聯(lián)節(jié)點關(guān)鍵字。因此,本發(fā)明 允許在數(shù)據(jù)庫中表示更寬范圍的節(jié)點關(guān)鍵字。
可以為添加至數(shù)據(jù)庫中的新節(jié)點分配等于在樹結(jié)構(gòu)中的緊接 著新節(jié)點之上的節(jié)點的搜索關(guān)鍵字部分標(biāo)識符的搜索關(guān)鍵字部分 標(biāo)識符。這意p木著在隨后的4叟索樹結(jié)構(gòu)期間可以^兆過新節(jié)點,有助 于進(jìn)一步加速這個隨后的搜索。
優(yōu)選地,給定前綴關(guān)系包括該插入搜索關(guān)4建字是識別出的該纟合 定節(jié)點的節(jié)點關(guān)鍵字的前綴。例如,如果樹結(jié)構(gòu)包含具有關(guān)聯(lián)節(jié)點 關(guān)鍵字000的節(jié)點并且使用對應(yīng)于將被添加到該樹結(jié)構(gòu)的節(jié)點的節(jié) 點關(guān)鍵字的搜索關(guān)鍵字00來搜索數(shù)據(jù)庫,則將發(fā)生該情形。
優(yōu)選地,最近的關(guān)系包括將該新節(jié)點插入到該樹中的識別出的 該給定節(jié)點之上。因此,可以將其節(jié)點關(guān)鍵字是現(xiàn)有節(jié)點的節(jié)點關(guān) 鍵字的前綴的新節(jié)點添加到樹中的現(xiàn)有節(jié)點之上。可以將新節(jié)點插 入到樹結(jié)構(gòu)中的緊接著識別出的給定節(jié)點之上,或樹結(jié)構(gòu)中的給出 識別節(jié)點的更遠(yuǎn)之上。
優(yōu)選地,將先前指向識別的該給定節(jié)點的節(jié)點指針調(diào)整為指向 該新節(jié)點。
優(yōu)選地,創(chuàng)建從該新節(jié)點指向識別出的該給定節(jié)點的節(jié)點指針。
優(yōu)選地,給定前綴關(guān)系包括識別的該給定節(jié)點關(guān)鍵字的節(jié)點關(guān) 鍵字是該插入搜索關(guān)鍵字的前綴。例如,如果樹結(jié)構(gòu)包含具有關(guān)聯(lián)
節(jié)點關(guān)鍵字00的節(jié)點并且使用對應(yīng)于將被添加至樹結(jié)構(gòu)的節(jié)點的 節(jié)點關(guān)鍵字的搜索關(guān)鍵字000來搜索數(shù)據(jù)庫,則可能發(fā)生這種情形。
優(yōu)選地,最近的關(guān)系包括將該新節(jié)點插入到該杉于中的該主合出識 別節(jié)點之下。因此,可將新節(jié)點添加到樹中的現(xiàn)有節(jié)點之下,其中, 與現(xiàn)有節(jié)點相關(guān)聯(lián)的節(jié)點關(guān)鍵字是該新節(jié)點的關(guān)聯(lián)節(jié)點關(guān)鍵字的前綴。
優(yōu)選地,將先前從識別的該給定節(jié)點指出來的節(jié)點指針調(diào)整為 指向該新節(jié)點。
優(yōu)選地,在該樹中創(chuàng)建從該新節(jié)點指向該新節(jié)點之下的節(jié)點的
節(jié)點指針。
優(yōu)選地,在該樹中創(chuàng)建從該新節(jié)點指向該新節(jié)點之上的節(jié)點 (其節(jié)點關(guān)鍵字是該新節(jié)點的節(jié)點關(guān)鍵字的前綴)的節(jié)點指針。因 此,本發(fā)明允許其關(guān)聯(lián)節(jié)點關(guān)^:字是彼此前綴的多個節(jié)點之間的遍 歷。
優(yōu)選地,所創(chuàng)建的指向該樹中的該新節(jié)點之上的節(jié)點的指針指 向這樣的節(jié)點,該節(jié)點的節(jié)點關(guān)鍵字具有與該樹中的該新節(jié)點之上 的多個節(jié)點中的該新節(jié)點的節(jié)點關(guān)4建字相匹配的最長匹配前纟褒。因 此,能夠識別具有^:索關(guān)4建字的下一個最長匹配前綴的節(jié)點。例如, 當(dāng)在ip路由應(yīng)用程序中存在與最長匹配前綴相關(guān)聯(lián)的4晉誤或故障 時(例如,被破壞的或超載的通信鏈路),這是有用的。
優(yōu)選地,將從該新節(jié)點指出來的指針調(diào)整為指向根節(jié)點,該根 節(jié)點具有空節(jié)點關(guān)鍵字。樹結(jié)構(gòu)可以包含位于樹頂部處的根節(jié)點。 根節(jié)點可以具有關(guān)聯(lián)空節(jié)點關(guān)鍵字,其是樹中的所有節(jié)點關(guān)鍵字的 前綴。因此,乂人新節(jié)點處4翁入到樹結(jié)構(gòu)中的至少一個指4十可以向上 指向根節(jié)點。
優(yōu)選地,通過反轉(zhuǎn)將該新節(jié)點插入到該樹結(jié)構(gòu)中所涉及一個或 多個步驟來從該樹結(jié)構(gòu)中去除該新節(jié)點。因此,如果不再存在對于 存儲與節(jié)點相關(guān)聯(lián)的數(shù)據(jù)的需求,則可以將節(jié)點從樹中去除,并相 應(yīng)地去除和調(diào)整相關(guān)的節(jié)點指針。
如果在添加了新節(jié)點之后,沒有將更多的節(jié)點添加到樹結(jié)構(gòu) 中,則去除過程是可逆的,使得可以相反地采取^f皮用于插入新節(jié)點 的正好相同的步驟。然而,在已經(jīng)添加了新節(jié)點之后將更多的節(jié)點 添加到樹結(jié)構(gòu)中,則去除新節(jié)點可以涉及不同于那些先前被用于添 加節(jié)點的步艱艮。
在ip路由場景中,這可以對應(yīng)于由樹結(jié)構(gòu)中的節(jié)點所表示的 網(wǎng)絡(luò)節(jié)點可以不再是經(jīng)由特定ip地址可聯(lián)系的情形。在這種情況
下,可以完全從該樹結(jié)構(gòu)中去除樹中的節(jié)點??商娲兀梢孕薷?樹中的與節(jié)點相關(guān)聯(lián)的數(shù)據(jù)以反映對于節(jié)點的新聯(lián)系細(xì)節(jié)。
根據(jù)本發(fā)明的第三方面,提供了 一種在數(shù)據(jù)通信網(wǎng)絡(luò)中路由數(shù)
才居包的方法,該方法包4舌
接收與該數(shù)據(jù)通信網(wǎng)絡(luò)中的路由相關(guān)聯(lián)的路由數(shù)據(jù);
使用與該接收的路由數(shù)據(jù)相關(guān)聯(lián)的搜索關(guān)鍵字來搜索數(shù)據(jù)包 路由數(shù)據(jù)庫,根據(jù)本發(fā)明第一方面搜索該數(shù)據(jù)包路由數(shù)據(jù)庫;以及
基于搜索該數(shù)據(jù)包路由數(shù)據(jù)庫,將與該路由相關(guān)聯(lián)的數(shù)據(jù)存儲 到該數(shù)據(jù)包路由數(shù)據(jù)庫中。
本發(fā)明的這個方面將本發(fā)明的第 一方面的方法應(yīng)用于數(shù)據(jù)通 信網(wǎng)絡(luò)中的數(shù)據(jù)包路由中。該網(wǎng)絡(luò)可以是根據(jù)網(wǎng)際協(xié)議來工作的互 聯(lián)網(wǎng)。這里數(shù)據(jù)庫可以包含用于數(shù)據(jù)通信網(wǎng)絡(luò)中大量路由的數(shù)據(jù)包 路由信息,并且關(guān)聯(lián)節(jié)點關(guān)鍵字可以與網(wǎng)絡(luò)地址相關(guān)聯(lián)。
在本發(fā)明的實施例中,網(wǎng)絡(luò)實體可以是該網(wǎng)絡(luò)中的路由,并且 該數(shù)據(jù)的存儲包括將新節(jié)點插入到對應(yīng)于該路由的該數(shù)據(jù)包路由 凄t據(jù)庫中。
例如,響應(yīng)于新路由、網(wǎng)纟備實體、或變?yōu)榭蓪戧P(guān)系的子網(wǎng)纟備(與 已經(jīng)在轉(zhuǎn)發(fā)數(shù)據(jù)庫中的節(jié)點相關(guān)聯(lián)的節(jié)點關(guān)^l定字是其網(wǎng)絡(luò)地址的 前綴,或者其網(wǎng)絡(luò)地址是與已經(jīng)在轉(zhuǎn)發(fā)數(shù)據(jù)庫中的節(jié)點相關(guān)聯(lián)的節(jié) 點關(guān)鍵字的前綴),可以發(fā)生新節(jié)點至數(shù)據(jù)庫的添加。
在本發(fā)明的其他實施例中,路由可以是該網(wǎng)絡(luò)中現(xiàn)有的路由, 并且該數(shù)據(jù)的存儲包括修改與該現(xiàn)有路由相關(guān)聯(lián)的該數(shù)據(jù)包路由 數(shù)據(jù)庫中的數(shù)據(jù)。該修改后的數(shù)據(jù)可以包括與被表示在數(shù)據(jù)庫中的
一個或多個路由、節(jié)點或?qū)嶓w相關(guān)聯(lián)的一個或多個搜索關(guān)鍵字部分 標(biāo)識符或節(jié)點關(guān)鍵字。
可替代地,用于現(xiàn)有i 各由的聯(lián)系細(xì)節(jié)可以改變,4吏得與已經(jīng)在 路由數(shù)據(jù)庫中的節(jié)點相關(guān)聯(lián)的節(jié)點關(guān)鍵字是其新網(wǎng)絡(luò)地址的前綴, 或者其新網(wǎng)絡(luò)地址是與已經(jīng)在路由數(shù)據(jù)庫中的節(jié)點相關(guān)聯(lián)的節(jié)點 關(guān)鍵字的前綴??梢詮臉浣Y(jié)構(gòu)中完全刪除與節(jié)點相關(guān)聯(lián)的數(shù)據(jù),或 修改與節(jié)點相關(guān)聯(lián)的數(shù)據(jù)以反映新地址。
因此,可以在諸如IP路由器的網(wǎng)絡(luò)實體處接收對應(yīng)于網(wǎng)絡(luò)中 新的或現(xiàn)有的路由的網(wǎng)絡(luò)地址數(shù)據(jù)。路由器可以包括以樹結(jié)構(gòu)所實 現(xiàn)的包含作為彼此前綴的節(jié)點關(guān)鍵字的路由表。考慮到新的或現(xiàn)有 的路由,為了更新路由數(shù)據(jù)庫,可以搜索樹結(jié)構(gòu)來查找對應(yīng)于路由 的網(wǎng)絡(luò)地址的節(jié)點關(guān)鍵字或與路由相關(guān)聯(lián)的其他這種聯(lián)系信息。如 果找到了具有嚴(yán)格匹配或前綴匹配節(jié)點關(guān)鍵字的樹節(jié)點,則可以檢 查和更新與節(jié)點相關(guān)聯(lián)的數(shù)據(jù)以反映對于路由或插入的新節(jié)點的 不同路由信息,以表示路由的新路由信息。
因此,在沒有確切的網(wǎng)絡(luò)地址匹配存在于^各由數(shù)據(jù)庫的情況 下,本發(fā)明考慮具有與網(wǎng)絡(luò)地址前綴匹配的^各由。即4吏當(dāng)網(wǎng)絡(luò)地址 與對應(yīng)于其他路由的 一個或多個節(jié)點關(guān)鍵字具有前綴關(guān)系,本發(fā)明
允許路由。諸如邊界網(wǎng)關(guān)協(xié)議(BGP)的數(shù)據(jù)包路由協(xié)議依賴于網(wǎng) 絡(luò)地址前綴的選擇和7>告,所以可以將本發(fā)明適當(dāng)?shù)貞?yīng)用于諸如實 現(xiàn)了前綴匹配的互聯(lián)網(wǎng)的網(wǎng)絡(luò)。
優(yōu)選地,將與該路由相關(guān)聯(lián)的路由數(shù)據(jù)和/或轉(zhuǎn)發(fā)信息輸出到數(shù) 據(jù)包轉(zhuǎn)發(fā)表。因此,可以將用于路由的新的或更新的路由信息用于 填充數(shù)據(jù)包轉(zhuǎn)發(fā)表。
優(yōu)選地,在該轉(zhuǎn)發(fā)表中所識別的該凄t據(jù)包括網(wǎng)絡(luò)地址凄t據(jù)。
優(yōu)選地,網(wǎng)絡(luò)地址數(shù)據(jù)和/或目的地址數(shù)據(jù)包括網(wǎng)際協(xié)議(IP ) 地址數(shù)據(jù)。因此,可以使用本發(fā)明來執(zhí)行具有包含IP地址數(shù)據(jù)的網(wǎng) 絡(luò)地址的網(wǎng)絡(luò)實體的路由。同樣地,可以使用本發(fā)明將包含IP地址 數(shù)據(jù)的數(shù)據(jù)包轉(zhuǎn)發(fā)至其目的地。
根據(jù)本發(fā)明的第四方面,提供了一種適于執(zhí)行本發(fā)明第一、第 二以及第三方面的方法的i殳備。
根據(jù)本發(fā)明的第五方面,提供了 一種適于執(zhí)行本發(fā)明的第一 、 第二、以及第三方面的方法的計算枳4欠件。
從通過參考附圖所作出的(僅以實例的方式給出的)本發(fā)明的 優(yōu)選實施例的以下描述中,本發(fā)明的更多特征和優(yōu)點將變得顯而易 見。
附圖i兌明
圖1示出根據(jù)本發(fā)明實施例的數(shù)據(jù)通信網(wǎng)絡(luò)的系統(tǒng)示意圖。
圖2示出才艮據(jù)本發(fā)明實施例的IP3各由器的架構(gòu)。
圖3示出根據(jù)本發(fā)明實施例的路由器的示例性轉(zhuǎn)發(fā)表。
圖4示出根據(jù)本發(fā)明實施例的樹結(jié)構(gòu)的實例。
圖5是示出根據(jù)本發(fā)明實施例的搜索樹結(jié)構(gòu)的流程圖。
圖6是示出根據(jù)本發(fā)明實施例的將新數(shù)據(jù)插入到樹結(jié)構(gòu)的流程圖。
圖7是示出將節(jié)點插入到根據(jù)本發(fā)明實施例的樹結(jié)構(gòu)的流程圖。
圖8是示出將節(jié)點插入到根據(jù)本發(fā)明實施例的樹結(jié)構(gòu)的流程圖。
圖9是示出將節(jié)點插入到根據(jù)本發(fā)明實施例的樹結(jié)構(gòu)的流程圖。
圖IO是示出根據(jù)本發(fā)明實施例的樹結(jié)構(gòu)的示意圖。
圖11是示出根據(jù)本發(fā)明實施例來擴展圖10的樹結(jié)構(gòu)的示意圖。
圖12是示出根據(jù)本發(fā)明實施例來擴展圖11的樹結(jié)構(gòu)的示意圖。
圖13是示出根據(jù)本發(fā)明實施例來擴展圖12的樹結(jié)構(gòu)的示意圖。
圖14是示出根據(jù)本發(fā)明實施例來擴展圖13的樹結(jié)構(gòu)的示意圖。
圖15是示出根據(jù)本發(fā)明實施例來擴展圖14的樹結(jié)構(gòu)的示意圖。
圖16是示出根據(jù)本發(fā)明實施例來擴展圖15的樹結(jié)構(gòu)的示意圖。
具體實施例方式
圖1示出根據(jù)本發(fā)明實施例的數(shù)據(jù)通信網(wǎng)絡(luò)的系統(tǒng)示意圖。該
網(wǎng)絡(luò)包括路由網(wǎng)絡(luò)118,其包括多個互連的核心路由器lOOa、 lOOb、 100c、以及邊續(xù)J各由器102、 104、 106、 108。核心路由器100a、 100b、 100c形成路由網(wǎng)絡(luò)118的主連4妄鏈路(主干網(wǎng)),并且專門 作通過網(wǎng)絡(luò)的大數(shù)據(jù)量的傳輸。邊緣路由器102、 104、 106、 108 在各個局i或網(wǎng)110、 112、 114、 116與由才亥心路由器100a、 100b、 10 0 c形成的骨干網(wǎng)之間路由數(shù)據(jù)包。
圖2示出才艮據(jù)本發(fā)明實施例的IP路由器200的架構(gòu)。例如, 如圖1中所示,將路由器200連接至多個鄰節(jié)點212、 214。路由器 200包括負(fù)責(zé)根據(jù)位于網(wǎng)絡(luò)內(nèi)的多個實體或網(wǎng)絡(luò)的各個部分之間的 路由學(xué)習(xí)網(wǎng)絡(luò)的拓樸的路由處理器202。路由處理器202與鄰節(jié)點 212、 214交互以構(gòu)建并維護(hù)路由表220。路由表220可以是樹結(jié)構(gòu) 凄t據(jù)庫形式。;咯由處理器202將關(guān)于各個路由和^各由協(xié)i義的路由信 息存儲到路由表220中。路由處理器202還負(fù)責(zé)通過將轉(zhuǎn)發(fā)信息和 /或網(wǎng)絡(luò)地址數(shù)據(jù)輸出到轉(zhuǎn)發(fā)表206來提供路由計算和更新204。
路由器200還包括負(fù)責(zé)接收輸入數(shù)據(jù)包216以及發(fā)送輸出數(shù)據(jù) 包218的包轉(zhuǎn)發(fā)器210。當(dāng)路由器200接收數(shù)據(jù)包時,乂人數(shù)據(jù)包中 讀取目的IP地址數(shù)據(jù),并將其用在轉(zhuǎn)發(fā)表206的搜索中。該搜索 208涉及搜索轉(zhuǎn)發(fā)表206來查找數(shù)據(jù)包的IP目的地址數(shù)據(jù),以確定 對應(yīng)的轉(zhuǎn)發(fā)信息。轉(zhuǎn)發(fā)信息可以包含路由器200的輸出端口,將數(shù) 據(jù)包和下一跳(即,其鄰節(jié)點)指向該輸出端口,以將該包傳輸?shù)?該專命出端口上。
圖3示出根據(jù)本發(fā)明實施例的路由器200、 300的示例性轉(zhuǎn)發(fā) 表312。圖3 4苗纟會了互連至'Ji 各由器303、 304、 306、 308、以及310 路由器300連4矣至更多其他路由器 326以及其他這種網(wǎng)絡(luò)裝置。
路由器300包括路由處理器302,其包含(例如)樹結(jié)構(gòu)數(shù)據(jù) 庫324形式的路由表。路由器300還包括連接至路由處理器302的 轉(zhuǎn)發(fā)表數(shù)據(jù)庫312。路由處理器302使用存儲在樹結(jié)構(gòu)凄t據(jù)庫中的 樹結(jié)構(gòu)表示并明了路由器300周圍的網(wǎng)絡(luò)拓樸。路由處理器302處 理樹結(jié)構(gòu)并將新路由和路由更新輸出到轉(zhuǎn)發(fā)表凄史據(jù)庫312。注意到, 沒必要每次向樹結(jié)構(gòu)凄t據(jù)庫324添加新路由或者在樹結(jié)構(gòu)數(shù)據(jù)庫中 更改路由時路由處理器302都輸出數(shù)據(jù)到轉(zhuǎn)發(fā)表數(shù)據(jù)庫312。樹結(jié) 構(gòu)和轉(zhuǎn)發(fā)表數(shù)據(jù)庫可以作為分離的實體或(可替換地)組合數(shù)據(jù)庫 實體而存在。同樣地,路由處理器和包轉(zhuǎn)發(fā)器可以是分離的實體或 -波組合成一個實體。
樹結(jié)構(gòu)數(shù)據(jù)庫324包括關(guān)于樹結(jié)構(gòu)的數(shù)據(jù),在該樹結(jié)構(gòu)中存儲 了路由表數(shù)據(jù)庫數(shù)據(jù)。這可以包括與多個節(jié)點相關(guān)聯(lián)的數(shù)據(jù),每個 節(jié)點具有一個或多個節(jié)點指針、關(guān)聯(lián)節(jié)點關(guān)鍵字、以及搜索關(guān)鍵字 部分標(biāo)識符。
節(jié)點指針可以包括與在正搜索樹結(jié)構(gòu)時可以被遍歷的節(jié)點(例 如,位于樹結(jié)構(gòu)中的該節(jié)點之上或之下的節(jié)點)相關(guān)聯(lián)的數(shù)據(jù)。
:溲索關(guān)4建字部分標(biāo)識符可以包4舌識別可以:故用于確定在遍歷 節(jié)點時將被使用的節(jié)點指針的搜索關(guān)鍵字部分的數(shù)據(jù)。以下詳細(xì)討 論搜索關(guān)鍵字部分標(biāo)識符。
轉(zhuǎn)發(fā)表數(shù)據(jù)庫312可以被用于存儲通過路由處理器302所輸出 的關(guān)于多個前綴和用于每個前綴的關(guān)聯(lián)轉(zhuǎn)發(fā)信息的數(shù)據(jù)。轉(zhuǎn)發(fā)表 312的第一列包括如項314、316、322、324所分別示出的前綴"1010"、 "1110"、 "1010001"、以及"101000111000"。默認(rèn)前綴320用作除
""ioio"、 "iiio"、 "ioiooor,、以及"ioioooiiiooo"之外的所有
前綴的'垃;及箱(catch all ),。項318表示,實際上,可以將更多的 前綴和關(guān)聯(lián)轉(zhuǎn)發(fā)信息包含在轉(zhuǎn)發(fā)表312中。
注意到,為了解釋性的目的,按照純二進(jìn)制位符號給出了這些 前綴。在IPv4中,地址由32位組成,其可以由通過小凄t點所分隔 的四個十進(jìn)制數(shù)所表示,其中,每個十進(jìn)制數(shù)代表如之前上述的32 位IP地址的8個位。在IPv6中,地址由128 4立組成,其可以^皮表 示為通過冒號所分隔的8個十六進(jìn)制數(shù)。以下的二進(jìn)制實例是抽象 的,并且能符合任何IP尋址方案。
轉(zhuǎn)發(fā)表312的第二列包括用于在轉(zhuǎn)發(fā)表中所列的前綴的轉(zhuǎn)發(fā)信 息,即,根據(jù)對于數(shù)據(jù)包的IP目的地址的最長前綴匹配應(yīng)當(dāng)將數(shù)據(jù) 包轉(zhuǎn)發(fā)到的地方。現(xiàn)在給出一些轉(zhuǎn)發(fā)實例
其IP目的;也址具有等于"101011101010"的前12 4立的凄t:悟包 具有最長前綴匹配"1010",所以應(yīng)當(dāng)4吏用轉(zhuǎn)發(fā)4言息A 一皮轉(zhuǎn)發(fā)至路 由器302;
其IP目的地址具有等于"111000100110"的前12位的數(shù)據(jù)包 具有最長前綴匹配"1110",所以應(yīng)當(dāng)使用轉(zhuǎn)發(fā)信息B被轉(zhuǎn)發(fā)至路 由器304;
其IP目的地址具有等于"101000100110"的前12位的數(shù)據(jù)包 具有最長前綴匹配"1010001",所以應(yīng)當(dāng)使用轉(zhuǎn)發(fā)信息C被轉(zhuǎn)發(fā)至 路由器306;
其IP目的;也址具有等于"101000111000"的前12〗立的H據(jù)包 具有最長前綴匹配"101000111000",所以應(yīng)當(dāng)4吏用轉(zhuǎn)發(fā)信息D #皮 轉(zhuǎn)發(fā)至路由器308;
其IP目的地址具有等于"11110011100"的前12位的數(shù)據(jù)包在 轉(zhuǎn)發(fā)表中沒有匹配前綴,所以將使用默認(rèn)轉(zhuǎn)發(fā)信息Z被轉(zhuǎn)發(fā)至路由 器310。
被用于搜索路由表的IP目的地數(shù)據(jù)可以被稱作搜索關(guān)鍵字, 并且每個節(jié)點處的前綴可以被稱作節(jié)點關(guān)鍵字。
如上所述,諸如Patricia算法的算法允許快速確定纟臾索關(guān)4建字 是否存儲在樹結(jié)構(gòu)中。因此,具有對應(yīng)于樹結(jié)構(gòu)的這種算法尤其適 于IP路由應(yīng)用程序。然而,現(xiàn)有技術(shù)系統(tǒng)具有這樣的缺點存儲在 數(shù)據(jù)結(jié)構(gòu)中的前綴不可以是4皮此前綴;以及減輕該問題的先前嘗試 可能破壞算法的高效查找特性(例如,樹遍歷期間在某些節(jié)點處需 要關(guān)鍵字的檢查)。
因此,現(xiàn)有技術(shù)系統(tǒng)不適于使用這種算法和關(guān)聯(lián)樹結(jié)構(gòu)來將所 有前綴存儲在圖3中示出的示例性轉(zhuǎn)發(fā)表312中。這是由以下事實 所引起的雖然"1010"和"1110"不是4皮此的前綴,"1010"是
"1010001"以及"101000111000"的前綴,并且還因為"1010001" 是"101000111000"的前綴。因此,如果現(xiàn)有技術(shù)系統(tǒng)將利用諸如 Patricia的算法的高效搜索特性,則現(xiàn)有技術(shù)系統(tǒng)將被限于僅將前綴
"1010"、 "1010001"、以及"101000111000"中的一個存4諸到3各由
器的轉(zhuǎn)發(fā)表中。
本發(fā)明在不折衷其高效搜索特性和不必須增加所需數(shù)據(jù)存儲
的情況下克服了關(guān)聯(lián)樹結(jié)構(gòu)和諸如Patricia算法的算法的前綴限制。
為了闡明這點,連同本發(fā)明如何能適應(yīng)添加其作為4皮此前綴的 節(jié)點關(guān)鍵字的描述一起,現(xiàn)在下面將更詳細(xì)地描述Patricia算法和 關(guān)聯(lián)樹結(jié)構(gòu)。
通過僅檢查搜索關(guān)鍵字,而不是通過在節(jié)點處與關(guān)4建字直接比 較來遍歷數(shù)字樹。在根據(jù)本發(fā)明實施例的樹結(jié)構(gòu)中,每個節(jié)點可以 包含搜索關(guān)鍵字部分標(biāo)識符、以及一個或多個節(jié)點指針。
節(jié)點指針可以是指向左節(jié)點(通常地與二進(jìn)制零相關(guān)聯(lián))或右 節(jié)點(通常地與二進(jìn)制一相關(guān)聯(lián))的指針以在遍歷節(jié)點時查找下一 個。
搜索關(guān)鍵字部分標(biāo)識符可以識別搜索關(guān)鍵字部分,其可以被用 于確定在遍歷節(jié)點時將被使用的節(jié)點指針。該搜索關(guān)鍵字部分標(biāo)識 符可以包括在遍歷節(jié)點時可以被跳過的搜索關(guān)鍵字中的一個或多 位或搜索關(guān)^t字中的許多位的相對或絕對位置。
相對數(shù)目的位可以是(例如)相對于被用于遍歷相關(guān)節(jié)點或先 前已遍歷的節(jié)點之上的節(jié)點的位。
因此,搜索關(guān)4建字部分標(biāo)識符指示可以跳過多少位,即,應(yīng)當(dāng) 檢查搜索關(guān)鍵字的哪些位,以確定在使用特定搜索關(guān)鍵字遍歷樹時 根據(jù)該節(jié)點的指針。
搜索關(guān)4建字部分標(biāo)識符的4吏用意p未著在4臾索期間可以跳過 (即,忽略)某些搜索關(guān)鍵字位,所以在將一個節(jié)點識別為搜索的 結(jié)果時,需要與該節(jié)點關(guān)鍵字進(jìn)行一次性比4交以4企查匹配。因此, 基于節(jié)點關(guān)鍵字與搜索關(guān)鍵字的比較結(jié)果搜索可以成功或失敗。
在相同的4臾索過程期間,能夠訪問同一節(jié)點兩次。這由以下的
組合所產(chǎn)生
(i) 不與經(jīng)過的節(jié)點比較搜索關(guān)4定字,以及
(ii) 跳過不對樹中多個節(jié)點加以區(qū)分的搜索關(guān)鍵字位。
如果發(fā)生樹中向上的步驟,或者到達(dá)同一節(jié)點的步驟發(fā)生,其 通常是搜索過程中的最后一個步驟。向上的步驟可以(例如)涉及 跟隨從當(dāng)前正被遍歷的節(jié)點指向樹中該節(jié)點之上的節(jié)點的節(jié)點指 針(通常被稱為祖先指針)。到達(dá)同一節(jié)點的步驟可以(例如)涉 及跟隨從當(dāng)前正被遍歷的節(jié)點指向樹中同 一節(jié)點的指針(通常被稱 為自指針)。
在圖4中示出了根據(jù)本發(fā)明實施例的樹結(jié)構(gòu)的實例描述。該樹 包含三個節(jié)點,通過項400、 402、以及404示出。在IP路由應(yīng)用 程序中,每個節(jié)點關(guān)4建字可以對應(yīng)于目的地址前綴(例如,如在圖 3中的轉(zhuǎn)發(fā)凄史據(jù)庫312的第一列中所示出的),以及每個節(jié)點可以具 有關(guān)于用于該目的地址前綴的轉(zhuǎn)發(fā)信息的關(guān)4關(guān)存儲的數(shù)據(jù)參數(shù)(例 如,如在圖3中的轉(zhuǎn)發(fā)^t據(jù)庫312的第二列中所示出的)??梢詫?圖4中示出的樹的結(jié)構(gòu)存儲在樹結(jié)構(gòu)數(shù)據(jù)庫中(例如,如通過圖3 中的項324所示出的)。
圖4中示出了分別具有二進(jìn)制符號為0000、 0001、以及OOIOO 的其節(jié)點關(guān)鍵字的三個節(jié)點。每個節(jié)點具有關(guān)聯(lián)搜索關(guān)鍵字部分標(biāo) 識符,在圖4中被表示為每個節(jié)點處的小括號中的值。具有0000 的節(jié)點關(guān)鍵字的節(jié)點具有2的搜索關(guān)鍵字部分標(biāo)識符,具有0001 的節(jié)點關(guān)鍵字的節(jié)點具有3的搜索關(guān)鍵字部分標(biāo)識符,以及具有 00100的節(jié)點關(guān)4建字的節(jié)點具有3的搜索關(guān)4建字部分標(biāo)識符。這里 的節(jié)點的搜索關(guān)鍵字部分標(biāo)識符表示應(yīng)當(dāng)被跳過的搜索關(guān)鍵字的 絕對位數(shù),以確定在遍歷節(jié)點時將跟隨哪個節(jié)點指針。
應(yīng)當(dāng)注意,節(jié)點關(guān)鍵字不需要并且通常地不存儲在節(jié)點自身 處。另一種觀察搜索關(guān)鍵字部分標(biāo)識符的方式是其還能夠被用于區(qū) 分正被遍歷的節(jié)點之下的樹中的節(jié)點,即,搜索關(guān)鍵字部分標(biāo)識符 表示應(yīng)當(dāng)檢查正被遍歷的節(jié)點之下的節(jié)點的節(jié)點關(guān)鍵字中的哪個 位,以區(qū)別那些節(jié)點關(guān)4定字。所以,例如,圖4中具有節(jié)點關(guān)4定字
OOOO的節(jié)點400具有纟臾索關(guān)4建字部分標(biāo)識符2。這意味著位2 (其 是在位0和位1之后從左邊數(shù)的第三位)區(qū)別具有4臾索關(guān)4建字部分 標(biāo)識符0001的節(jié)點402的節(jié)點關(guān)4建字和具有4臾索關(guān)4建字部分標(biāo)識 符00100的節(jié)點404的節(jié)點關(guān)鍵字。在這種情況下,節(jié)點402的節(jié) 點關(guān)鍵字的位2是二進(jìn)制零,以及節(jié)點404的節(jié)點關(guān)鍵字的位2是 二進(jìn)制一。
該樹起始于具有節(jié)點關(guān)鍵字0000和搜索關(guān)鍵字部分標(biāo)識符2 的節(jié)點400。通過項406所示出的對應(yīng)于二進(jìn)制零的節(jié)點400中的 左指針是子指針,這是由于其從節(jié)點400指向其左子節(jié)點402。通 過項410所示出的節(jié)點402中的左指針是祖先指針,這是因為其從 節(jié)點402指回到3且先節(jié)點400。通過項412所示出的節(jié)點402中的 右指針是自指針,這是由于其從節(jié)點402指向同一節(jié)點402。通過 項408所示出的節(jié)點400中的右指針是子指針,這是由于其從節(jié)點 400指向其右子節(jié)點404。通過項414所示出的節(jié)點404中的左指 針是自指針,這是由于其從節(jié)點404指向同一節(jié)點404。通過項416 所示出的節(jié)點404中的右指針是自指針,這是由于其從節(jié)點404指 向同一節(jié)點404。
能夠使用搜索關(guān)鍵字來搜索該樹以檢查該樹中是否包含對應(yīng) 于該搜索關(guān)鍵字的節(jié)點關(guān)鍵字?,F(xiàn)在描述大量不同搜索關(guān)鍵字的從 根節(jié)點開始的搜索處理。搜索關(guān)鍵字中的零對應(yīng)于左分枝,即,跟 隨左指針,以及搜索關(guān)鍵字中的一對應(yīng)于右分枝,即,跟隨右指針。 當(dāng)跟隨樹中向上指向節(jié)點的指針或自指針、或被遍歷的節(jié)點的搜索 關(guān)鍵字部分標(biāo)識符指示超過正被討論的搜索關(guān)鍵字的結(jié)尾的位時, 搜索結(jié)束。
實例4臾索關(guān)4建字k = 00100
搜索關(guān)鍵字的位0在搜索關(guān)^T建字的左手邊(零),跟隨有位1 (零)、位2 ( — )、位3 (零)、以及位4 (零),具有總共五個位。
4叟索處理通過遍歷節(jié)點400開始。該節(jié)點的4臾索關(guān)4建字部分標(biāo) 識符是2,所以首先應(yīng)當(dāng)檢查搜索關(guān)鍵字的位2。查找關(guān)^T建字的位2 是1,所以搜索從那里沿著圖4中的右指針408向右分枝來遍歷節(jié) 點404。節(jié)點404的搜索關(guān)鍵字部分標(biāo)識符是3,所以應(yīng)當(dāng)檢查搜 索關(guān)鍵字的位3。搜索關(guān)鍵字的位3是零,所以搜索從那里沿著左 指針414向左分枝。搜索處理仍在遍歷節(jié)點404,指示已經(jīng)跟隨自 指針,所以搜索在這里結(jié)束。現(xiàn)在能將搜索關(guān)鍵字與該節(jié)點處的節(jié) 點關(guān)鍵字進(jìn)行比較,其能夠看出是相同的(均為00100)。這指示匹 配,即,成功4臾索,意p木著4臾索關(guān)4建字00100包含于該樹中。
應(yīng)當(dāng)注意,可以將實際存儲的與節(jié)點相關(guān)聯(lián)的數(shù)據(jù)參數(shù)存儲在 別處,并且在遍歷處理期間并不需要??梢栽?叟索結(jié)束處4全查存斗諸 的數(shù)據(jù)參數(shù)。
實例查找關(guān)4建字k = 0101:
:溲索處理起始于具有2的搜索關(guān)4建字部分標(biāo)識符的節(jié)點400。 4臾索關(guān)4建字的位2是零,所以處理/人那里沿著左指4十406向左分4支 來遍歷節(jié)點402。節(jié)點402的搜索關(guān)鍵字部分標(biāo)識符是3,所以應(yīng) 當(dāng)檢查搜索關(guān)鍵字的位3。搜索關(guān)鍵字的位3是1,所以處理從那 里沿著右指針412向右分枝。搜索處理仍在遍歷節(jié)點402,指示已 經(jīng)跟隨自指針,所以搜索在這里結(jié)束。當(dāng)節(jié)點402的節(jié)點關(guān)鍵字是 0001時,將搜索關(guān)鍵字與節(jié)點關(guān)鍵字進(jìn)行比較導(dǎo)致失敗,其不同于 作為0101的搜索關(guān)鍵字。因此,搜索提供了這樣的信息樹中任 何節(jié)點關(guān)鍵字都不是該搜索關(guān)鍵字的前綴,或該搜索關(guān)鍵字不是樹 中任何節(jié)點關(guān)鍵字的前綴。
實例4臾索關(guān)4建字k = 0000:
*後索處理起始于具有2的4臾索關(guān)4建字部分標(biāo)識符的節(jié)點400。 搜索關(guān)鍵字的位2是0,所以搜索從那里沿著左指針406向左分枝 來遍歷節(jié)點402。節(jié)點402的4臾索關(guān)4建字部分標(biāo)識符是3,所以應(yīng) 當(dāng)檢查搜索關(guān)鍵字的位3。搜索關(guān)鍵字的位3是0,所以處理從那 里沿著左指針410向左分4支來遍歷節(jié)點400?,F(xiàn)在纟臾索處理位于節(jié) 點400處,指示已經(jīng)跟隨向上至祖先節(jié)點的指針,所以搜索處理在 這里結(jié)束。將搜索關(guān)鍵字與該節(jié)點處的節(jié)點關(guān)鍵字進(jìn)行比較給出匹 配,即,意p木著4叟索關(guān)4建字0000包含于該樹中的成功4臾索。
實例4臾索關(guān)4建字k-000101010:
搜索處理起始于具有2的搜索關(guān)鍵字部分標(biāo)識符的節(jié)點400。 搜索關(guān)鍵字的位2是零,所以處理從那里沿著左指針406向左分枝 來遍歷節(jié)點402。節(jié)點402的搜索關(guān)4建字部分標(biāo)識符是3,所以應(yīng) 當(dāng)沖企查搜索關(guān)4定字的位3。搜索關(guān)4建字的位3是1,所以處理/人那 里沿著右指針412向右分4支來遍歷節(jié)點402。4臾索處理^壬在節(jié)點402 處,指示已經(jīng)跟隨自指針,所以搜索處理在這里結(jié)束。將搜索關(guān)4建 字與該節(jié)點處的節(jié)點關(guān)鍵字進(jìn)行比較給出直至節(jié)點長度的匹配, 即,纟臾索關(guān)4建字的前四^f立匹配通過4叟索所識別的節(jié)點處的節(jié)點關(guān)鍵: 字的四^f立。4臾索關(guān)4建字中存在剩下的幾個4立,即,01010,所以刮_ 于該搜索關(guān)鍵字來說,這個節(jié)點關(guān)鍵字是包含在該樹中的最長前綴 節(jié)點關(guān)鍵字。
實例:後索關(guān)4建字k = 00:
搜索處理起始于具有2的搜索關(guān)鍵字部分標(biāo)識符的節(jié)點400。 位2超過搜索關(guān)鍵字的末尾,所以搜索在這里結(jié)束。將搜索關(guān)鍵字 與在搜索的末尾所識別的節(jié)點處的節(jié)點關(guān)鍵字進(jìn)行比較給出直至
搜索關(guān)鍵字長度的匹配,即,搜索關(guān)鍵字的前兩位匹配節(jié)點關(guān)鍵字 的前兩位。這意味著搜索關(guān)鍵字是該節(jié)點關(guān)鍵字的前綴。
實例4臾索關(guān)4建字k = 000:
:搜索處理起始于具有2的4臾索關(guān)4建字部分標(biāo)識符的節(jié)點400。 搜索關(guān)鍵字的位2是零,所以處理從那里沿著左指針406向左分枝 來遍歷節(jié)點402。節(jié)點402的4臾索關(guān)4建字部分標(biāo)識符是3,所以應(yīng) 當(dāng)檢查搜索關(guān)鍵字的位3。位3超過搜索關(guān)鍵字的結(jié)尾,所以搜索 在這里結(jié)束。將搜索關(guān)鍵字與在搜索的末尾所識別的節(jié)點處的節(jié)點 值進(jìn)行比較給出直至搜索關(guān)鍵字長度的匹配,即,搜索關(guān)鍵字的前 三位匹配節(jié)點關(guān)鍵字的前三位。這意味著搜索關(guān)鍵字是該節(jié)點關(guān)鍵 字的前綴。
在最后的兩個搜索實例(關(guān)于搜索關(guān)鍵字00以及OOO)中,該 搜索找到以搜索關(guān)鍵字為前綴的最短節(jié)點關(guān)鍵字。能夠通過遍歷子 樹(即,節(jié)點自身和那個節(jié)點的所有后裔、匹配節(jié)點的所有后裔) 來確定樹中以搜索關(guān)鍵字為其前綴的一列節(jié)點關(guān)鍵字,包括返回至 其祖先的指針(而不是那些祖先的后裔)。
對于4臾索關(guān)4建字00,能夠看出,當(dāng)節(jié)點402和404在節(jié)點400 的子樹中時,該搜索關(guān)鍵字是整棵樹的前綴。對于搜索關(guān)鍵字000, 能夠看出,由于節(jié)點402具有指向節(jié)點400的祖先指針,所以該搜 索關(guān)4建字是節(jié)點400和402的前綴,-f旦由于節(jié)點404不在節(jié)點402 的子樹中,所以該搜索關(guān)鍵字不是該樹的剩余部分的前綴。
搜索關(guān)鍵字k = 0000的實例證明為何祖先指針在這種樹結(jié)構(gòu)中 是重要的。節(jié)點400具有2的搜索關(guān)鍵字部分標(biāo)識符而不具有自指 針。所以,使用0000的搜索關(guān)鍵字的搜索(或0000是任何搜索關(guān) 鍵字的前綴)將導(dǎo)致遍歷經(jīng)過該節(jié)點,同時搜索不在該節(jié)點處結(jié)束。
使用該搜索關(guān)鍵字的搜索使用在節(jié)點402處的祖先指針410返回來 找到節(jié)點400。
通常,不具有自指針的任何節(jié)點是其子樹中某處的節(jié)點的祖 先。節(jié)點可以具有兩個自指4f、自己和孩子、自己和3且先、兩個孩 子、或孩子和祖先。在后兩種情況下,節(jié)點必須是其子樹內(nèi)的后裔 的祖先。
在根據(jù)本發(fā)明實施例所構(gòu)造的樹結(jié)構(gòu)中,樹中的每個節(jié)點需要 指向其的至少一個祖先或自指針。在n個節(jié)點的樹中,正好存在可 用于滿足該角色的n+l個指針,然而,樹結(jié)構(gòu)^皮排列。事實上, 通常正好存在一個在成功搜索期間其將不被跟隨的自指針,并且除 此之外,通過剩余的n個祖先或自指針中的一個來指向每個節(jié)點。
在圖4的實例樹結(jié)構(gòu)中,節(jié)點404的右邊孩子是在成功搜索期 間將不會被跟隨的指針。
要注意到,諸如這個的相對簡單的Patricia樹結(jié)構(gòu)的固有限制, 即在于它們無法區(qū)分完全相同的關(guān)4建字。以某種方式將完全相同的 關(guān)鍵字插入到這種樹結(jié)構(gòu)中的嘗試將失敗,失敗的確切性質(zhì)取決于 該樹結(jié)構(gòu)和關(guān)聯(lián)搜索算法的特定實現(xiàn)方式。
諸如才艮據(jù)Patricia算法所構(gòu)造的那些凄t結(jié)構(gòu)的樹結(jié)構(gòu)具有固有 限制,樹中不能有節(jié)點關(guān)鍵字是樹中任何其他節(jié)點關(guān)鍵字的前綴。
現(xiàn)有系統(tǒng)4吏用了大量方法來解決該限制,例如
1 )控制向樹結(jié)構(gòu)的輸入,使得作為前綴的節(jié)點關(guān)鍵字不出現(xiàn)。
2 )在其節(jié)點關(guān)鍵字作為另 一節(jié)點關(guān)鍵字的前綴的每個節(jié)點之 下添加單向鏈接列表,并將該作為前綴的節(jié)點關(guān)4建字放到單向 鏈接列表中而不是樹中。
3 )將具體字符或字符串添加到所插入的每個前綴節(jié)點關(guān)鍵字 的末尾。
這些方法中的每一種或者損壞搜索性能和/或損壞前綴能力,或 需要不必的額外存儲器存儲能力。
本發(fā)明擴展了如下所述的Patricia樹結(jié)構(gòu)的傳統(tǒng)樹結(jié)構(gòu)。該擴 展并不經(jīng)歷上述的缺點,同時允許將具有互為前綴的節(jié)點關(guān)4建字的 節(jié)點存儲在樹中,以及還允許將具有以其他節(jié)點的節(jié)點關(guān)鍵字為前 綴的節(jié)點關(guān)鍵字的節(jié)點插入到該樹中。此外,本發(fā)明不損壞當(dāng)使用 諸如Patricia算法的算法時的關(guān)4建字前綴性質(zhì)以及纟臾索性能。
如果一個節(jié)點關(guān)鍵字是另 一個節(jié)點關(guān)鍵字的前綴,則具有較長 節(jié)點關(guān)鍵字的節(jié)點是具有較短節(jié)點關(guān)鍵字的節(jié)點的后繼節(jié)點。具有 較短節(jié)點關(guān)鍵字的節(jié)點將被分配相同搜索關(guān)鍵字部分標(biāo)識符作為 其^又親。
具有較短節(jié)點關(guān)鍵字的節(jié)點是新型節(jié)點,在本文中被稱作為跳 過前綴節(jié)點(skipped-prefix node )。跳過前綴節(jié)點的4臾索關(guān)4建字部 分標(biāo)識符匹配其雙親的4臾索關(guān)4建字部分標(biāo)識符,因此,在4臾索該樹 期間,其節(jié)點指針之一是不能用的。那個節(jié)點指針可以被稱為'遠(yuǎn) 離(off),向下的樹。不管正在查找什么搜索關(guān)鍵字,樹的搜索將 遍歷穿過跳過前綴節(jié)點至其孩子,即,在向下遍歷期間,總是跳過 跳過前綴節(jié)點。如果多個添加前綴的節(jié)點關(guān)^:字存在(例如,如果 需要將0、 00、 000、以及oooo表示在樹中),則可以將多個這種跳
過前綴節(jié)點插入到樹中。
35
如果初始搜索失敗,則在搜索期間已經(jīng)被遍歷穿過了的跳過前 綴節(jié)點可以被反過來檢查,以找到最長搜索關(guān)鍵字匹配。為了便于
此,本發(fā)明引入跳回(skip-back)節(jié)點指針,其4皮用于指示以下兩 者中的任一個
a)在這個之上的下 一個跳過前綴節(jié)點
b )如果在這個之上不存在較短前綴的自節(jié)點(這種情況l又可 以發(fā)生在根節(jié)點處)
不包含關(guān)鍵字(還被稱為空關(guān)鍵字)的節(jié)點可以被保留在樹中 的根節(jié)點處,從而如果在樹中存在任何其他節(jié)點則根將是跳過前綴 節(jié)點,并且根節(jié)點將具有零的搜索關(guān)鍵字部分標(biāo)識符。這能有助于 使操作根節(jié)點的具體情況處理最小化。
當(dāng)且僅當(dāng)節(jié)點具有子節(jié)點以及以下兩者中的任 一 個,則能夠?qū)?該節(jié)點識別為跳過前綴節(jié)點
(i) 相應(yīng)節(jié)點關(guān)鍵字為空(這僅可以發(fā)生在根處)
(ii) 其檢查相同搜索關(guān)鍵字部分標(biāo)識符作為其雙親。
圖5是示出根據(jù)本發(fā)明實施例的搜索樹結(jié)構(gòu)的流程圖。
搜索處理從步驟500處開始,其中,如上所述使用搜索關(guān)鍵字 來遍歷該樹中的節(jié)點。這將通常地從位于樹頂部處的才艮節(jié)點開始。 當(dāng)跟隨自指針、跟隨指向樹中向上節(jié)點的指針、或^皮遍歷的節(jié)點的 搜索關(guān)鍵字部分標(biāo)識符指示超過正在討論的搜索關(guān)鍵字的末尾的 位時,搜索將識別樹中的節(jié)點。
36
在遍歷期間,保存其搜索關(guān)鍵字部分標(biāo)識符匹配其雙親節(jié)點的 搜索關(guān)鍵字部分標(biāo)識符的最近被遍歷的節(jié)點的記錄。記錄該信息, 因為其搜索關(guān)^fc字部分標(biāo)識符匹配其雙親節(jié)點的^t叟索關(guān)^t字部分 標(biāo)識符的最近^皮遍歷的節(jié)點是潛在的前綴匹配節(jié)點。應(yīng)當(dāng)注意,在 遍歷該樹期間,不解決任何這種潛在前綴匹配,即,在遍歷樹期間, 不將這種節(jié)點的節(jié)點關(guān)鍵字與搜索關(guān)鍵字進(jìn)行比較。該信息的注釋 法可能涉及使用其允許最近被遍歷的潛在前綴匹配節(jié)點能被識別 的指針、標(biāo)記、或任何這種特征。
接下來,在步驟502中,將搜索關(guān)鍵字與在搜索中所識別節(jié)點 的節(jié)點關(guān)鍵字進(jìn)行比較。
看步驟504,如果4臾索關(guān)4建字確實匹配在4叟索中所識別節(jié)點的 節(jié)點關(guān)4建字,則在步驟512中4叟索處理在這個節(jié)點處結(jié)束。所識別 節(jié)點的節(jié)點關(guān)鍵字是樹結(jié)構(gòu)中對搜索關(guān)鍵字的匹配。
看步艱《504,如果4臾索關(guān)4建字不匹配在4叟索中所識別節(jié)點的節(jié) 點關(guān)4建字,則4臾索處理繼續(xù)到步驟506。
看步驟506,如果最后一個潛在前綴匹配節(jié)點是^^艮節(jié)點,則在 步驟514處搜索處理結(jié)束。根節(jié)點的節(jié)點關(guān)鍵字可以是存在的對于 搜索關(guān)鍵字的最長前綴。在簡化假設(shè)(根節(jié)點關(guān)鍵字是空關(guān)鍵字) 的情況下,這總是該情況。
看步驟506,如果最后一個潛在前綴匹配節(jié)點不是根節(jié)點,則 4叟索處理繼續(xù)到步艱《508。
在步驟508中,將搜索關(guān)鍵字與被遍歷的最后一個潛在前綴節(jié) 點的節(jié)點關(guān)鍵字進(jìn)行比較。
看步驟510,如果搜索關(guān)鍵字不匹配被遍歷的最后一個潛在前 綴節(jié)點的節(jié)點關(guān)鍵字,則搜索在步驟516處結(jié)束。被遍歷的最后一 個潛在前綴節(jié)點的節(jié)點關(guān)鍵字是樹結(jié)構(gòu)中對搜索關(guān)鍵字的匹配。
看步驟510,如果搜索關(guān)鍵字不匹配被遍歷的最后一個潛在前 綴節(jié)點的節(jié)點關(guān)4建字,則當(dāng)需要時4叟索處理繼續(xù)重復(fù)步-驟506、 508、 以及510,直到達(dá)到根節(jié)點或找到對于潛在前綴匹配節(jié)點的節(jié)點關(guān) 鍵字的匹配。以這種方式,將檢查具有連續(xù)較短節(jié)點關(guān)鍵字的節(jié)點, 直到達(dá)到具有匹配前綴節(jié)點關(guān)鍵字的節(jié)點。如果沒有找到具有匹配 前綴節(jié)點關(guān)鍵字的這種節(jié)點,則可以到達(dá)根節(jié)點,因為其空關(guān)鍵字 被添加為所有節(jié)點關(guān)鍵字的前綴。
圖6是示出根據(jù)本發(fā)明實施例的將新數(shù)據(jù)插入到樹結(jié)構(gòu)中的流 程圖。
在步驟600中,當(dāng)接收到將被添加至該樹的新數(shù)據(jù)時,該處理 開始。在步驟602中,使用對應(yīng)于被添加的新數(shù)據(jù)的搜索關(guān)鍵字來 搜索該樹。如步驟604中所示,如果搜索導(dǎo)致被識別的具有嚴(yán)格匹 配4叟索關(guān)4建字的節(jié)點關(guān)4建字的節(jié)點,則在步驟614中在該樹中已經(jīng) 表示了該數(shù)據(jù)并且拒絕該數(shù)據(jù)的插入。
如步驟606中所示,如果4臾索導(dǎo)致;故識別的具有以該:搜索關(guān)鍵: 字為其前綴的節(jié)點關(guān)鍵字的節(jié)點,則如圖7中所描述的,根據(jù)過程 A通過插入新的跳過前綴節(jié)點來將該新凄t據(jù)添加到該樹。圖7中的 步驟700示出將對應(yīng)于新凄t據(jù)的新的i^過前綴節(jié)點插入在4臾索中#皮 識別的節(jié)點之上。在步驟702中,將先前指向在搜索中4皮識別的節(jié) 點的子節(jié)點指針調(diào)整為指向新的跳過前綴節(jié)點。在步驟704中,創(chuàng) 建,人該新的跳過前綴節(jié)點指向在4臾索中#1識別的節(jié)點的子節(jié)點指 針。
在步艱《706中,創(chuàng)建乂人新的跳過前綴節(jié)點指向遍歷的最后一個 跳過前綴祖先節(jié)點的跳回節(jié)點指針。在步驟707中,指示被遍歷的 最后 一 個跳過前綴節(jié)點的所插入節(jié)點的任何后裔的指針;故更新以 代替地來指示^f皮插入的節(jié)點。
在步驟708中,將等于搜索關(guān)鍵字的節(jié)點關(guān)鍵字(即,將被插 入的關(guān)4建字)分配給新的跳過前綴節(jié)點。在步驟710中,為新的逸匕 過前綴節(jié)點分配了搜索關(guān)鍵字部分標(biāo)識符,該搜索關(guān)鍵字部分標(biāo)識 符等于在該樹中該新的跳過前綴節(jié)點之上的節(jié)點的^t索關(guān)^t建字部 分標(biāo)識符。對于搜索識別了具有以搜索關(guān)鍵字為其前綴的節(jié)點關(guān)鍵 字的節(jié)點的情況,這完成了節(jié)點插入過程A。
如步艱《608中所示,如果^^臾索導(dǎo)致^皮識別的具有其作為4叟索關(guān) 鍵字的前綴的節(jié)點關(guān)鍵字的節(jié)點,則根據(jù)如圖8中所描述的過程B, 通過插入新的非一皮跳過前綴節(jié)點(non-skipped-prefix node )并將4臾 索中被識別的節(jié)點更新為跳過前綴節(jié)點來將該新數(shù)據(jù)添加到該樹。 圖8中的步驟800示出將對應(yīng)于新數(shù)據(jù)的新節(jié)點插入到在搜索中被 識別的節(jié)點之下。在步驟802中,將先前從在搜索中所識別的節(jié)點 指出來的子節(jié)點指針調(diào)整為指向新節(jié)點。在步驟804中,創(chuàng)建/人該 新節(jié)點指向該新節(jié)點之下的節(jié)點的子節(jié)點指針。
當(dāng)新被插入節(jié)點之上的節(jié)點的節(jié)點關(guān)鍵字是新插入節(jié)點的節(jié) 點關(guān)4建字的前綴時,該之上的節(jié)點被更新為跳過前綴節(jié)點。在步驟 806中,創(chuàng)建從新更新的跳過前綴節(jié)點指向在插入期間^皮遍歷的最 后一個跳過前綴祖先節(jié)點的跳回節(jié)點指針。在步驟807中,指示那 個祖先的4皮插入節(jié)點的任何后裔#1改變?yōu)?&替地指示新更新后的 跳過前綴節(jié)點。
在步驟808中,將等于搜索關(guān)鍵字的節(jié)點關(guān)鍵字(即,將被插 入的關(guān)鍵字)分配給新插入的節(jié)點。在步驟810中,為新插入的節(jié) 點分配4臾索關(guān)4建字部分標(biāo)識符,該4臾索關(guān)4建字部分標(biāo)識符等于在該 樹中新插入節(jié)點之上的節(jié)點的搜索關(guān)鍵字部分標(biāo)識符,即,新更新 后的跳過前綴節(jié)點的以前的搜索關(guān)4建字部分標(biāo)識符。然后,在步驟
812中,為新更新的跳過前綴節(jié)點分配4臾索關(guān)4建字部分標(biāo)識符,該 標(biāo)識符等于該樹中該新更新的跳過前綴節(jié)點之上的節(jié),泉的搜索關(guān) 鍵字部分標(biāo)識符。對于搜索識別具有其作為搜索關(guān)鍵字的前綴的節(jié) 點關(guān)鍵字的節(jié)點的情況,這完成了節(jié)點插入過程B。
如果搜索導(dǎo)致其節(jié)點關(guān)4建字不完全匹配或前綴匹配4臾索關(guān)鍵: 字的正^皮識別的節(jié)點,則^皮識別節(jié)點的節(jié)點關(guān)4建字和4臾索關(guān)4建字在 特定位上不同。在這種情況下,如步驟612中所示,該樹可能祐L搜 索附加時間,但該時間在具有不同位的節(jié)點處停止搜索。在步驟620 中,4艮據(jù)如圖9中所描繪的過程C通過插入新節(jié)點來將新4fet據(jù)添加 到該樹中。注意到,在這種情況下,該新節(jié)點不是跳過前綴節(jié)點。
圖9中的步驟900示出了將對應(yīng)于該新數(shù)據(jù)的新節(jié)點插入到節(jié) 點之下,該節(jié)點具有對于搜索關(guān)鍵字的不同位的節(jié)點關(guān)鍵字。
如果新節(jié)點具有子樹(即,新節(jié)點的插入將取代子樹),則在 步驟912中,創(chuàng)建至/來自所插入節(jié)點的自指針。步驟912還包括創(chuàng) 建從所插入節(jié)點指向新節(jié)點的子樹中在該新節(jié)點之下的第 一 節(jié)點 的子節(jié)點指針。
如果節(jié)點的插入不會:f又代現(xiàn)有的子樹,則在步驟904中,創(chuàng)建 至/來自所插入節(jié)點的兩個自指針。
在步驟906中,將具有對于搜索關(guān)鍵字的不同位的節(jié)點關(guān)鍵字 的節(jié)點的節(jié)點指針(可以是祖先指針或自指針)調(diào)整為子節(jié)點指針, 該子節(jié)點指針從具有不同節(jié)點關(guān)鍵字位的節(jié)點指向所插入節(jié)點。
在步驟908中,將等于搜索關(guān)鍵字的節(jié)點關(guān)鍵字分配給該新節(jié) 點。在步驟910中,為該新節(jié)點分配4臾索關(guān)4建字部分標(biāo)識符,該4臾 索關(guān)鍵字部分標(biāo)識符等于不同位的位數(shù)目。對于搜索識別具有其不 嚴(yán)格匹配或前綴匹配搜索關(guān)鍵字的節(jié)點關(guān)鍵字的節(jié)點的情況,這完 成了節(jié)點插入過程C。
在可替換的實施例中,可以通過在初始搜索處理期間存儲識別 了其節(jié)點關(guān)鍵字在特定位處不同于搜索關(guān)鍵字的節(jié)點的數(shù)據(jù)來取 代步驟612的數(shù)據(jù)。然后,該數(shù)據(jù)可被用于遍歷具有不同位的節(jié)點, 而不必須對樹進(jìn)行額外搜索。
現(xiàn)在參考圖IO至16描述使用本發(fā)明的擴展來創(chuàng)建示例性樹結(jié)構(gòu)。
圖IO示出根據(jù)本發(fā)明實施例的樹結(jié)構(gòu)。
樹結(jié)構(gòu)由具有空節(jié)點關(guān)鍵字和零的搜索關(guān)鍵字部分標(biāo)識符(在 小括號中示出)的才艮節(jié)點1000組成。再一次,應(yīng)當(dāng)注意,為了解 釋的目的,已經(jīng)將與每個節(jié)點相關(guān)聯(lián)的節(jié)點關(guān)鍵字包括在示意圖中 的每個節(jié)點處。通常地,將節(jié)點關(guān)鍵字自身存儲在別處。
來自根節(jié)點1000的左節(jié)點指針1014指向節(jié)點1002 (其具有 00的節(jié)點關(guān)4建字和1的搜索關(guān)4建字部分標(biāo)識符)。來自節(jié)點1002的 左節(jié)點指針1018是自指針。來自節(jié)點1002的右節(jié)點指針1090是 自指針。
來自才艮節(jié)點1000的右指針1016指向節(jié)點1006(其具有111的 節(jié)點關(guān)鍵字和2的搜索關(guān)鍵字部分標(biāo)識符)。來自節(jié)點1006的左節(jié) 點指針1058指向節(jié)點1008,以及來自節(jié)點1006的右節(jié)點指針1032 是自指針。節(jié)點1008具有1101100的節(jié)點關(guān)鍵字和5的搜索關(guān)鍵
字部分標(biāo)識符。來自節(jié)點1008的左節(jié)點指4十1060指向節(jié)點1010。 節(jié)點1010具有1101101的節(jié)點關(guān)4建字和6的纟臾索關(guān)4建字部分標(biāo)識 符。來自節(jié)點1010的左節(jié)點指針1024是至節(jié)點1008的祖先指針, 以及來自節(jié)點1010的右指針1026是自指針。來自節(jié)點1008的右 節(jié)點指針1062指向節(jié)點1012。節(jié)點1012具有11011101的節(jié)點關(guān) 鍵字和5的搜索關(guān)鍵字部分標(biāo)識符。來自節(jié)點1012的左節(jié)點指針 1028是自指針,以及來自節(jié)點1012的右節(jié)點指針1030也是自指針。
圖11示出根據(jù)本發(fā)明實施例的通過插入新節(jié)點來擴展圖10的 樹結(jié)構(gòu)。除與圖11中的"1100"的項號相比的圖10中的"1000" 的項號之外,向相關(guān)的節(jié)點J3武予相關(guān)的項目標(biāo)號。
該結(jié)構(gòu)具有空根節(jié)點1100,該空根節(jié)點具有零的搜索關(guān)鍵字部 分標(biāo)識符(在小括號中示出)。來自根節(jié)點1100的左指針1114指向 節(jié)點1102(其具有00的節(jié)點關(guān)鍵字和1的搜索關(guān)鍵字部分標(biāo)識符)。 來自節(jié)點1102的左節(jié)點指針1118是自指針。來自節(jié)點1102的右節(jié) 點指4十1156指向節(jié)點1104。節(jié)點1104具有01的節(jié)點關(guān)4建字和1 的搜索關(guān)鍵字部分標(biāo)識符。來自節(jié)點1104的左節(jié)點指針1120是自 指針,以及來自節(jié)點1104的右節(jié)點指針1122也是自指針。
來自才艮節(jié)點1100的右指針1116指向節(jié)點1106 (其具有111的 節(jié)點關(guān)鍵字和2的搜索關(guān)鍵字部分標(biāo)識符)。來自節(jié)點1106的左節(jié) 點指針1158指向節(jié)點1108,以及來自節(jié)點1106的右節(jié)點指針1132 是自指針。節(jié)點1108具有1101100的節(jié)點關(guān)鍵字和5的搜索關(guān)鍵字 部分標(biāo)識符。來自節(jié)點1108的左節(jié)點指4十1160指向節(jié)點1110。節(jié) 點1110具有1101101的節(jié)點關(guān)鍵字和6的搜索關(guān)鍵字部分標(biāo)識符。 來自節(jié)點1110的左節(jié)點指針1124是至節(jié)點1108的祖先指針,以及 來自節(jié)點1110的右節(jié)點指針1126是自指針。來自節(jié)點1108的右節(jié) 點指針1162指向節(jié)點1112。節(jié)點1112具有11011101的節(jié)點關(guān)4建字
和5的搜索關(guān)鍵字部分標(biāo)識符。來自節(jié)點1112的左節(jié)點指針1128 是自指針,以及來自節(jié)點1112的右指針1130也是自指針。
形成圖11的結(jié)構(gòu)涉及將具有01的節(jié)點關(guān)鍵字和1的搜索關(guān)鍵 字部分標(biāo)識符的額外的節(jié)點1104插入到圖IO的結(jié)構(gòu)中。當(dāng)對應(yīng)于 將4皮插入節(jié)點的節(jié)點關(guān)4建字的搜索關(guān)4建字01既不嚴(yán)格匹配已經(jīng)在 樹中的節(jié)點的節(jié)點關(guān)鍵字中的任一個也不以該節(jié)點關(guān)鍵字中的任 一個為其前綴、或不是該節(jié)點關(guān)鍵字中的任一個的前綴時,將根據(jù)
圖9中示出的過禾呈C來才丸4亍該4翁入。
新節(jié)點的插入涉及使用01的4臾索關(guān)鍵字4叟索圖IO的樹。該搜 索將導(dǎo)致節(jié)點1002 (此處跟隨有自指針1090)的遍歷。在這種情 況下,具有在特定位位置處不同于搜索關(guān)鍵字的節(jié)點關(guān)鍵字的節(jié)點 是具有節(jié)點關(guān)4建字00的節(jié)點1002。因此,如圖11中所示,將該新 節(jié)點插入到節(jié)點1002之下作為新節(jié)點1104。該節(jié)點不具有子初于, 所以創(chuàng)建至/來自節(jié)點1104的兩個自指針,以及將來自節(jié)點1002的 右指針1090調(diào)整為乂人節(jié)點1102至新節(jié)點1104的子指4十1156。
圖12示出根據(jù)本發(fā)明實施例的通過插入新節(jié)點來擴展圖11的 樹結(jié)構(gòu)。
形成圖12的結(jié)構(gòu)涉及將具有000的節(jié)點關(guān)鍵字和1的搜索關(guān) 一睫字部分標(biāo)識符的新節(jié)點1234插入到該結(jié)構(gòu)中。在這種情況下, 該新節(jié)點本身不是跳過前綴節(jié)點。然而,現(xiàn)有節(jié)點1202的節(jié)點關(guān) 鍵字00是將被插入的關(guān)鍵字000的前綴。這意味著節(jié)點1202將被 更新為跳過前綴節(jié)點。
額外節(jié)點的插入涉及使用000的搜索關(guān)4定字搜索圖11的樹。 使用關(guān)鍵字000的搜索將識別節(jié)點1102。根據(jù)圖8中所示出的過程 B,將為關(guān)鍵字000所添加的新節(jié)點添加到節(jié)點1102之下,在此處
結(jié)束搜索。這在圖12中被示出,其中,新插入的節(jié)點1234位于樹 中的節(jié)點1202之下。
為新插入的節(jié)點1234分配4叟索關(guān)4建字部分標(biāo)識符,該:溲索關(guān) 鍵字部分標(biāo)識符等于樹中的新插入的節(jié)點之上的節(jié)點的搜索關(guān)鍵 字部分標(biāo)識符(步驟810),其在這種情況下是節(jié)點1102的搜索關(guān) 鍵字部分標(biāo)識符,即,等于1的搜索關(guān)鍵字部分標(biāo)識符。
新節(jié)點1234之上的節(jié)點1202的節(jié)點關(guān)4建字00是該新節(jié)點的 節(jié)點關(guān)4建字000的前綴,所以節(jié)點1202 ^皮更新為跳過前綴節(jié)點。
現(xiàn)在節(jié)點1202是跳過前綴節(jié)點的事實由其周圍的點線菱形所 表示。將來自根節(jié)點1100的左節(jié)點指針1114調(diào)整為指向1266樹中 的根節(jié)點之下的跳過前綴節(jié)點1202。將來自跳過前綴節(jié)點1202的 左節(jié)點指針1118調(diào)整為指向節(jié)點1234。將來自跳過前綴節(jié)點1202 的右節(jié)點指針1156調(diào)整為至樹中該跳過前綴節(jié)點之上的根節(jié)點 1200的3兆回指4十1236。
因為根節(jié)點的空節(jié)點關(guān)鍵字是樹中所以其他節(jié)點的節(jié)點關(guān)鍵 字,所以根節(jié)點也具有在其周圍的點線菱形以表示其是跳過前綴節(jié) 點。
指針1236是跳回節(jié)點指針的事實被圖12中的虛線箭頭符號表 示。跳回節(jié)點指針1236指回節(jié)點1202之上的具有下一個纟皮跳回前 綴的節(jié)點的節(jié)點,其在這種情況下是具有空關(guān)鍵字的根節(jié)點1200。
如上所述,節(jié)點1202現(xiàn)在是跳過前綴節(jié)點,所以其4臾索關(guān)4建 字部分標(biāo)識符被更新為與其雙親的搜索關(guān)4建字部分標(biāo)識符相同,雙 親在這種情況下是具有零的搜索關(guān)鍵字部分標(biāo)識符的根節(jié)點1200 (步驟812)。
在隨后的搜索圖12的結(jié)構(gòu)期間,具有節(jié)點關(guān)鍵字OO的跳過前 綴節(jié)點1202將總被跳過,并且搜索處理將總直接繼續(xù)前進(jìn)以遍歷 具有節(jié)點關(guān)4建字000的節(jié)點1234。
圖13示出才艮據(jù)本發(fā)明實施例的通過插入又一跳過前綴節(jié)點來 擴展圖12的樹結(jié)構(gòu)。
形成圖13的結(jié)構(gòu)涉及將具有0的節(jié)點關(guān)鍵字的又一跳過前綴 節(jié)點1338插入到該結(jié)構(gòu)中。插入又一跳過前綴節(jié)點涉及4吏用0的 搜索關(guān)鍵字搜索圖12的樹。搜索關(guān)鍵字0是節(jié)點1202的節(jié)點關(guān)鍵 字00的前綴,所以使用搜索關(guān)鍵字0搜索將識別節(jié)點1202。根據(jù) 如圖7中所示的過程A將為關(guān)4建字O所添加的新;兆過前綴節(jié)點添加 到節(jié)點1202之上,在此處4臾索結(jié)束。這在圖13中4皮示出,其中, 新跳過前綴節(jié)點1338位于4對中的節(jié)點1302之上。
該又一節(jié)點1338是跳過前綴節(jié)點,通過其周圍的點線菱形所 表示。將來自根節(jié)點1200的左節(jié)點指針1266調(diào)整為指向1370又 一逸〖過前綴節(jié)點1338。創(chuàng)建來自又一跳過前綴節(jié)點1338的左節(jié)點 指針1368以指向樹中該又一跳過前綴節(jié)點之下的節(jié)點1302。創(chuàng)建 來自又一跳過前綴節(jié)點1338的右指針1342作為至樹中又一跳過前 綴節(jié)點之上的根節(jié)點1300的跳回指針。
如通過跳回指針1340所示出的,將來自跳過前綴節(jié)點1202的 3兆回指針1236調(diào)整為指回其之上的下一個被:跳回前綴的節(jié)點,其 在這種情況下是節(jié)點1338。跳回指針1342指回節(jié)點1338之上的下 一個被跳回前綴節(jié)點,其在這種情況下是具有空關(guān)4定字的根節(jié)點 1300??梢?艮隨該;時向上的這個#皮浪〖過前綴指針的反向3各徑,以找 到對于搜索關(guān)鍵字的潛在前綴匹配的序列。
如以前,又一跳過前綴節(jié)點1338繼岸義與其雙親相同的4臾索關(guān) 鍵字部分標(biāo)識符,雙親在這種情況下是具有零的搜索關(guān)鍵字部分標(biāo) 識符的根節(jié)點1300。在隨后的搜索圖13的結(jié)構(gòu)期間,將跳過分別 具有節(jié)點關(guān)4建字0和00的跳過前綴節(jié)點1338和1302,并且4臾索將 直接繼續(xù)前進(jìn)以遍歷具有節(jié)點關(guān)4建字000的節(jié)點1334。
圖14示出根據(jù)本發(fā)明實施例的通過插入又一跳過前綴節(jié)點來 擴展圖13的樹結(jié)構(gòu)。
形成圖14的結(jié)構(gòu)涉及將具有110的節(jié)點關(guān)4建字的又一逸〖過前 綴節(jié)點1442插入到該結(jié)構(gòu)中。插入該新節(jié)點涉及4吏用110的4臾索 關(guān)^:字搜索圖13的樹。搜索關(guān)^fe字110是節(jié)點1308的節(jié)點關(guān)4建字 1101100的前綴,所以使用搜索關(guān)鍵字110搜索該樹將識別節(jié)點 1308。
根據(jù)如圖7中所示的過程A將被添加有節(jié)點關(guān)鍵字110的新跳 過前綴節(jié)點添加到節(jié)點1308之上,在此處4叟索結(jié)束。這在圖14中 -陂示出,其中,該新跳過前綴節(jié)點1442在樹中位于節(jié)點1408之上。
將來自節(jié)點1306的左節(jié)點指針1374調(diào)整為指向1474新逸匕過 前綴節(jié)點1442。創(chuàng)建從新跳過前綴節(jié)點1442指向樹中該新跳過前 綴節(jié)點之下的節(jié)點1408的左節(jié)點指針1472。創(chuàng)建來自新跳過前綴 節(jié)點1442的右節(jié)點指針1444作為至根節(jié)點1400的跳過前綴指針。 跳過前綴指針1444指回作為節(jié)點1442之上的下一個跳過前綴祖先 的節(jié)點,其在這種情況下是具有空關(guān)鍵字的^^艮節(jié)點1400。
如以前,新返〖過前綴節(jié)點1442繼^^與其雙親相同的^_索關(guān)鍵: 字部分標(biāo)識符,該雙親在這種情況下是具有2的搜索關(guān)鍵字部分標(biāo) 識符的節(jié)點1406。
圖15示出沖艮據(jù)本發(fā)明實施例的通過插入又一跳過前綴節(jié)點來 擴展圖14的樹結(jié)構(gòu)。
形成圖15的結(jié)構(gòu)涉及將具有11011的節(jié)點關(guān)4建字的新的又一 跳過前綴節(jié)點1546插入到該結(jié)構(gòu)中。插入該新跳過前綴節(jié)點涉及 使用搜索關(guān)鍵字11011搜索圖14的樹。搜索關(guān)鍵字11011是節(jié)點 1408的節(jié)點關(guān)4建字1101100的前綴,所以4吏用該:溲索關(guān)4定字4叟索樹 識別了節(jié)點1408,其搜索關(guān)鍵字部分標(biāo)識符指示超過五個位搜索關(guān) 鍵字末尾的位。這里,將被插入的節(jié)點的節(jié)點關(guān)鍵字是在搜索中被 找到的節(jié)點處的節(jié)點關(guān)鍵字,所以為搜索關(guān)鍵字11011將節(jié)點添加 到節(jié)點1408之上,在此處^t索結(jié)束。
根據(jù)如圖7中所示的過程A將添加有節(jié)點關(guān)鍵字11011的新跳 過前綴節(jié)點添加到節(jié)點1408之上,在此處搜索結(jié)束。這在圖15中 -故示出,其中,新跳過前綴節(jié)點1546位于樹中的節(jié)點1508之上。
新跳過前綴節(jié)點1546是跳過前綴節(jié)點,通過在其周圍的點線 菱形所表示。將來自跳過前綴節(jié)點1442的左節(jié)點指針1472調(diào)整為 指向1578樹中該跳過前綴節(jié)點之下的新跳過前綴節(jié)點1546。創(chuàng)建 來自新跳過前綴節(jié)點1546的左節(jié)點指針1576以指向樹中該新跳過 前綴節(jié)點之下的節(jié)點1508。創(chuàng)建來自新3兆過前綴節(jié)點1546的右節(jié) 點指針1580作為至樹中該新跳過前綴節(jié)點之上的跳過前綴節(jié)點 1542的跳過前綴指針。跳過前綴指針1580指回節(jié)點1546之上的下 一個if兆過前綴節(jié)點,其在這種情況下是節(jié)點1542。
如以前,新跳過前綴節(jié)點1546繼承與其雙親相同的搜索關(guān)鍵 字部分標(biāo)識符,該雙親在這種情況下是具有二的搜索關(guān)^fc字部分標(biāo) 識符的跳過前綴節(jié)點1542。在隨后的4臾索圖15的結(jié)構(gòu)期間,將逸匕 過分別具有節(jié)點關(guān)4定字110和11011的跳過前綴節(jié)點1542和1546,
并且搜索處理將繼續(xù)前進(jìn)以遍歷具有節(jié)點關(guān)4建字1101100的節(jié)點 1508。
圖16示出根據(jù)本發(fā)明實施例的通過插入另一跳過前綴節(jié)點來 擴展圖15的樹結(jié)構(gòu)。
形成圖16的結(jié)構(gòu)涉及將具有1的節(jié)點關(guān)鍵字的新跳過前綴節(jié) 點1682插入到該結(jié)構(gòu)中。插入該新節(jié)點涉及使用1的搜索關(guān)4建字 搜索圖15的樹。搜索關(guān)4建字1是節(jié)點1606的節(jié)點關(guān)鍵字111的前 綴,所以Y吏用該:溲索關(guān)4建字4臾索樹識別了節(jié)點1506。
將來自根節(jié)點1500的右節(jié)點指針1588調(diào)整為指向1688新跳 過前綴節(jié)點1682。創(chuàng)建來自新跳過前綴節(jié)點1682的右節(jié)點指針 1684,指向樹中該新跳過前綴節(jié)點之下的節(jié)點1606。創(chuàng)建來自新跳 過前綴節(jié)點1682的左節(jié)點指針1686作為至4艮節(jié)點1600的i!兆過前 綴指針。
根據(jù)圖7中所示的過程A,將要為節(jié)點關(guān)鍵字1所添加的該新 跳過前綴節(jié)點添加在4叟索中所識別的節(jié)點1606之上。這在圖16中 -故示出,其中,新跳過前綴節(jié)點1682位于樹中的節(jié)點1606之上。
將來自節(jié)點1542的跳過前綴指針1544調(diào)整為指回1644節(jié)點 1642之上的下一個跳過前綴節(jié)點,其在這種情況下是具有1的節(jié)點 關(guān)4定字的節(jié)點1682。注意到,在這種情況下的跳過前綴指針1644 不指向樹中節(jié)點1642的直接之上的節(jié)點1606,而是指向節(jié)點1644 之上的節(jié)點1682。這是因為具有節(jié)點關(guān)^t字111的節(jié)點1606自身 不是跳過前綴節(jié)點,然而具有節(jié)點關(guān)4定字1的節(jié)點1682是跳過前 綴節(jié)點。
如以前,新3兆過前綴節(jié)點1682繼岸義與其雙親相同的4臾索關(guān)鍵: 字部分標(biāo)識符,該雙親在這種情況下是具有零的搜索關(guān)鍵字部分標(biāo) 識符的根節(jié)點1600。
可以看出圖16中示出的擴展的樹結(jié)構(gòu)具有總共六個跳過前綴 節(jié)點(包括根節(jié)點)。
能夠通過使用搜索關(guān)鍵字執(zhí)行搜索處理來搜索圖16的擴展的 樹,以檢查樹是否包含對應(yīng)于搜索關(guān)鍵字的節(jié)點關(guān)鍵字?,F(xiàn)在描述 對于多個不同搜索關(guān)鍵字的在根節(jié)點1600開始的搜索處理。搜索 關(guān)4建字中的零對應(yīng)于左分枝,以及4臾索關(guān)4建字中的一對應(yīng)于右分 枝。當(dāng)跟隨至樹中向上的節(jié)點的指針或跟隨自指針、或^皮遍歷的節(jié) 點的搜索關(guān)鍵字部分標(biāo)識符指示其超過正在討論中的搜索關(guān)鍵字 的末尾的位時,搜索結(jié)束。
實例4叟索關(guān)4建字k = 0100:
如圖16中通過項1600所示出的,4臾索處理起始于具有空關(guān)鍵: 字和0的搜索關(guān)鍵字部分標(biāo)識符的根節(jié)點1600。搜索關(guān)鍵字的位0 是零,所以搜索處理從那里沿著來自根節(jié)點1600的左節(jié)點指針向 左分枝來遍歷具有零的搜索關(guān)4建字部分標(biāo)識符的跳過前綴節(jié)點 1638。搜索關(guān)鍵字的位零是零,所以搜索處理沿著來自跳過前綴節(jié) 點1638的左節(jié)點指針向左分枝來遍歷具有零的搜索關(guān)鍵字部分標(biāo) 識符的跳過前綴節(jié)點1634。搜索關(guān)鍵字的位零是零,所以搜索處理 沿著來自跳過前綴節(jié)點1634的左節(jié)點指針向左分4支來遍歷節(jié)點 1606。現(xiàn)在4臾索處理在具有1的4臾索處理部分才示識才尋的節(jié)點1606 處。搜索關(guān)鍵字的位l是l,所以搜索處理沿著來自節(jié)點1606的右 節(jié)點指針向右分枝來遍歷節(jié)點1604?,F(xiàn)在搜索處理在具有1的搜索 關(guān)鍵字部分標(biāo)識符的節(jié)點1604處。搜索關(guān)鍵字的位1是1,所以搜
索處理沿著來自節(jié)點1604的右節(jié)點指針(其是至同一節(jié)點1604的 自指針)向右分枝,所以搜索在這里結(jié)束。
將搜索關(guān)鍵字與該節(jié)點處的節(jié)點關(guān)鍵字進(jìn)行比較導(dǎo)致直至節(jié) 點關(guān)4建字長度的匹配,即,搜索關(guān)4建字的前兩位匹配該節(jié)點處的節(jié) 點關(guān)鍵字的兩位。這意味著搜索關(guān)鍵字的前兩位(即,Ol)是對于 該搜索關(guān)鍵字的樹中的最長前綴。
實例4叟索關(guān)4建字k = 0011:
通過圖16中的項1600所示出,4臾索處理起始于具有空關(guān)4建字 和0的搜索關(guān)鍵字部分標(biāo)識符的根節(jié)點1600。搜索關(guān)鍵字的位0是 零,所以搜索處理從那里沿著來自根節(jié)點1600的左節(jié)點指針向左 分枝來遍歷跳過前綴節(jié)點1638。現(xiàn)在4叟索處理在具有零的4臾索關(guān)鍵: 字部分標(biāo)識符的跳過前綴節(jié)點1638處。搜索關(guān)鍵字的位零是零, 所以搜索處理沿著來自跳過前綴節(jié)點1638的左節(jié)點指針向左分枝 來遍歷跳過前綴節(jié)點1634?,F(xiàn)在4叟索處理在具有零的4叟索關(guān)4建字部 分標(biāo)識符的跳過前綴節(jié)點1634處。搜索關(guān)鍵字的位零是零,所以 搜索處理沿著從跳過前綴節(jié)點1634到節(jié)點1606的左節(jié)點指針向左 分枝。現(xiàn)在4臾索處理在具有1的4臾索關(guān)4建字部分標(biāo)識符的節(jié)點1606 處。搜索關(guān)4建字的位1是0,所以:溲索處理沿著來自節(jié)點1606的左 節(jié)點指針(其是至同一節(jié)點1606的自指針)向左分枝,所以搜索 在這里結(jié)束。
將搜索關(guān)鍵字與該節(jié)點處的節(jié)點關(guān)鍵字的比較不導(dǎo)致匹配。在 搜索處理期間所遇到的最后一個跳過前綴節(jié)點是具有節(jié)點關(guān)鍵字 00的節(jié)點1634。接下來,將搜索關(guān)鍵字與該節(jié)點處的節(jié)點關(guān)鍵字 的進(jìn)4亍比4交,其中,可以看出4臾索關(guān)4建字的前兩位匹配節(jié)點1634 的節(jié)點關(guān)鍵字。這意味著搜索關(guān)鍵字的前兩位(即,OO)形成對于 該搜索關(guān)鍵字的樹中的最長的前綴。
實例:捷索關(guān)4建字k= 110111111:
通過圖16中的項1600所示,溲索處理起始于具有空關(guān)4定字和 0的搜索關(guān)鍵字部分標(biāo)識符的根節(jié)點1600。搜索關(guān)鍵字的位0是1, 所以搜索處理在那里沿著來自根節(jié)點1600的右節(jié)點指針1688向右 分枝來遍歷跳過前綴節(jié)點1682。現(xiàn)在遍歷處理在具有零的搜索關(guān)鍵 字部分標(biāo)識符的跳過前綴節(jié)點1682處。搜索關(guān)鍵字的位零是l,所 以搜索處理沿著來自跳過前綴節(jié)點1682的右節(jié)點指針1684向右分 枝來遍歷節(jié)點1606。現(xiàn)在4臾索處理在具有2的纟臾索關(guān)4建字部分標(biāo)識 符的節(jié)點1606處。搜索關(guān)鍵字的位2是零,所以搜索處理沿著來 自節(jié)點1606的左節(jié)點指4十向左分一支來遍歷節(jié)點1642?,F(xiàn)在4叟索處 理在具有2所搜索關(guān)4定字部分標(biāo)識符的跳過前綴節(jié)點1642處。搜 索關(guān)鍵字的位2是0,所以搜索處理沿著來自跳過前綴節(jié)點1642的 左節(jié)點指4十向左分4支來遍歷為〖過前綴節(jié)點1646?,F(xiàn)在4臾索處理在具 有2的搜索關(guān)鍵字部分標(biāo)識符的跳過前綴節(jié)點1646處。搜索關(guān)鍵 字的位2是0,所以搜索處理沿著來自被跳過前綴1646的左節(jié)點指 針向左分枝來遍歷節(jié)點1608。現(xiàn)在搜索處理在具有5的搜索關(guān)鍵字 部分標(biāo)識符的節(jié)點1608處。搜索關(guān)鍵字的位5是1,所以搜索處理 沿著來自節(jié)點1608的右節(jié)點指針向右分枝來遍歷節(jié)點1612。現(xiàn)在 搜索處理在具有5的搜索關(guān)4建字部分標(biāo)識符的節(jié)點1612處。4臾索 關(guān)鍵字的位5是1,所以搜索處理沿著來自節(jié)點1612的右節(jié)點指針 (其是至節(jié)點1612的自指針)向右分枝,所以搜索在這里結(jié)束。
搜索關(guān)鍵字與該節(jié)點處的節(jié)點關(guān)鍵字的比較不導(dǎo)致匹配。在搜 索期間所遇到的最后一個跳過前綴節(jié)點是具有節(jié)點關(guān)鍵字11011的 節(jié)點1646。接下來,將搜索關(guān)鍵字與該節(jié)點處的節(jié)點關(guān)鍵字進(jìn)行比 較,其中,可以看出存在直至5位的節(jié)點關(guān)鍵字長度的匹配。這意 味著搜索關(guān)鍵字的前5位(即,11011)形成對于該搜索關(guān)鍵字的 樹中的最長前綴。
實例4臾索關(guān)4建字k= 110101111:
按照先前的搜索實例繼續(xù)進(jìn)4于對于該4臾索關(guān)4建字的4叟索處理。 在這里,然而不存在所遇到的最后一個跳過前綴節(jié)點(即,節(jié)點關(guān) 鍵字11011的節(jié)點1646)處的節(jié)點關(guān)鍵字與搜索關(guān)鍵字的前五個數(shù) 字(即,11010)之間的匹配。然后,跟隨跳回節(jié)點指針1680到達(dá) 搜索期間所遇到的先前跳過前綴節(jié)點,即,具有節(jié)點關(guān)鍵字110的 節(jié)點1642。搜索關(guān)鍵字與節(jié)點1642處的節(jié)點關(guān)鍵字的比較導(dǎo)致直 至節(jié)點關(guān)鍵字長度的匹配。這意味著搜索關(guān)鍵字的前三個數(shù)字(即, 110)形成對于該搜索關(guān)鍵字的樹中的最長前綴。
根據(jù)計算復(fù)雜度,本發(fā)明的結(jié)構(gòu)和算法高效地執(zhí)行。當(dāng)樹結(jié)構(gòu) 不包含具有不作為樹中的任何其他節(jié)點關(guān)鍵字的前綴的節(jié)點關(guān)鍵 字的節(jié)點時,為了搜索、還為了插入和刪除節(jié)點,該樹需要O(log n)的計算(大約與logn相同的計算)。
當(dāng)樹包含一個或多個跳過前綴節(jié)點時,搜索工作類似于傳統(tǒng)搜 索選擇一列前綴來檢查,后面是從最佳匹配至最壞匹配的這些前綴 的線性掃描(scan)。因此,如果:^臾索經(jīng)過p個4皮i^過前綴,的節(jié) 點,則查找需要O (p + logn)的計算。
當(dāng)所有其他節(jié)點關(guān)鍵字是樹中的最長節(jié)點關(guān)鍵字的前綴時發(fā) 生最壞情況的搜索情況。在這種情況下,樹執(zhí)行類似于單向鏈接的 列表并且搜索需要O (n) =0 (p)的計算。
插入和刪除節(jié)點是通常的O( log n )。最壞情況的插入是O( n ), 因為需要子樹的完全走遍以更新祖先指針。最壞情況的刪除是O (nlog n)因為刪除潛在地護(hù)G亂O (log n)個;兆過前綴節(jié)點并且每 次擾亂需要子樹的類似走遍。然而,實際上,這些最壞的情況并不
通常^皮遇到,并且在現(xiàn)實的壓力下,已經(jīng)發(fā)現(xiàn)插入和刪除工作與對
于O (logn)的計算的需求一致。
上述實施例將被理解為本發(fā)明的示例性實例。可以設(shè)想本發(fā)明 的更多實施例。
例如,可以將本發(fā)明應(yīng)用于需要快速數(shù)據(jù)庫訪問和更新的(例 如,當(dāng)網(wǎng)絡(luò)正'集中,或'再集中,時,在對網(wǎng)絡(luò)更新之后重新計 算許多路由時)限制最短路徑優(yōu)先(CSPF) IP路由數(shù)據(jù)庫中的節(jié) 點地址的存儲和檢索。某些目的地被提供為前綴而不是完全明確的 IP地址,并且因此將需要使用現(xiàn)有技術(shù)的Patricia算法和樹結(jié)構(gòu)由 系統(tǒng)進(jìn)行的具體處理,這意味這些系統(tǒng)以較慢的速率集中。
還可以將本發(fā)明應(yīng)用于IP路由信息庫(RIB)中的IP地址的 存儲和檢索。這些數(shù)據(jù)庫被IP路由協(xié)議(例如,開放最短路徑優(yōu)先 (OSPF )、中間系統(tǒng)-中間系統(tǒng)(IS-IS )、路由選擇信息協(xié)議(RIP )、 邊界網(wǎng)關(guān)協(xié)議(BGP)等)所填充,并代表通過那些路由協(xié)議所分 發(fā)的所有IP地址前綴和可及的IP地址。
本發(fā)明還發(fā)現(xiàn)在其中可以包括IP地址前綴和全長IP地址的混 合的IP路由轉(zhuǎn)發(fā)信息庫(FIB )中的IP地址的存儲和檢索中的應(yīng)用。 這是路由器已知的所有RIB的復(fù)合,并且能夠被用于填充硬件中的 IP轉(zhuǎn)發(fā)表。
本發(fā)明的范圍不應(yīng)當(dāng)被限于IP路由應(yīng)用。還可以將本發(fā)明應(yīng)
中。例如,數(shù)據(jù)值可以被存儲到難以訪問的位置(諸如老的或慢的 硬件、或其可能具有限制的網(wǎng)絡(luò)帶寬、或其可以是按訪問支付 (pay-per-access )、或法律限制存在(諸如版權(quán))等)中。需要存 儲算法來在這些數(shù)據(jù)值中搜索而實際上并不存儲數(shù)據(jù)值自身的復(fù)
本或不必要地對它們進(jìn)行訪問。本發(fā)明使這個能僅需要對搜索結(jié)果 的單3蟲i方問。
可以應(yīng)用本發(fā)明,用于諸如分類法領(lǐng)域中的層次表示法中的前
綴匹配。通過利用本發(fā)明可以高-丈i也表示和4臾索一大類生物學(xué)凄史 據(jù)。能夠表示(例如)現(xiàn)代Linnaean分類法中所有種類,以及關(guān)于 特定物種/亞種的搜索將產(chǎn)生正好的匹配或關(guān)于目前#1存^諸的大部 分具體目/科/屬/種的匹配。
本發(fā)明可以被應(yīng)用在來自電話號簿的條目的存儲和檢索。在前 綴可以是表示電話撥號碼或局部區(qū)域的前幾個^:字的情況下,能夠 高效地列出特定區(qū)域中的所有條目。本發(fā)明甚至準(zhǔn)許關(guān)于具有上億 條目的大數(shù)據(jù)庫(諸如當(dāng)前全球分配的所有電話號碼)的快速4企索。 這里,在確定關(guān)于查找次數(shù)的界限的過程中,僅僅正被搜索的關(guān)鍵 字的長度是重要的。數(shù)據(jù)庫中其他非前綴的關(guān)鍵字的數(shù)目對查找次 數(shù)沒有影響。
能夠?qū)⒈景l(fā)明應(yīng)用在需要非常長的關(guān)鍵字的快速操作和期待 不依賴于關(guān)鍵字長度的操作的應(yīng)用中。例如,本發(fā)明能夠被用于僅 使用每本書的少量數(shù)據(jù)結(jié)構(gòu)存儲來索? I版權(quán)圖書館中的所有書籍。 給出任意書籍的第 一頁或全部文本,本發(fā)明的前綴匹配特性能夠被 用于快速確定是否存儲了匹配的書籍。本發(fā)明能夠被用于快速確定 實例文本是否存在于大量同樣長度的文本中所存儲的的幾乎同樣 的版本中。這能夠發(fā)現(xiàn)在當(dāng)代掃描和文本閱讀技術(shù)中、或手工復(fù)制 (hand-copied )遠(yuǎn)古文本等的比4交分析中的特定應(yīng)用。
可以將本發(fā)明應(yīng)用在需要高效搜索和更新關(guān)^fc字的大量數(shù)據(jù) 庫的任何地方。這能(例如)包括當(dāng)前在特定狀態(tài)內(nèi)對于每個個體
的大量生物統(tǒng)計數(shù)據(jù)。接下來,通過本發(fā)明所構(gòu)造的搜索樹能夠起 隔離中心數(shù)據(jù)庫的作用。例如,本發(fā)明能夠被用于索引并搜索關(guān)于
移動裝置的大量中心數(shù)據(jù)庫而不保持或訪問關(guān)于4壬何移動裝置的 數(shù)據(jù)庫的任何實際內(nèi)容。
上面的描述主要涉及以二進(jìn)制符號表示諸如節(jié)點關(guān)鍵字、搜索 關(guān)鍵字的多種數(shù)據(jù)的情形。使用其他數(shù)據(jù)符號(例如,字母數(shù)字符 號)同樣可應(yīng)用本發(fā)明。
在本文中,^各由和4爭發(fā)^皮描述為兩個截然不同的處理。然而, 在某些實現(xiàn)中可以組合路由和轉(zhuǎn)發(fā),并且本發(fā)明能夠同樣地應(yīng)用到 這種組合的實玉見。
上面的描述描述了關(guān)于IPv4或IPv6數(shù)據(jù)的本發(fā)明的使用,但 本發(fā)明可以與任何網(wǎng)際協(xié)議或其他合適數(shù)據(jù)格式或協(xié)議一起被使 用。
應(yīng)當(dāng)理解,關(guān)于任何一個實施例所描述的任何特征可以^皮單獨 地或與所描述的其他特征組合地使用,并且還可以與任何其他實施 例的 一個或多個特征組合、或與任何其他實施例的任何組合^皮使 用。此外,在不背離由所附權(quán)利要求中所定義的本發(fā)明的范圍的情 況下,還可以4吏用上面未描述的等同和<奮改。
權(quán)利要求
1. 一種使用搜索關(guān)鍵字搜索數(shù)據(jù)庫的方法,所述數(shù)據(jù)庫包含按照樹結(jié)構(gòu)來存儲的數(shù)據(jù),所述樹結(jié)構(gòu)包括多個節(jié)點,所述節(jié)點具有相關(guān)聯(lián)的數(shù)據(jù),所述相關(guān)聯(lián)的數(shù)據(jù)包括一個或多個節(jié)點指針,所述節(jié)點指針包括識別在搜索所述樹結(jié)構(gòu)時可以被遍歷的節(jié)點的數(shù)據(jù);節(jié)點關(guān)鍵字;以及搜索關(guān)鍵字部分標(biāo)識符,識別搜索關(guān)鍵字部分,所述搜索關(guān)鍵字部分將被用于確定在遍歷節(jié)點時將被使用的節(jié)點指針,其中,所述方法包括將關(guān)于第一節(jié)點的第一相關(guān)聯(lián)數(shù)據(jù)和關(guān)于第二節(jié)點的第二相關(guān)聯(lián)數(shù)據(jù)存儲在所述數(shù)據(jù)庫中,所述第一相關(guān)聯(lián)數(shù)據(jù)包括第一節(jié)點關(guān)鍵字,以及所述第二相關(guān)聯(lián)數(shù)據(jù)包括第二節(jié)點關(guān)鍵字,其中,所述第一節(jié)點關(guān)鍵字是所述第二節(jié)點關(guān)鍵字的前綴;以及使用搜索關(guān)鍵字搜索所述樹結(jié)構(gòu),其中,使用所述搜索關(guān)鍵字的搜索涉及正被遍歷的所述第二節(jié)點,并且如果所述第一節(jié)點關(guān)鍵字具有匹配所述搜索關(guān)鍵字的前綴,則在遍歷所述第二節(jié)點之后識別所述第一節(jié)點。
2. 根據(jù)權(quán)利要求1所述的方法,包括在遍歷所述第二節(jié)點期間, 將所述第二節(jié)點關(guān)鍵字與所述搜索關(guān)鍵字進(jìn)行比較。
3. 根據(jù)權(quán)利要求1或2所述的方法,包括存儲第三數(shù)據(jù),所述第三數(shù)據(jù)指示所述第一節(jié)點關(guān)鍵字是所述第二節(jié)點關(guān)鍵字的前綴。
4. 根據(jù)權(quán)利要求3所述的方法,其中,存儲的所述第三數(shù)據(jù)包括從所述第二節(jié)點指向所述第一節(jié)點的第一節(jié)點指針。
5. 根據(jù)權(quán)利要求4所述的方法,其中,所述識別所述第一節(jié)點包括通過跟隨所述第一節(jié)點指針從所述第二節(jié)點至所述第一節(jié)點來遍歷所述杉于。
6. 根據(jù)權(quán)利要求1所述的方法,其中,所述識別所述第一節(jié)點包括在所述遍歷所述第二節(jié)點之后但在隨后的所述遍歷所述第一節(jié)點之前,遍歷所述樹結(jié)構(gòu)中所述第一節(jié)點之上的一個或多個節(jié)點。
7. 根據(jù)權(quán)利要求1所述的方法,其中,特定節(jié)點的4臾索關(guān)4定字部分標(biāo)識符涉及搜索關(guān)鍵字位,所述搜索關(guān)鍵字位將被用于確定在遍歷所述特定節(jié)點時將被使用的節(jié)點指針。
8. 根據(jù)權(quán)利要求7所述的方法,其中,所述特定節(jié)點的搜索關(guān)鍵字部分標(biāo)識符涉及將被使用的搜索關(guān)4定字位與先前被使用的搜索關(guān)鍵字位相比的相對位置。
9. 根據(jù)權(quán)利要求7所述的方法,其中,所述特定節(jié)點的搜索關(guān)鍵字部分標(biāo)識符涉及將被使用的搜索關(guān)鍵字位的絕對位置。
10. 根據(jù)權(quán)利要求1所述的方法,包括存儲與所述多個節(jié)點中的一個或多個節(jié)點相關(guān)聯(lián)的數(shù)據(jù)參數(shù)。
11. 根據(jù)權(quán)利要求IO所述的方法,其中,所述樹結(jié)構(gòu)的搜索結(jié)果包括輸出所存儲的數(shù)據(jù)參數(shù)。
12. 根據(jù)權(quán)利要求1所述的方法,其中,所述搜索包括使用基本 上類似于Patricia算法的算法進(jìn)4于:搜索。
13. —種將數(shù)據(jù)存儲到數(shù)據(jù)庫中的方法,所述數(shù)據(jù)庫包含按照樹結(jié) 構(gòu)來存儲的數(shù)據(jù),所述樹結(jié)構(gòu)包括多個節(jié)點,所述節(jié)點具有相 關(guān)寫關(guān)的數(shù)據(jù),所述相關(guān)聯(lián)的數(shù)據(jù)包括一個或多個節(jié)點指針,所述節(jié)點指針包括識別在搜索所 述樹結(jié)構(gòu)時可以被遍歷的節(jié)點的數(shù)據(jù);節(jié)點關(guān)鍵字;搜索關(guān)鍵字部分標(biāo)識符,識別搜索關(guān)鍵字部分,所述搜 索關(guān)鍵字部分將被用于確定在遍歷節(jié)點時將被使用的節(jié)點指 針,其中,所述方法包括將新節(jié)點插入到所述樹結(jié)構(gòu)中,所 述新節(jié)點具有相關(guān)聯(lián)的節(jié)點關(guān)鍵字,所述插入包括使用插入搜索關(guān)鍵字來搜索所述數(shù)據(jù)庫,所述插入搜索 關(guān)鍵字包括所述新節(jié)點關(guān)鍵字,使用所述插入搜索關(guān)鍵字的所 述搜索識別所述樹結(jié)構(gòu)中的給定節(jié)點,所述給定節(jié)點的節(jié)點關(guān) 鍵字與所述插入搜索關(guān)鍵字具有給定前綴關(guān)系;以與識別的所述給定節(jié)點最近的關(guān)系將所述第 一新節(jié)點 插入到所述樹結(jié)構(gòu)中;以及向所述第一新節(jié)點分配一個或多個節(jié)點指針,等于所述插入搜索關(guān)鍵字的節(jié)點關(guān)鍵字,等于所述樹中的所述第一新節(jié)點之上的節(jié)點的搜索 關(guān)鍵字部分標(biāo)識符的搜索關(guān)鍵字部分標(biāo)識符。
14. 根據(jù)權(quán)利要求13所述的方法,其中,所述給定前綴關(guān)系包括所述插入搜索關(guān)鍵字是識別的所述給定節(jié)點的節(jié)點關(guān)鍵字的前綴。
15. 根據(jù)權(quán)利要求13或14所述的方法,其中,所述最近的關(guān)系包括將所述新節(jié)點插入到所述樹中的識別的所述給定節(jié)點之上。
16. 一艮據(jù)纟又利要求13所述的方法,包括將先前指向識別的所述給定節(jié)點的節(jié)點指針調(diào)整為指向所述新節(jié)點。
17. 根據(jù)權(quán)利要求13所述的方法,包括創(chuàng)建從所述新節(jié)點至識別的所述給定節(jié)點的節(jié)點指針。
18. 根據(jù)權(quán)利要求13所述的方法,其中,所述給定前綴關(guān)系包括識別的所述給定節(jié)點關(guān)鍵字的節(jié)點關(guān)鍵字是所述插入搜索關(guān)鍵字的前綴。
19. 根據(jù)權(quán)利要求13所述的方法,其中,所述最近的關(guān)系包括將所述新節(jié)點插入到所述樹中的識別的所述給定節(jié)點之下。
20. 根據(jù)權(quán)利要求13所述的方法,包括將先前從識別的所述給定節(jié)點指出來的節(jié)點指針調(diào)整為指向所述新節(jié)點。
21. 根據(jù)權(quán)利要求13所述的方法,包括在所述樹中創(chuàng)建從所述新節(jié)點至所述新節(jié)點之下的節(jié)點的節(jié)點指針。
22. 根據(jù)權(quán)利要求13所述的方法,包括在所述樹中創(chuàng)建從所述 新節(jié)點至所述新節(jié)點之上的節(jié)點的節(jié)點指針,所述新節(jié)點之上 的節(jié)點的節(jié)點關(guān)鍵字是所述新節(jié)點的節(jié)點關(guān)鍵字的前綴。
23. 根據(jù)權(quán)利要求22所述的方法,其中,所創(chuàng)建的指向所述樹中 的所述新節(jié)點之上的節(jié)點的所述指針指向這樣的節(jié)點,該節(jié)點 的節(jié)點關(guān)鍵字具有與所述樹中的所述新節(jié)點之上的節(jié)點中的 所述新節(jié)點的節(jié)點關(guān)4建字相匹配的最長匹配前綴。
24 根據(jù)權(quán)利要求13所述的方法,包括將從所述新節(jié)點指出來 的指針調(diào)整為指向根節(jié)點,所述根節(jié)點具有空節(jié)點關(guān)鍵字。
25. 根據(jù)權(quán)利要求13所述的方法,包括通過反轉(zhuǎn)將所述新節(jié)點 插入到所述樹結(jié)構(gòu)中所涉及的一個或多個步驟來從所述樹結(jié) 構(gòu)中去除所述新節(jié)點。
26. —種在凄t據(jù)通信網(wǎng)絡(luò)中路由凝:據(jù)包的方法,所述方法包括接收與所述數(shù)據(jù)通信網(wǎng)絡(luò)中的路由相關(guān)聯(lián)的路由數(shù)據(jù);使用與接收到的所述路由數(shù)據(jù)相關(guān)聯(lián)的搜索關(guān)鍵字來搜 索數(shù)據(jù)包路由數(shù)據(jù)庫,根據(jù)權(quán)利要求1來搜索所述數(shù)據(jù)包路由 數(shù)據(jù)庫;基于所述搜索所述數(shù)據(jù)包路由數(shù)據(jù)庫,將與所述路由相 關(guān)聯(lián)的數(shù)據(jù)存儲到所述數(shù)據(jù)包路由數(shù)據(jù)庫中。
27. 根據(jù)權(quán)利要求26所述的方法,其中,所述路由是所述網(wǎng)絡(luò)中 的新路由,以及所述數(shù)據(jù)存儲包括對應(yīng)于所述新路由來將新節(jié) 點插入到所述數(shù)據(jù)包路由數(shù)據(jù)庫中。
28. 根據(jù)權(quán)利要求26所述的方法,其中,所述路由是所述網(wǎng)絡(luò)中 的現(xiàn)有路由,以及所述數(shù)據(jù)存儲包括修改所述數(shù)據(jù)包路由數(shù)據(jù) 庫中與所述現(xiàn)有路由相關(guān)聯(lián)的數(shù)據(jù)。
29. 根據(jù)權(quán)利要求26所述的方法,包括將與所述路由相關(guān)聯(lián)的 路由數(shù)據(jù)和/或轉(zhuǎn)發(fā)信息輸出到數(shù)據(jù)包轉(zhuǎn)發(fā)表。
30. 根據(jù)權(quán)利要求29所述的方法,其中,所述路由凄史據(jù)和/或所述 轉(zhuǎn)發(fā)信息包括網(wǎng)際協(xié)議(IP)地址凝:據(jù)。
31. —種適于執(zhí)行斥又利要求1所述的方法的"&備。
32. —種適于執(zhí)行權(quán)利要求1所述的方法的計算機軟件。
33. —種適于執(zhí)行權(quán)利要求13所述的方法的設(shè)備。
34. —種適于執(zhí)行權(quán)利要求13所述的方法的計算機軟件。
35. —種適于執(zhí)行權(quán)利要求26所述的方法的設(shè)備。
36. —種適于執(zhí)行權(quán)利要求26所述的方法的計算機軟件。
全文摘要
本發(fā)明提出了一種使用搜索關(guān)鍵字搜索數(shù)據(jù)庫的方法、將數(shù)據(jù)存儲到數(shù)據(jù)庫中的方法、在數(shù)據(jù)通信網(wǎng)絡(luò)中路由數(shù)據(jù)包的方法、以及適于執(zhí)行本發(fā)明第一、第二以及第三方面的方法的設(shè)備和計算機軟件。使用搜索關(guān)鍵字搜索數(shù)據(jù)庫的方法包括將關(guān)于第一節(jié)點的第一關(guān)聯(lián)數(shù)據(jù)以及關(guān)于第二節(jié)點的第二關(guān)聯(lián)數(shù)據(jù)存儲在該數(shù)據(jù)庫中,該第一關(guān)聯(lián)數(shù)據(jù)包括第一節(jié)點關(guān)鍵字,以及該第二關(guān)聯(lián)數(shù)據(jù)包括第二節(jié)點關(guān)鍵字,其中,第一節(jié)點關(guān)鍵字是第二節(jié)點關(guān)鍵字的前綴;以及使用搜索關(guān)鍵字搜索該樹結(jié)構(gòu),其中,使用該搜索關(guān)鍵字的搜索涉及正被遍歷的第二節(jié)點,以及如果第一節(jié)點關(guān)鍵字具有匹配該搜索關(guān)鍵字的前綴,則在遍歷第二節(jié)點之后識別該第一節(jié)點。
文檔編號G06F17/30GK101388030SQ20081014966
公開日2009年3月18日 申請日期2008年9月16日 優(yōu)先權(quán)日2007年9月14日
發(fā)明者喬納森·理查德·伯杰, 戴維·愛德華·麥沃爾特, 高文·博斯沃思 申請人:數(shù)據(jù)連接有限公司