專利名稱:比較多個字節(jié)的數(shù)據(jù)與已存儲的字符串段的方法及系統(tǒng)的制作方法
技術(shù)領(lǐng)域:
本發(fā)明的實施例涉及字符串查找領(lǐng)域,更具體地說,涉及多個字節(jié)的數(shù)據(jù)與已存儲的字符串段的比較。
背景技術(shù):
一些網(wǎng)絡(luò)加速及負(fù)載均衡技術(shù)需要在分組數(shù)據(jù)中查找一個或者多個字符串常量。這通常要求在分組中每次一個字節(jié)地進(jìn)行檢查直至找到期望的序列。如果一次對一個以上的字符串常量進(jìn)行查找,則分組中的每一個字節(jié)都被測試一次以上,因此使得查找過程更加緩慢。
發(fā)明內(nèi)容
本發(fā)明提供了一種比較多個字節(jié)的數(shù)據(jù)與已存儲的字符串段的方法,該方法包括在存儲器中存儲一個或多個目標(biāo)字符串的多個字符串段;讀取多個字節(jié)的數(shù)據(jù);以及并行地將所述多個字節(jié)的數(shù)據(jù)與所述已存儲的字符串段進(jìn)行比較以確定是否存在與所述目標(biāo)字符串之一相對應(yīng)的可能匹配。
本發(fā)明還提供了一種設(shè)備,包括存儲器,用于存儲一個或多個目標(biāo)字符串的多個字符串段,以及并行地比較多個字節(jié)的掃描數(shù)據(jù)和所述已存儲的字符串段;以及處理器,與所述存儲器相連接,用于處理所述掃描數(shù)據(jù),以及如果在所述掃描數(shù)據(jù)中發(fā)現(xiàn)了所述字符串段中的至少一個,則確定是否存在與所述目標(biāo)字符串之一相對應(yīng)的實際匹配。
本發(fā)明還提供了一種系統(tǒng),包括動態(tài)隨機訪問存儲器,用于存儲源數(shù)據(jù);內(nèi)容可尋址存儲器,與所述動態(tài)隨機訪問存儲器相連接,用于存儲一個或多個目標(biāo)字符串的多個字符串段,以將所述已存儲的字符串段與多個字節(jié)的所述源數(shù)據(jù)進(jìn)行比較;以及處理器,與所述動態(tài)隨機訪問存儲器以及內(nèi)容可尋址存儲器相連接,用于處理所述源數(shù)據(jù),并且,如果所述已存儲的字符串段中的至少一個匹配所述源數(shù)據(jù),則確定是否存在與所述目標(biāo)字符串之一相對應(yīng)的實際匹配。
根據(jù)本發(fā)明提供的方法、設(shè)備和系統(tǒng),可以加快目標(biāo)字符串的查找過程。
通過參考下列描述以及用于圖示本發(fā)明實施例的附圖,可最好地理解本發(fā)明。其中圖1是包含本發(fā)明的系統(tǒng)的一個一般化的實施例的方框圖。
圖2是示出了根據(jù)本發(fā)明實施例的方法的流程圖。
圖3是圖示了根據(jù)本發(fā)明一個實施例的存儲器中的示例性條目的表。
圖4是圖示了在其中可實施本發(fā)明某些方面的合適的計算環(huán)境的方框圖。
具體實施例方式
本發(fā)明說明了一種比較多個字節(jié)的數(shù)據(jù)與已存儲的字符串段的方法及系統(tǒng)的多個實施例。在下述說明中,闡述了大量具體細(xì)節(jié)。但即使沒有這些具體細(xì)節(jié),本發(fā)明的實施例也可以實施。在其他情形下,為了不致妨礙對本說明書的理解,沒有詳細(xì)說明公知的電路、結(jié)構(gòu)以及技術(shù)。
整個說明書中提到的“一個實施例”或者“實施例”是指與該實施例相關(guān)的具體特征、結(jié)構(gòu)或者特點包含于本發(fā)明的至少一個實施例中。因此,在整個說明書的不同地方出現(xiàn)的詞組“在一個實施例中”或者“在實施例中”不必是指同一個實施例。此外,所述具體特征、結(jié)構(gòu)或者特點可以在一個或多個實施例中以任意合適的方式進(jìn)行組合。
參考圖1,示出了根據(jù)本發(fā)明的一個實施例的系統(tǒng)100的方框圖。本領(lǐng)域內(nèi)的普通技術(shù)人員會發(fā)現(xiàn)系統(tǒng)100可包括不止圖1所示的組件。但是,不必示出全部的常規(guī)組件以公開用于實施本發(fā)明的說明性實施例。
系統(tǒng)100包括用于處理數(shù)據(jù)的處理器104和存儲器102。存儲器102存儲一個或多個要查找的目標(biāo)字符串的多個字符串段106。存儲器102還包括比較器108,用于并行地比較已存儲的字符串段和數(shù)據(jù)。在一個實施例中,存儲器102是一個內(nèi)容可尋址存儲器(CAM)。處理器104掃描多個字節(jié)的數(shù)據(jù)。一次掃描的數(shù)據(jù)字節(jié)數(shù)是可變的并可被預(yù)先設(shè)定。被掃描的數(shù)據(jù)110通過存儲器102并行地與存儲的字符串段106相比較,以確定是否存在與目標(biāo)字符串之一相對應(yīng)的可能匹配。該比較的結(jié)果112被提供給處理器104。如果結(jié)果顯示沒有與目標(biāo)字符串之一相對應(yīng)的可能匹配,則處理器掃描更多的數(shù)據(jù)。如果發(fā)現(xiàn)了可能匹配,處理器就檢查該數(shù)據(jù)以確定是否存在實際匹配。在一個實施例中,存儲器向處理器提供關(guān)于數(shù)據(jù)可能匹配哪個目標(biāo)字符串的指示。處理器然后將該可能匹配的目標(biāo)字符串與數(shù)據(jù)相比較,以確定是否存在實際匹配。
圖2圖示了根據(jù)本發(fā)明一個實施例的方法。在200中,在存儲器內(nèi)存儲一個或者多個目標(biāo)字符串的多個字符串段。在一個實施例中,該存儲器是CAM。在一個實施例中,該字符串段是整個目標(biāo)字符串。在一個實施例中,一個或多個通配符字節(jié)與字符串段一起存儲在存儲器內(nèi)。所述通配符字節(jié)能夠匹配任何數(shù)據(jù)字節(jié)。在202中,從數(shù)據(jù)源中讀出多個字節(jié)的數(shù)據(jù)。在一個實施例中,源數(shù)據(jù)的字節(jié)數(shù)超過所述一個或多個已存儲的字符串段的字節(jié)數(shù)。在204中,所述多個字節(jié)的數(shù)據(jù)被并行地與已存儲的字符串段進(jìn)行比較。在206中,基于比較的結(jié)果確定是否存在與目標(biāo)字符串之一相對應(yīng)的可能匹配。如果沒有可能匹配,則所述處理接著從202重復(fù)進(jìn)行并從數(shù)據(jù)源中讀出更多的數(shù)據(jù)。如果存在可能匹配,那么在208中,檢查該數(shù)據(jù)以確定是否存在與目標(biāo)字符串之一相對應(yīng)的實際匹配。在一個實施例中,檢查發(fā)現(xiàn)可能匹配的位置周圍的區(qū)域以確定是否存在實際匹配。在一個實施例中,使用有限狀態(tài)自動機(FSA)來檢查數(shù)據(jù)以確定是否存在與目標(biāo)字符串之一相對應(yīng)的實際匹配。如果沒有實際匹配,則所述處理接著從202重復(fù)進(jìn)行并從數(shù)據(jù)源中讀出更多的數(shù)據(jù)。如果存在實際匹配,則完成所述處理。
為了進(jìn)行說明,下面將討論一個例子。假設(shè)要查找的目標(biāo)字符串是“telephone”和“l(fā)ightbulb”。如圖3所示,這兩個目標(biāo)字符串的段被存儲在存儲器102中。假設(shè)將在其中查找目標(biāo)字符串的源數(shù)據(jù)包含下述數(shù)據(jù)“wheel=no,telephone=y(tǒng)es”。假設(shè)所述處理器一次掃描四個字節(jié)的源數(shù)據(jù)。最先掃描的四個字節(jié)的數(shù)據(jù)將是“whee”。這四個字節(jié)的數(shù)據(jù)被并行地與存儲器102中存儲的字符串段相比較。沒有發(fā)現(xiàn)匹配,因而掃描接著的四個字節(jié)的數(shù)據(jù)。該四個字節(jié)的數(shù)據(jù)“1=no”被并行地與已存儲的字符串段相比較。沒有發(fā)現(xiàn)匹配,因而掃描接著的四個字節(jié)的數(shù)據(jù)。該四個字節(jié)的數(shù)據(jù)“,tel”被并行地與已存儲的字符串段相比較。沒有發(fā)現(xiàn)匹配,因而掃描接著的四個字節(jié)的數(shù)據(jù)。該四個字節(jié)的數(shù)據(jù)“epho”被并行地與已存儲的字符串段相比較。存在與存儲器102中的第四條目相對應(yīng)的匹配。檢查字符串段匹配周圍的源數(shù)據(jù)以確定是否存在與目標(biāo)字符串之一相對應(yīng)的匹配。存在與目標(biāo)字符串“telephone”相對應(yīng)的匹配。因此,所述處理結(jié)束。
在一個實施例中,并行地進(jìn)行的比較不必對存儲器中的每個條目比較相同數(shù)目的位數(shù)。在存儲器中的一些條目可能有或多或少的用于比較的數(shù)據(jù)。例如,假設(shè)處理器一次掃描四個字節(jié)的源數(shù)據(jù),并且要查找的目標(biāo)字符串是“CAT”。存儲器中的已存儲的字符串段或字符串可能如下所示在條目0中為“AT??”,在條目1中為“CAT?”,在條目2中為“?CAT”,在條目3中為“??CA”?!??”是一個表示“任何字節(jié)”的通配符,也就是說它不用匹配任何特定的源數(shù)據(jù)。如果被掃描的源數(shù)據(jù)匹配條目1或條目2,那么就發(fā)現(xiàn)了目標(biāo)字符串“CAT”,而且不需要做進(jìn)一步的確認(rèn)。如果被掃描的源數(shù)據(jù)匹配條目0或條目3,那么只發(fā)現(xiàn)了目標(biāo)字符串的一個字符串段。因此,需要檢查源數(shù)據(jù)以確定是否存在與目標(biāo)字符串對應(yīng)的實際匹配。
圖4圖示了在其中可實施本發(fā)明的某些方面的合適的計算環(huán)境的方框圖。在一個實施例中,上述方法可以在計算機系統(tǒng)400中實現(xiàn),計算機系統(tǒng)400具有組件402-412,包括處理器402、存儲器404、輸入/輸出設(shè)備406、數(shù)據(jù)存儲器412以及網(wǎng)絡(luò)接口410,所述組件通過總線408相互連接。所述組件執(zhí)行它們在本領(lǐng)域內(nèi)公知的常規(guī)功能,并提供用于實現(xiàn)系統(tǒng)100的裝置??傮w地,這些組件代表多種的硬件系統(tǒng),包括但不局限于通用計算機系統(tǒng)和專用分組轉(zhuǎn)發(fā)設(shè)備。應(yīng)該理解到,計算機系統(tǒng)400的各組件可以被重新安排,并且本發(fā)明的某些實現(xiàn)可以不需要也不包括所有上述組件。此外,系統(tǒng)400中也可以包括其他組件,如附加處理器(例如數(shù)字信號處理器)、存儲設(shè)備、內(nèi)存、以及網(wǎng)絡(luò)或通信接口。
如本領(lǐng)域內(nèi)的技術(shù)人員所知,用于實現(xiàn)本發(fā)明的方法的實施例的內(nèi)容例如計算機程序指令,可以由任何能夠存儲數(shù)據(jù)、可由系統(tǒng)100訪問的介質(zhì)提供,并作為存儲器的一部分或者附加部分,所述介質(zhì)包括但不局限于錄音帶、磁帶、閃存卡、數(shù)字視頻光盤、隨機訪問存儲器(RAM)和只讀存儲器(ROM)等等。在這點上,系統(tǒng)100用來以一種本領(lǐng)域內(nèi)公知的方式與所述機器可讀介質(zhì)進(jìn)行通信。
本領(lǐng)域內(nèi)的技術(shù)人員可進(jìn)一步得知,用于實現(xiàn)本發(fā)明的方法的實施例的內(nèi)容可以從任何能夠存儲該內(nèi)容并將該內(nèi)容發(fā)送到系統(tǒng)100的外部設(shè)備提供給系統(tǒng)100。例如,在本發(fā)明的一個實施例中,系統(tǒng)100可以連接到網(wǎng)絡(luò)上,并且該內(nèi)容可以存儲在網(wǎng)絡(luò)中的任何設(shè)備上。
盡管已用幾個實施例來描述了本發(fā)明,但是,本領(lǐng)域內(nèi)的技術(shù)人員將會認(rèn)識到本發(fā)明并不限于所述實施例,而是可在所附權(quán)利要求的精神和范圍內(nèi)帶有改進(jìn)或變更地實施。因此本說明書應(yīng)該被看成是說明性的而不是限制性的。
權(quán)利要求
1.一種方法,包括在存儲器中存儲一個或多個目標(biāo)字符串的多個字符串段;讀取多個字節(jié)的數(shù)據(jù);以及并行地將所述多個字節(jié)的數(shù)據(jù)與所述已存儲的字符串段進(jìn)行比較以確定是否存在與所述目標(biāo)字符串之一相對應(yīng)的可能匹配。
2.如權(quán)利要求1所述的方法,還包括如果確定存在可能匹配,則將所述目標(biāo)字符串中的一個或多個與所述數(shù)據(jù)進(jìn)行比較,以確定是否存在實際匹配。
3.如權(quán)利要求2所述的方法,其中,將所述目標(biāo)字符串中的一個或多個與所述數(shù)據(jù)進(jìn)行比較以確定是否存在實際匹配包括檢查發(fā)現(xiàn)所述可能匹配的位置附近的數(shù)據(jù),以確定是否存在與所述目標(biāo)字符串之一相對應(yīng)的實際匹配。
4.如權(quán)利要求2所述的方法,其中,將所述目標(biāo)字符串中的一個或多個與所述數(shù)據(jù)進(jìn)行比較以確定是否存在實際匹配包括利用有限狀態(tài)自動機來檢查所述數(shù)據(jù),以確定是否存在與所述目標(biāo)字符串之一相對應(yīng)的實際匹配。
5.如權(quán)利要求1所述的方法,其中,將所述多個字節(jié)的數(shù)據(jù)與所述已存儲的字符串段并行地進(jìn)行比較包括通過所述存儲器將所述多個字節(jié)的數(shù)據(jù)與所述已存儲的字符串段并行地進(jìn)行比較,以確定是否存在與所述目標(biāo)字符串之一相對應(yīng)的可能匹配。
6.如權(quán)利要求1所述的方法,其中,在存儲器中存儲一個或多個目標(biāo)字符串的多個字符串段包括在內(nèi)容可尋址存儲器中存儲一個或多個目標(biāo)字符串的多個字符串段。
7.如權(quán)利要求1所述的方法,還包括向與所述存儲器相連接的處理器報告所述并行比較的結(jié)果。
8.如權(quán)利要求7所述的方法,還包括向所述處理器指出所述數(shù)據(jù)可能匹配所述目標(biāo)字符串中的哪一個。
9.如權(quán)利要求1所述的方法,其中,所讀取的多個字節(jié)的數(shù)據(jù)的字節(jié)數(shù)超過所述已存儲的字符串段中的一個或多個的字節(jié)數(shù)。
10.如權(quán)利要求9所述的方法,其中,在存儲器中存儲一個或多個目標(biāo)字符串的多個字符串段包括存儲一個或多個可以匹配任何數(shù)據(jù)字節(jié)的通配符字節(jié)。
11.如權(quán)利要求10所述的方法,其中,在存儲器中存儲一個或多個目標(biāo)字符串的多個字符串段包括在所述存儲器中存儲所述目標(biāo)字符串以及所述目標(biāo)字符串的一個或多個字符串段。
12.如權(quán)利要求11所述的方法,其中,將所述多個字節(jié)的數(shù)據(jù)與所述已存儲的字符串段并行地進(jìn)行比較包括將所述多個字節(jié)的數(shù)據(jù)與所述已存儲的字符串段并行地進(jìn)行比較,以確定是否存在與所述目標(biāo)字符串之一相對應(yīng)的可能匹配或者實際匹配。
13.一種設(shè)備,包括存儲器,用于存儲一個或多個目標(biāo)字符串的多個字符串段,以及并行地比較多個字節(jié)的掃描數(shù)據(jù)和所述已存儲的字符串段;和處理器,與所述存儲器相連接,用于處理所述掃描數(shù)據(jù),以及如果在所述掃描數(shù)據(jù)中發(fā)現(xiàn)了所述字符串段中的至少一個,則確定是否存在與所述目標(biāo)字符串之一相對應(yīng)的實際匹配。
14.如權(quán)利要求13所述的設(shè)備,其中,所述存儲器是一個內(nèi)容可尋址存儲器。
15.如權(quán)利要求13所述的設(shè)備,其中,所述存儲器包含向所述處理器報告所述并行比較的結(jié)果的邏輯。
16.如權(quán)利要求13所述的設(shè)備,其中,所述存儲器包括下述邏輯,如果所述字符串段中的至少一個匹配所述多個字節(jié)的掃描數(shù)據(jù),則指出所述掃描數(shù)據(jù)可能匹配所述目標(biāo)字符串中的哪一個。
17.一種制品,包括機器可訪問介質(zhì),該介質(zhì)包括這樣的內(nèi)容,當(dāng)被機器訪問時,可以使得所述機器在存儲器中存儲一個或多個目標(biāo)字符串的多個字符串段;掃描多個字節(jié)的數(shù)據(jù);使得所述存儲器進(jìn)行所述多個字節(jié)的數(shù)據(jù)與所述已存儲的字符串段之間的并行比較;以及接收來自所述存儲器的結(jié)果,所述結(jié)果指示所述并行比較是否得到了至少一個匹配。
18.如權(quán)利要求17所述的制品,其中,所述機器可訪問介質(zhì)還包括如下內(nèi)容,如果從存儲器接收到的結(jié)果指示所述并行比較得到了至少一個匹配,則所述內(nèi)容使得所述機器將所述目標(biāo)字符串中的一個或多個與所述掃描數(shù)據(jù)相比較以確定是否存在匹配。
19.如權(quán)利要求18所述的制品,其中,所述機器可訪問介質(zhì)包括如下內(nèi)容,當(dāng)被機器訪問時,所述內(nèi)容使得該機器將所述目標(biāo)字符串中的一個或多個與所述掃描數(shù)據(jù)進(jìn)行比較以確定是否存在匹配,該機器可訪問介質(zhì)包括具有如下內(nèi)容的機器可訪問介質(zhì),當(dāng)被該機器訪問時,所述內(nèi)容使得所述機器檢查發(fā)現(xiàn)與所述已存儲的字符串段之一相對應(yīng)的匹配的位置附近的數(shù)據(jù),以確定是否存在與所述目標(biāo)字符串之一相對應(yīng)的匹配。
20.如權(quán)利要求17所述的制品,其中,所述機器可訪問介質(zhì)還包括如下內(nèi)容,如果所述并行比較得到了至少一個匹配,則該內(nèi)容使得機器從所述存儲器接收一個指示,指示哪個目標(biāo)字符串可能匹配所述掃描數(shù)據(jù)。
21.如權(quán)利要求20所述的制品,其中,所述機器可訪問介質(zhì)還包括如下內(nèi)容,使得所述機器將所述可能匹配的目標(biāo)字符串與所述掃描數(shù)據(jù)進(jìn)行比較以確定是否存在實際匹配。
22.如權(quán)利要求17所述的制品,其中,所述機器可訪問介質(zhì)包括如下內(nèi)容,當(dāng)被機器訪問時,該內(nèi)容使得該機器在存儲器中存儲一個或多個目標(biāo)字符串的多個字符串段,該機器可訪問介質(zhì)包括具有如下內(nèi)容的機器可訪問介質(zhì),當(dāng)被機器訪問時,所述內(nèi)容使得所述機器在內(nèi)容可尋址存儲器中存儲一個或多個目標(biāo)字符串的多個字符串段。
23.一種系統(tǒng),包括動態(tài)隨機訪問存儲器,用于存儲源數(shù)據(jù);內(nèi)容可尋址存儲器,與所述動態(tài)隨機訪問存儲器相連接,用于存儲一個或多個目標(biāo)字符串的多個字符串段,以將所述已存儲的字符串段與多個字節(jié)的所述源數(shù)據(jù)進(jìn)行比較;和處理器,與所述動態(tài)隨機訪問存儲器以及內(nèi)容可尋址存儲器相連接,用于處理所述源數(shù)據(jù),并且,如果所述已存儲的字符串段中的至少一個匹配所述源數(shù)據(jù),則確定是否存在與所述目標(biāo)字符串之一相對應(yīng)的實際匹配。
24.如權(quán)利要求23所述的系統(tǒng),其中,如果所述字符串段中的至少一個匹配所述源數(shù)據(jù),則所述內(nèi)容可尋址存儲器還指出所述源數(shù)據(jù)可能匹配所述目標(biāo)字符串中的哪一個。
25.如權(quán)利要求24所述的系統(tǒng),其中,所述處理器將所述可能匹配的目標(biāo)字符串與所述源數(shù)據(jù)進(jìn)行比較,以確定是否存在實際匹配。
全文摘要
本發(fā)明描述了一種比較多個字節(jié)的數(shù)據(jù)與已存儲的字符串段的方法及系統(tǒng)。所述方法包括在存儲器中存儲一個或多個目標(biāo)字符串的多個字符串段,掃描多個字節(jié)的數(shù)據(jù),以及將所述多個字節(jié)的掃描數(shù)據(jù)與所述已存儲的字符串段并行地進(jìn)行比較以確定是否存在與目標(biāo)字符串之一相對應(yīng)的可能匹配。在發(fā)現(xiàn)可能匹配后,可以將目標(biāo)字符串中的一個或多個與所述掃描數(shù)據(jù)進(jìn)行比較以確定是否存在實際匹配。
文檔編號G06F17/30GK1573714SQ20031012305
公開日2005年2月2日 申請日期2003年12月23日 優(yōu)先權(quán)日2003年6月4日
發(fā)明者肯尼思·A·赫夫林格爾 申請人:英特爾公司