專利名稱:高速非并發控制數據庫的制作方法
技術領域:
本公開涉及計算機系統。更具體的,本公開涉及用于對大型數據庫系統利用并發更新而不使用數據庫鎖或訪問控制的進行高速數據庫搜索方法和系統。
背景技術:
隨著互聯網的繼續急速增長,為根服務器和通用頂級域名(gTLD)服務器在合理的價格點的擴展域名服務(DNS)的解決方案開始日益困難。A根服務器(即a.root-server.net)維護和分配互聯網名字空間根區域文件給12個地理上分布在全世界的二級根服務器(即b.root-servers.net,c.root-servers.net等),同時對應的gTLD服務器(即a.gtld-servers.net,b.gtld-servers.net等)被類似地分配并支持頂級域(即*.com,*.net,*.org等)。一直增長的數據容量加上不斷增加的查詢速度促使全面再思考在今后幾十年內的根服務器和gTLD DNS服務所需的硬件和軟件體系結構。標準“綁定”軟件分配的典型單服務器安裝已經不滿足A根的需要并且甚至很快將不能滿足gTLD的需要。隨著公共交換電話網(PSTN)和互聯網的會聚,因為提供了跨越PSTN和互聯網的新的、先進的服務,包括先進智能網絡(AIN),IP電話(VoIP)服務,地理位置服務等,所以出現了用于通用目的、高性能搜索機制的機會以提供將在PSTN的SS7信令網絡上通常與服務控制點(SCP)相關聯的特征。
圖1是根據本發明的實施例的系統框圖。
圖2是圖解說明根據本發明的實施例的消息數據結構的詳細框圖。
圖3是圖解說明根據本發明的實施例的消息等待時間數據結構體系結構的詳細框圖。
圖4是圖解說明根據本發明的實施例的非并發控制數據結構體系結構的詳細框圖。
圖5是圖解說明根據本發明的實施例的非并發控制數據結構體系結構的詳細框圖。
圖6是圖解說明根據本發明的實施例的非并發控制數據結構體系結構的詳細框圖。
圖7是圖解說明根據本發明的實施例的非并發控制數據結構體系結構的詳細框圖。
圖8是圖解說明根據本發明的實施例的非并發控制數據結構體系結構的詳細框圖。
圖9是圖解說明根據本發明的實施例的用于搜索和并發更新數據庫而不使用數據鎖或訪問控制的方法的頂層流程圖。
具體實施例方式
本發明的實施例提供用于對大型數據庫系統利用并發更新而不使用數據庫鎖或訪問控制的高速數據庫搜索的方法和系統。具體地,可通過網絡接收多個搜索查詢,數據庫可被搜索,并且可通過網絡發送多個搜索應答。在搜索數據庫的同時,通過根據新信息創建新元素,和在不需要鎖定數據庫的情況下利用單個不可中斷操作將新元素的指針寫到數據庫,可以將通過網絡接收的新信息合并到數據庫中。
圖1圖解說明根據本發明的實施例的系統的框圖。一般地,系統100可持有大型的存儲器常駐的數據庫,通過網絡接收搜索請求并提供搜索響應。例如,系統100可以是對稱多處理(SMP)計算機,諸如New York,Armonk的國際商用機器公司制造的IBMRS/6000M80或S80,California,Santa Clara的太陽微系統公司制造的Sun EnterpriseTM10000等。系統100還可以是多處理器個人計算機,諸如California,Palo Alto的Hewlett-packard公司制造的Compaq ProliantTMML530(包括雙Intel PentiumIII866MHz處理器)。系統100還可以包括多處理操作系統,諸如IBMAIX4,Sun SolarisTM8 Operating Environment,Red Hat Linux6.2等。系統100可通過網絡124接收可并發地合并到數據庫中的周期性的更新。本發明的實施例可通過將每個更新合并到數據庫中來達到很高的數據庫搜索和更新吞吐量,而不需要使用數據庫鎖或訪問控制。
在一個實施例中,系統100可包括至少一個和總線101連接的處理器102-1。處理器102-1可包括內部存儲器緩存(例如L1緩存,為清晰而沒有示出)。二級存儲器緩存103-1(例如L2緩存,L2/L3緩存等)可駐留在處理器102-1和總線101之間。在優選實施例中,系統100可包括和總線101連接的多個處理器102-1...102-P。多個二級存儲器緩存103-1...103-P也可駐留在多個處理器102-1...102-P和總線101之間(例如,look-through體系結構),或者,替替換的,至少一個二級存儲器緩存103-1可以連接總線101(例如look-aside體系結構)。系統100可包括和總線101連接的存儲器104,諸如,例如隨機存取存儲器(RAM)等,用于存儲將被多個處理器102-1...102-P執行的信息和指令。
存儲器104可以存儲大型的數據庫,例如用于將互聯網域名轉換成互聯網地址,用于將名字或電話號碼轉換成互聯網地址,用于提供并更新用戶簡檔數據(subscriber profile data),用于提供并更新用戶存在數據等等。有利地,數據庫的大小和每秒的轉換量都非常的大。例如,存儲器104可包括至少64GB的RAM并且可持有500M(即500×106)記錄域名數據庫,500M記錄用戶數據庫,450M記錄電話號碼可移植性數據庫等。
在示例的64-位系統體系結構上,諸如包括至少連接64-位總線104和64-位存儲器104的至少一個64-位大尾數的(big-endian)處理器102-1的系統,利用單個不可中斷操作可將8-字節指針值寫到8-字節邊界(即可被8整除的存儲器地址,或者例如8N)上的存儲器地址。一般地,二級存儲器緩存103-1的存在可簡單地延遲8-字節指針寫入存儲器104。例如,在一個實施例中,二級存儲器緩存103-1是以直寫方式(write-through mode)操作的審核(look-through)緩存,使得單個8-字節存儲指令可在沒有中斷的情況下且以兩個系統時鐘周期把數據的8個字節從處理器102-1移動到存儲器104。在另一個實施例中,二級存儲器緩存103-1以寫回式(write-back mode)操作的審核緩存,使得可以將8-字節的指針首先寫入到二級存儲器緩沖103-1,然后在隨后的時間,諸如,當其中存儲了8-字節指針的緩存線被寫入到存儲器104時(即例如,當特定緩存線,或整個二級存儲器緩存被“刷新”時),該二級存儲器緩沖103-1把8-字節指針寫入到存儲器104。
最后,從處理器102-1的角度,一旦數據被鎖存在處理器102-1的輸出引腳上,所有的8個字節的數據在一個連續的、不可中斷的傳輸中被寫到存儲器104,該傳輸可被二級存儲器緩存103-1的作用延遲,如果存在的話。從處理器102-1...102-P的角度,一旦數據被鎖存在處理器102-1的輸出引腳上,所有的8個字節的數據在一個連續的、不可中斷的傳輸中被寫到存儲器104,這由經過二級存儲器緩沖103-1...103-P的緩存相干協議強制執行,二級存儲器緩沖103-1...103-P可延遲對存儲器104的寫入,如果存在的話。
但是,如果8字節的指針值被寫到存儲器104中的未對準的位置,比如跨越8字節邊界的存儲器地址,利用單個8-字節存儲指令不能從處理器102-1中傳送所有的8個字節的數據。而是,處理器102-1可以發布兩個分離的并且截然不同的存儲指令。例如,如果存儲器地址開始于在8-字節邊界前面的4個字節(例如,8N-4),第一存儲指令傳輸四個最高位字節到存儲器104(例如,8N-4),而第二存儲指令傳輸四個最低位字節到存儲器104(例如,8N)。重要地,在這兩個分離的存儲指令之間,處理器102-1可被中斷,或處理器102-1相對于另一個系統部件(例如處理器102-P等)可放松對總線101的控制。結果,駐留在存儲器104中的指針值是無效的,直到處理器102-1完成第二存儲指令。如果另一個部件開始單個不可中斷的存儲器讀操作來讀這個存儲器位置,一個無效值將被作為一個假設有效的值返回。
類似地,可利用單個不可中斷操作將新的4字節指針值寫入可被4整除的存儲器地址(例如4N)。需要注意,在上面討論的例子中,可利用單個存儲指令將4字節指針值寫入8N-4存儲器位置。當然,如果將4字節指針值寫到跨越4字節邊界的位置,例如4N-2,不能利用單個存儲指令從處理器102-1傳輸所有的4個字節的數據,并且駐留在存儲器104中的指針值在某些時間期間無效。
系統100還可包括和總線101連接的只讀存儲器(ROM)106,或其它靜態存儲設備用于存儲處理器102-1的靜態信息和指令。存儲設備108,比如磁盤或光盤,可與總線101連接用于存儲信息和指令。系統100還可以包括連接總線101的顯示器110(例如,LCD監視器)和輸入設備112(例如,鍵盤,鼠標,跟蹤球等)。系統100還可包括多個網絡接口114-1...114-O,這些接口可發送和接收載有代表各種類型信息的數字數據流的電、電磁或者光信號。在一個實施例中,網絡接口114-1可與總線101和局域網(LAN)122連接,而網絡接口114-O可與總線101和廣域網(WAN)124連接。多個網絡接口114-1...114-O可支持多種網絡協議,包括,例如千兆位以太網(例如IEEE Standard 802.3-2002,2002年公布),光纖通道(例如ANSI Standard X.3230-1994,1994年公布)等。多個網絡計算機120-1...120-N可與LAN 122和WAN 124連接。在一個實施例中,LAN 122和WAN 124可以是物理上不同的網絡,而在另一個實施例中,LAN 122和WAN 124可以是經由網絡網關或路由器(為了清楚起見沒有示出)。或者,LAN 122和WAN 124是相同的網絡。
如上面注意的,系統100可提供DNS解析服務。在DNS解析實施例中,DNS解析服務一般地可以被分成網絡傳輸和數據查找功能。例如,系統100可以是為大型數據集的數據查詢而最優化的后端查詢引擎(LUE),而多個網絡計算機120-1...120-N可以是為網絡處理和傳輸而最優化的多個前端協議引擎(PE)。LUE可以是強大的多處理器服務器,其在存儲器104中存儲了整個DNS記錄集以便于高速、高吞吐量地搜索和更新。在一個可替換實施例中,DNS解析服務可由一系列強大的多處理器服務器或LUE提供,每一個在存儲器中存儲了整個DNS記錄集的子集以便于高速、高吞吐量地搜索和更新。
相反地,多個PE可以是通用的、低配置、基于PC機運行有效的多任務操作系統(例如Red Hat Linux6.2),該操作系統最小化LUE上的網絡處理傳輸負載,以便最大化用于DNS解析的可用資源。PE可以響應對LAN 122上的LUE的無效DNS查詢和多路復用的有效DNS查詢,處理有線線路(wire-line)DNS協議的細微差別。在另一個包括存儲DNS記錄子集的多個LUE的可替換實施例中,PE可確定哪個LUE應該接收對于適當的LUE的每個有效DNS查詢和多路復用有效DNS查詢。對于單個LUE的PE數目可由例如每秒處理的DNS查詢數目和特定系統的性能特征來確定。其它量度也可用作確定恰當的映射比率和行為。
一般的,可支持其它大容量、基于查詢的實施例,包括例如電話號碼解析,SS7信令處理,地理位置確定,電話號碼到用戶的映射,用戶位置和存在確定等等。
在一個實施例中,中央聯機事務處理(OLTP)服務器140-1可與WAN 124連接,并接收從各種來源對數據庫142-1的添加、修改和刪除(即,更新業務量)。OLTP服務器140-1可通過WAN 124發送包括有數據庫142-1的本地拷貝的更新到系統100。OLTP服務器140-1可以用多種格式和協議來優化處理更新業務量,所述多種格式和協議包括例如超文本傳輸協議(HTTP)、注冊登記員協議(Registry Registrar Potocol RRP)、可擴展供應協議(ExtensibleProvisioning Protocol EPP)、服務管理系統/800機械化通用接口(Mechanized Generic Interface MGI)和其它的在線供應協議。只讀LUE群可被部署在集線器和輻條(spoke)體系結構以提供高速搜索能力以及來自OLTP服務器140-1的大容量、遞增的更新。
在一個可替換實施例中,可以通過多個OLTP服務器140-1...140-S分布數據,它們的每一個可與WAN 124連接。OLTP服務器140-1...140-S可以接收從各種來源對它們各自的數據庫142-1...142-S(為清楚起見沒有示出)的添加、修改和刪除(即,更新業務量)。OLTP服務器140-1...140-S可以通過WAN 124發送包括有數據庫142-1...142-S的拷貝、其它動態創建的數據等的更新到系統100。例如,在一個地理位置實施例中,OLTP服務器140-1...140-S可以從多組遠程傳感器接收更新業務量。在另一個可替換實施例中,多個網絡計算機120-1...120-N也可通過WAN 124或LAN 122接收來自各種來源的添加、修改和刪除(即,更新業務量)。在這個實施例中,多個網絡計算機120-1...120-N可給系統100發送更新以及查詢。
在DNS解析實施例中,每個PE(例如,多個網絡計算機120-1...120-N的每一個)可以將通過廣域網(例如WAN 124)接收的若干DNS查詢消息結合或多路復用成單個請求超級包(RequestSuperPakcet)并通過局域網(例如LAN 122)發送該請求超級包到LUE(例如系統100)。LUE可結合或多路復用若干DNS查詢消息應答形成單個響應超級包(Response SuperPakcet)并通過局域網發送該響應超級包到適當的PE。一般地,請求或響應超級包的最大長度可由物理網絡層(例如千兆位以太網)的最大傳輸單元(MTU)限制。例如,分別小于100字節和200字節的典型DNS查詢和應答消息長度允許超過30個查詢被多路復用形成單個請求超級包,同時允許超過15個應答被多路復用形成單個響應超級包。但是,較少數量的查詢(例如20個查詢)可被包括在單個請求超級包,以避免MTU在響應時(例如10個應答)溢出。對于更大的MTU長度,多路復用的查詢和應答的數量可相應地增加。
每個多任務PE可包括用于分別管理DNS查詢和應答的入線程和出線程。例如,入線程可以不整理來自通過廣域網接收的進入DNS查詢包的DNS查詢成分,并且多路復用幾毫秒的查詢形成單個請求超級包。然后該入線程可通過局域網發送請求超級包到LUE。相反地,出線程可接收來自LUE的響應超級包,多路分解在其中包含的應答,并整理各種字段到有效的DNS應答中,該應答接著通過廣域網被傳送。一般地,如上所述,可支持其它大容量、基于查詢的實施例。
在一個實施例中,請求超級包還可以包括與每個DNS查詢有關的狀態信息,例如源地址、協議類型等。LUE可以在響應超級包中包括狀態信息和相關的DNS應答。那么每個PE可利用從LUE傳送的信息構建并返回有效DNS應答消息。結果,每個PE可以有利地作為無狀態機操作,即有效DNS應答可根據包含在響應超級包中的信息形成。一般地,該LUE可以將響應超級包返回到PE,而進入的超級包從該PE中產生;但是,其它變化也明顯可能。
在一個可替換實施例中,每個PE可維護與每個DNS查詢相關的狀態信息并在請求超級包中包括狀態信息的引用或句柄。LUE可在響應超級包中包括狀態信息引用和相關的DNS應答。然后每個PE可利用從LUE傳送的狀態信息引用以及其上維護的狀態信息來構建并返回有效DNS應答消息。在這個實施例中,該LUE可將響應超級包返回給PE,而進入的超級包從該PE中產生。
圖2是圖解說明根據本發明的實施例的消息數據結構的詳細框圖。一般地,消息200可包括具有多個序列號211-1...211-S以及多個消息計數212-1...212-S的頭部210,和數據有效負載215。
在DNS解析實施例中,消息200可用作請求超級包和響應超級包。例如,請求超級包220可包括具有多個序列號231-1...231-S以及多個消息計數232-1...232-S的頭部230,和具有多個DNS查詢236-1...236-Q的數據有效負載235,這些DNS查詢是在例如幾毫秒的預定時間內由PE積累的。在一個實施例中,每個DNS查詢236-1...236-Q可以包括狀態信息,而在一個可替換實施例中,每個DNS查詢236-1...236-Q可包括狀態信息的句柄。
類似地,響應超級包240可包括具有多個序列號251-1...251-S以及多個消息計數252-1...252-S的頭部250,和具有近似地對應于包含在請求超級包220內的多個DNS查詢的多個DNS應答236-1...236-R的數據有效負載255。在一個實施例中,每個DNS應答256-1...256-R可包括與對應的DNS查詢有關的狀態信息,而在可替換實施例中,每個DNS應答256-1...256-R可包括與對應的DNS查詢有關的狀態信息的句柄。偶爾,對應的DNS應答的總長度可超過響應超級包240的數據有效負載255的長度。這個溢出可以被限制例如到單個應答,即和包含在請求超級包220內的上一次查詢有關的應答。該溢出應答優選包括在對應于下一個請求超級包的下一個響應超級包240中,而不是發送只包含有單個應答的附加響應超級包240。有利地,頭部250可包括恰當的信息來確定溢出條件的范圍。在峰值處理條件下,多于一個的應答可溢出到下一個響應超級包中。
例如,在響應超級包240中,頭部250可包括作為兩對補充字段而成組的至少兩個序列號251-1和251-2以及至少兩個消息計數252-1和252-2。然而可以有“S”數目的序列號和消息計數對,一般地,S是一個較小的數,比如2,3,4等等。這樣,頭部250可包括和消息計數252-1成對的序列號251-1,和消息計數252-2成對的序列號251-2等等。一般地,消息計數252-1可反映和序列號251-1有關的、包含在數據有效負載255內的應答數。在一個實施例中,序列號251-1可以是2個字節的字段,而消息計數252-1可以是1個字節的字段。
在更具體的例子中,請求超級包220的數據有效負載235可包括7個DNS查詢(如圖2中描述的)。在一個實施例中,序列號231-1可被設置為唯一值(例如1024)以及消息計數232-1可被設置為7,而序列號231-2和消息計數232-2可被設置為0。在另一個實施例中,頭部230可以只包含一個序列號和一個消息計數,例如被分別設置為1024和7的序列號231-1和消息計數232-1。一般地,請求超級包220可包含和特定序列號有關的所有查詢。
響應超級包240的數據有效負載255可以包括7個對應的DNS應答(如圖2中描述的)。在這個例子中,頭部250可包括和請求超級包220類似的信息,即設置了相同唯一值(即1024)的序列號251-1,設置為7的消息計數252-1,并且序列號251-2和消息計數252-2都被設置為0。但是,在另一個例子中,響應超級包240的數據有效負載255可以只包括5個對應的DNS應答,并且消息計數252-1也設置成5。和序列號1024相關的剩余的兩個響應可以包括在下一個響應超級包240中。
該下一個響應超級包240可以包括不同的序列號(例如1025)以及至少一個DNS查詢,使得下一個響應超級包240可以包括和這個1024的序列號相關的兩個先前的應答,以及和這個1025的序列號相關的至少一個應答。在這個例子中,下一個響應超級包240的頭部250可以包括設置為1024的序列號251-1,設置為2的消息計數252-1,設置為1025的序列號251-2,設置為1的消息計數252-2。這樣,響應超級包240可包括和包含在2個不同的請求超級包中的3個查詢相關的總共3個應答。
圖3是圖解說明根據本發明的實施例的消息等待時間數據結構體系結構的詳細框圖。消息等待時間數據結構300可包括通常與消息200的傳送和接收相關的信息。在DNS解析實施例中,消息等待時間數據結構300可包括關于請求超級包和響應超級包的等待時間信息;該等待時間信息可以被組織成根據序列號值(例如索引301)索引的表的格式。例如,消息等待時間數據結構300可包括和唯一序列號的總數相等的多個行N,如圖所示,一般為表元素310、320、330。在一個實施例中,超級包頭部序列號可是2個字節長度并定義唯一序列號的范圍從0到216-1(即65,535)。在這個情況下,N可以等于65,536。等待時間信息可以包括請求時間戳302,請求查詢計數303,響應時間戳304,響應應答計數305和響應消息計數306。在可替換實施例中,等待時間信息還可包括初始響應時間戳(沒有示出)。
在一個例子中,表元素320顯示對于具有等于1024的單個序列號231-1的請求超級包220的等待時間消息。請求時間戳302可以表示這個特定的請求超級包何時被發送到LUE。請求查詢計數303可以表示在特定請求超級包中包含了多少查詢。響應時間戳304可以表示具有等于1024的序列號的響應超級包何時在PE(例如網絡計算機120-N)被接收,并且在多于一個的響應超級包在PE被接收時被更新。響應應答計數305可以表示在與這個序列號(即1024)有關的所有接收的響應超級包內包含的應答總數。響應消息計數306可表示有多少具有這個序列號(即1024)的響應超級包到達PE。根據多個響應超級包可以分解對在這個特定請求超級包中包含的查詢的應答,在此情況下,響應時間戳304,響應應答計數305和響應消息計數306可以在每個附加的響應超級包被接收時更新。在可替換實施例中,初始響應時間戳可以表示包含對這個序列號(即1024)應答的第一響應超級包何時在PE被接收。在這個實施例中,響應時間戳304可在附加(即第二和后續的)響應超級包被接收時更新。
各種重要的等待時間量度可以根據包含在消息等待時間數據結構300中的等待時間消息來確定。例如,對于給定索引301(即序列號)的請求查詢計數303和響應應答計數305之間的簡單交叉檢查可以表示丟失應答的數量。該差異可以表示被LUE無法解釋地減少的查詢數。比較請求時間戳302和響應時間戳304可以表示特定PE/LUE組合在當前消息負載下是如何被很好地執行。當前請求超級包序列號和當前響應超級包序列號的差值和LUE的響應性能相關;例如,差值越大,執行越慢。響應消息計數306可表示有多少響應超級包被用于每個請求超級包,并對于分析DNS解析業務量很重要。當在PE和LUE之間傳輸的查詢和應答的等待時間增加時,PE可減少由系統處理的DNS查詢包的數量。
一般地,LUE可以對進入的多路復用的請求超級包執行多線程查詢,并可以將應答組合成出去的多路復用的響應超級包。例如,LUE可以為每個活動PE產生一個搜索線程或進程,并將所有來自該PE的進入的請求超級包路由到那個搜索線程。LUE可以產生一個管理器線程或進程,以便控制PE對搜索線程的相關性,以及更新線程或者進程以便更新存儲器104中的數據庫。每個搜索線程可以從進入的請求超級包中提取搜索查詢,執行各種搜索,構建包含搜索應答的出去的響應超級包并發送該超級包給恰當的PE。更新線程可從OLTP 140-1接收對數據庫的更新,并將新數據合并到數據庫中。在可替換實施例中,多個網絡計算機120-1...120-N可發送更新到系統100。這些更新可被包括在例如進入的請求超級包消息流中。
相應的,根據超級包協議,LUE可以對在網絡處理花費少于15%的處理器能力,因此動態增加了搜索查詢的吞吐量。在一個實施例中,IBM8-路M80可承受每秒180k到220k查詢的搜索率(qps),而IBM24-路S80可承受400k到500k qps。分別將搜索率加倍,即達到500k和1M qps,簡單地請求兩次硬件,即,例如兩個LUE及其伴隨的PE。在另一個實施例中,運行Red Hat Linux6.2的雙PentiumIII 866MHz多處理器個人計算機可承受大約100K/sec的更新率。當然,提高硬件的性能同樣提高了和本發明實施例相關的搜索和更新率,并且當制造商將這些多處理器替代為執行更快的機器時,例如,所能承受的搜索和更新率可以匹配地增加。一般地,系統100不限于客戶機和服務器的體系結構,并且本發明的實施例不限于硬件和/或軟件的任何特定組合。
圖4是圖解說明根據本發明的實施例的一般數據庫體系結構的框圖。在這個實施例中,數據庫400可包括至少一個數據庫記錄401的表或組,和至少一個相應的具有指向數據庫記錄401的組中單個記錄的指針(索引,直接字節偏移量等)的搜索索引402。例如,指針405可以引用數據庫記錄410。
在一個實施例中,數據庫400可以在數據庫記錄401的表或組中包括至少一個散列表403作為帶有指針(索引,直接字節偏移量等)的搜索索引。散列函數可以映射搜索關鍵字到一個整數值,該整數值接著可被用作散列表403中的索引。因為多于一個的搜索關鍵字可映射到單個整數值,可利用散列鏈指針的單連接列表創建散列表元。例如,散列表403中的每個入口可以包含指向散列表元的第一元素的指針,并且散列表元的每個元素可以包含指向連接列表中的下一個元素或數據庫記錄的散列鏈指針。有利地,對于那些元素或數據庫記錄可以只要求散列鏈指針,該散列鏈指針引用散列表元中的后續元素。
散列表403可以包括指向單個數據庫記錄401的8字節指針數組。例如,散列表403中的散列指針404可以引用數據庫記錄420作為散列表元中的第一元素。數據庫記錄420可以包含可引用散列表元中的下一個元素或數據庫記錄的散列鏈指針424。數據庫記錄420還可以包括數據長度421和相關的固定或可變長度的數據422。在一個實施例中,可以包括表明數據422終止的空字符423。另外,數據庫記錄420可以包括能引用另一個數據庫記錄的數據指針425,該另一個數據庫記錄或者在數據庫記錄401的組中,或者在其中可定位附加數據的不同的數據庫記錄的組或表(沒有示出)中。
系統100可以使用各種公知的算法以便對給定的搜索項或關鍵字來搜索這個數據結構體系結構。一般地,數據庫400可以由在多個處理器102-1...102-P中的至少一個上執行的多個搜索進程或線程來搜索。但是,通過一個更新線程(或多個線程)不能完整地執行對數據庫400的修改,除非阻止該搜索線程(多個線程)在添加、修改或刪除數據庫400中的信息所必要的時間周期中訪問數據庫400。例如,為了修改數據庫400中的數據庫記錄430,數據庫401的組可以由更新線程鎖定,以阻止搜索線程在更新線程修改數據庫430中的信息時訪問數據庫400。存在許多公知的用于鎖定數據庫400的機制以阻止搜索訪問,包括利用自旋鎖、信號燈、互斥等。另外,各種現成的商用數據庫提供特定命令來鎖定所有或部分數據庫400,例如在由California,Redwood Shores的Oracle公司制作的Oracle 8數據庫中的鎖定表命令。
圖5是圖解說明根據本發明的另一個實施例的一般數據庫體系結構的框圖。在這個實施例中,數據庫500可包括高級優化的、只讀的主快照文件510和增長的look-aside文件520。主快照文件510可包括至少一個數據庫記錄511的表或組,和至少一個相應的具有指向數據庫記錄511的組中的單個記錄的指針(索引,直接字節偏移量等)的搜索索引512。或者,主快照文件510可以在數據庫記錄511的表或組中包括至少一個散列表513作為具有指針(索引,直接字節偏移量等)的搜索索引。類似地,look-aside文件520可以包括至少兩個數據庫記錄的表或組,包括有數據庫添加記錄521和數據庫刪除記錄531。可以提供具有指向數據庫添加記錄521和數據庫刪除記錄531中的單個記錄的指針(索引,直接字節偏移量等)的對應的搜索索引522和532。或者,look-aside文件520可以分別在數據庫添加記錄521和數據庫刪除記錄531中包括散列表523和533作為具有指針(索引,直接字節偏移量等)的搜索索引。
系統100可以使用各種公知的算法以便對給定的檢索項或關鍵字來搜索這個數據結構體系結構。在一個典型的例子中,look-aside文件520可以包括所有的數據的最近變化,并且可以在只讀的主快照文件510之前被搜索。如果在look-aside文件520中找到搜索關鍵字,返回響應而不需要訪問快照文件510,但是如果沒有找到關鍵字,那么可以搜索快照文件510。但是,當look-aside文件520不再適合具有快照文件510的存儲器104時,搜索查詢率按例如10至50或者更多的因子劇烈地下降。結果,為了避免或者最小化搜索查詢率的任何下降,快照文件510可以通過合并包含在look-aside文件520中所有的添加、刪除和修改來周期性地更新或重建。
在快照文件510中的數據不是物理上的改變而是邏輯上的添加、修改或刪除。例如,可以通過創建在數據庫刪除記錄531中對應的刪除記錄以及通過將指向該刪除記錄的指針寫到散列表533中恰當的位置來將快照文件510中的數據刪除或邏輯“遺忘”。可以通過將來自快照文件510的數據記錄拷貝到數據庫添加記錄521中的新數據記錄,修改新入口中的數據,并接著將指向該新入口的指針寫到恰當的散列表(例如散列表522)或者數據庫添加記錄521中的鏈指針,將快照文件510中的數據進行邏輯上修改。類似地,可以通過創建數據庫添加記錄521中的新的數據記錄,并接著將指向新入口的指針寫到恰當的散列表(例如散列表522)或者數據庫添加記錄521中的鏈指針,將快照文件510中的數據邏輯上添加到快照文件510。
在DNS解析實施例中,例如,快照文件510可包括按著具有分離的搜索索引(例如511-1,511-2,512-1,512-2,513-1,513-2等,為清楚起見沒有示出)的分離的數據表或塊來組織的域名數據和名字服務器數據,。類似地,look-aside文件520可包括對域名數據和名字服務器數據兩者的添加和修改,以及對域名數據和名字服務器數據的刪除(例如521-1,521-2,522-1,522-2,523-1,523-2,531-1,531-2,532-1,532-2,533-1,533-2等,為清楚起見沒有示出)。
圖6是圖解說明根據本發明的實施例的非并發控制的數據結構體系結構的詳細框圖。一般地,數據庫600可以被組織成單個、可搜索的數據表示。數據集更新可以被連續地合并到數據庫600中,并且可以對相關數據庫記錄物理執行刪除或修改以便例如為后續的添加或修改釋放存儲器104中的空間。單個、可搜索的表示極其適合對大型數據集的大小以及高搜索與更新率的換算,并且消除對在多個搜索引擎計算機中周期性地重新創建、傳輸和重新載入快照文件的需要。
在DNS解析實施例中,例如數據庫600可以包括域名數據610和名字服務器數據620。域名數據610和名字服務器數據620可以將帶有指針(索引,直接字節偏移量等)的搜索索引包括到可變長度記錄的塊中。如上面所討論的,散列函數可以映射搜索關鍵字到一個整數值,該整數值接著可被用作散列表中的索引。類似地,可利用散列鏈指針的單連接列表為每個散列表索引創建散列表元。域名數據610可包括例如散列表612作為搜索索引和可變長度的域名記錄611的塊。域名數據610可包括指向單個域名記錄611的8字節指針數組,例如引用域名記錄620的指針613。可變長度的域名記錄620可包括例如下一個記錄偏移量621、名字長度622、標準化名字623、鏈指針624(即,例如指向散列鏈中的下一個記錄),多個名字服務器625和名字服務器指針626。鏈指針624和名字服務器指針626兩者的大小可被優化以反映對每個特定類型數據所要求的塊大小,例如對于鏈指針624是八個字節和對于名字服務器指針626的四個字節。
名字服務器數據630可包括例如散列表632作為搜索索引和可變長度的名字服務器記錄631的塊。散列表632可包括指向單個名字服務器記錄631的4字節指針數組,例如引用名字服務器記錄640的指針633。可變長度的名字服務器記錄640可包括例如下一個記錄偏移量641、名字長度642、標準化名字643、鏈指針644(即,例如指向散列鏈中的下一個記錄),多個名字服務器網絡地址645,名字服務器地址長度646、和一個可以是例如互聯網協議(IP)網絡地址的名字服務器網絡地址647。一般地,名字服務器網絡地址可以存儲在ASCII(American Standard Code for InformationInterchange,例如ISO-14962-1997,ANSI-X3.4-1997等)或二進制格式;在這個例子中,名字服務器網絡地址長度646表示名字服務器網絡地址647以二進制格式存儲(即4字節)。鏈指針644的長度也可以被優化以反映所要求的名字服務器數據塊大小,例如4字節。
一般地,例如散列表的搜索索引和可變長度的數據記錄都可以被構造,使得將8字節指針定位在存儲器中的8字節邊界。例如,散列表612可以包含連續的指向域名記錄611的8字節指針數組,并且可以存儲在可被8整除(即8字節邊界,或8N)的存儲器地址。類似地,例如散列表的搜索索引和可變長度的數據記錄都可以被構造,使得將4字節指針定位在存儲器中的4字節邊界。例如,散列表632可以包含指向名字服務器記錄631的連續的4字節指針數組,并且可以存儲在可被4整除(即4字節邊界,或4N)的存儲器地址。結果,數據庫600的修改可通過利用單個不可中斷操作更新指向存儲器中對齊的地址的指針來完成,該單個不可中斷操作包括例如將新指針寫到搜索索引,比如散列表,或將新散列鏈指針寫到可變長度的數據記錄。
圖7是圖解說明根據本發明的實施例的非并發控制數據結構體系結構的詳細框圖。一般地,數據庫700可以被組織成單個、可搜索的數據表示。數據集更新可以連續地合并到數據庫700中,并且可以對相關數據庫記錄物理執行刪除或修改以便例如為后續的添加或修改釋放存儲器104中的空間。單個、可搜索的表示極其適合對大型數據集的大小以及高搜索與更新率的換算,并且消除對在多個搜索引擎計算機中周期性地重新創建、傳輸和重新載入快照文件的需要。
許多不同的物理數據結構組織是可能的。一個示例性的組織可以使用散列表的一個可替換的搜索索引以便有序地、連續地訪問數據記錄,例如結合了對分檢索樹和數字檢索trie的特征的三叉檢索樹(trie)或TST。在基于文本的應用中,例如,whois,利用DNS安全擴展(對評述2535的互聯網工程工作小組的請求)的域名解析等,TST有利地最小化要求執行的比較操作的數量,特別是在搜索失敗的情況下,并且可以利用散列法產生超過搜索引擎執行的搜索性能量度。另外,TST還可以提供先進的文本搜索特征,比如在文本搜索應用中是有用的通配符搜索,文本檢索應用的例子有whois、域名解析、互聯網內容搜索等。
在一個實施例中,TST可包括一系列以層次關系連接在一起的節點。根節點可以位于樹的頂部,相關的子節點和連接可以形成分枝,葉子節點可以結束每個分枝的末端。每個葉子節點可以和特定的搜索關鍵字相關聯,并且到葉子節點的路徑上的每個節點可以包含該關鍵字的單個連續元素。樹中的每個節點包含比較字符或分離值,以及指向該樹中的其它連續的或子“子”節點的三個指針。這些指針引用分離值小于、等于或大于節點分離值的子節點。因此根據特定關鍵字檢索TST涉及從根節點到最后的葉子節點穿過該樹,順序地比較關鍵字的每個元素或字符位置和沿著該路徑的節點的分離值。另外,葉子節點還可以包含指向關鍵字記錄的指針,其反過來可以包含指向包含和關鍵字(例如IP地址)相關聯的記錄數據的終結數據記錄的至少一個指針。或者,該關鍵字記錄可以包含在它的整體中的記錄數據。記錄數據可以以二進制格式、ASCII文本格式等存儲。
在一個實施例中,數據庫700可以被組織成TST,包括多個固定長度的搜索節點701,多個可變長度的關鍵字數據記錄702和多個可變長度的終結數據記錄703。搜索節點701可以包括如上所述的各種類型的信息,包括例如比較字符(或值)與位置,分枝節點指針和關鍵字指針。節點指針的長度一般可由節點數目決定,而關鍵字指針的長度一般可由可變長度的關鍵字數據集的長度決定。關鍵字數據記錄702可以包含關鍵字信息和終結數據信息,包括例如指向終結數據記錄或嵌入的數據記錄的指針,而終結數據記錄703可以包含記錄數據。
在一個實施例中,每個固定長度的搜索節點的長度可以是24個字節。例如搜索節點710可以包含8比特的比較字符(或字節值)711、12比特的字符(或字節)位置712,和12比特的節點類型/狀態(為清楚起見沒有示出);這些數據可在該節點的頭四個字節內被編碼。比較字符711可以在如圖7中所示的節點的第一字節內被編碼,或者,可替換地,字符位置712可以在該節點的頭12個比特內被編碼以便利用簡單移位操作優化對字符位置712的訪問。每個搜索節點的下一個12字節可以包含三個32比特的指針,例如分別代表“小于”、“等于”、和“大于”分枝節點指針的指針713、指針714和指針715。這些指針可以包含計數器,或節點索引,而不是字節偏移量或存儲器地址。對于固定長度的檢索節點,字節偏移量可以根據計數器或索引值和固定長度來計算,比如計數器*長度。最后4個字節可以包含40比特的關鍵字指針716,其可以是表明對應的關鍵字數據記錄不存在(沒有示出)的空值,或指向存在的對應的關鍵字數據記錄(沒有示出)的指針以及其它數據,包括例如12比特的關鍵字長度和12比特的指針類型/狀態字段。關鍵字指針716可以包含對適當關鍵字數據記錄的1個字節偏移量,而關鍵字長度在消除TST內的一路分枝時可用于優化搜索和插入。該指針類型/狀態字段可以包含用于有效性檢查的信息和用于存儲器管理的分配數據。
在一個實施例中,關鍵字數據記錄750可以包括,例如可變長度的關鍵字753和至少一個終結數據指針。如圖7描述的,關鍵字數據記錄750包括兩個終結數據指針終結數據指針757和終結數據指針758。關鍵字數據記錄750可在其前頭加上12比特的關鍵字長度751和12比特的終結指針計數/狀態752,并且可以包括填充值(為清楚起見沒有示出)以便使終結數據指針757和終結數據指針758對齊存儲器104中的8個字節邊界。終結數據指針757和終結數據指針758可以分別包含各種數據,例如在二進制記錄搜索中有用的終結數據類型、長度、狀態或數據。終結數據指針757和終結數據指針758可以根據用于更快檢索指定資源記錄(例如終結數據記錄760和終結數據記錄770)的終結數據類型來存儲。在另一個實施例中,關鍵字數據記錄740可以包括除了終結數據記錄指針外的嵌入的終結數據746,或者還包括終結數據記錄指針。例如,關鍵字數據記錄740可包括關鍵字長度741、終結指針計數742、可變長度的關鍵字743、嵌入記錄元素744的數量,接著是嵌入記錄元素744的數量中的每一個的記錄元素長度745(例如,以字節為單位)和嵌入記錄數據746(例如,字符串、字節序列等)。
在一個實施例中,終結數據記錄760,例如可以包括12比特的長度761,4比特的狀態和可變長度的字符串762(例如一個IP地址)。可替換地,可變長度的字符串762可以是字節序列。終結數據記錄760可以包括填充值以便使每個終結數據記錄對齊存儲器104中的8字節邊界。可替換地,終結數據記錄760可以包括對4字節邊界的填充值,或終結數據記錄760可以不包括任何填充值。存儲器管理算法通常可以確定終結數據記錄760是否填充了8字節、4字節或0字節邊界。類似地,終結數據記錄770可以包括12比特的長度771、4比特的狀態和可變長度的字符串772(例如一個IP地址)。
一般地,諸如TST的搜索索引和數據記錄都可被構造,使得將8字節的指針定位在存儲器中的8字節邊界上。例如,關鍵字指針726可以包含8字節(或更小的)的指向關鍵字數據記錄740的指針,并且可以被存儲在可被8整除(即8字節邊界,或8N)的存儲器地址上。類似地,諸如TST的搜索索引和數據記錄都可被構造,使得將4字節的指針定位在存儲器4字節邊界上。例如,節點分枝指針724可以包含4字節(或更小的)的指向節點730的指針,并且可以存儲在可被4整除(即4字節邊界,或4N)的存儲器地址上。結果,數據庫700的修改可以通過利用單個不可中斷操作更新指向對齊的地址的指針來完成,該單個不可中斷操作包括例如將新指針寫到搜索索引,比如TST節點,或將新指針寫到數據記錄。
圖8是圖解說明根據本發明的實施例的另一個數據結構體系結構的詳細框圖。如上面的那樣,數據庫800也可以被組織成單個、可搜索的數據表示。數據集更新可以被連續地合并到數據庫800中,并且可以對相關數據庫記錄物理執行刪除或修改以便例如為后續的添加或修改釋放存儲器104中的空間。單個、可搜索的表示極其適合對大型數據集的大小以及高搜索與更新率的換算,并且消除了對在多個搜索引擎計算機周期性地重新創建、傳輸和重新載入快照文件的需要。
其它搜索索引結構可以用于訪問記錄數據。在一個實施例中,數據庫800可以使用按有序訪問關鍵字樹(即“OAK樹”)組織的可替換的有序的搜索索引。數據庫800可以包括,例如多個可變長度的搜索節點801、多個可變長度的關鍵字記錄802和多個可變長度的終結數據記錄803。搜索節點801可以包括如上面所述的各種類型的信息,比如搜索關鍵字、指向其它搜索節點的指針、指向關鍵字記錄的指針等。在一個實施例中,多個搜索節點801可以包括包含有搜索關鍵字(例如字符串)的分段以及指向其它搜索節點或關鍵字記錄的指針的垂直和平行的節點。垂直節點可以包括,例如至少一個搜索關鍵字、或字符、指向多個搜索節點801內的平行節點的指針、指向多個關鍵字記錄802內的關鍵字記錄的指針等。平行節點可以包括,例如至少兩個搜索關鍵字、或字符、指向多個搜索節點801內的垂直節點的指針、指向多個搜索節點801內的水平節點的指針、指向多個關鍵字記錄802內的關鍵字記錄的指針等。一般的,垂直節點可以包括表示搜索關鍵字分段(例如字符串)的一系列關鍵字(例如字符),而平行節點可以包括存在于搜索關鍵字分段(例如字符串)中的特定位置的各種關鍵字(例如字符)。
在一個實施例中,多個搜索節點801可以包括垂直節點810,垂直節點820和水平節點830。垂直節點810可以包括,例如2比特的節點類型811(例如“10”),38比特的地址812,8比特的長度813(例如“8”),8比特的第一字符814(例如“i”)和8比特的第二字符815(例如“null”)。在這個例子中,地址812可以指向搜索樹中的下一個節點,例如垂直節點820。在一個實施例中,38比特的地址812可以包括1比特的終結/節點的指示符和引用存儲器104的1T字節(~1012字節)地址空間中的8字節字之一的37比特的偏移量地址。從而,垂直節點810可以是8字節(64比特)長,并且有利地,可以定位在存儲器104內的8字節字邊界上。一般地,多個搜索節點801中的每個垂直節點可以定位在存儲器104內的8字節字邊界上。
垂直節點可以包括多字符,搜索關鍵字分段(例如字符串)。一般地,沒有相關聯的關鍵字數據記錄的搜索關鍵字可以被壓縮成一單個垂直節點,以便有效地減少多個搜索節點801中所要求的垂直節點的數量。在一個實施例中,垂直節點810可以在搜索關鍵字分段內的兩個字符之上包括對于每個附加字符的8個比特,例如8比特的字符816-1、816-2...816-N(在虛輪廓中示出)。有利地,垂直節點810可以根據位于字符串分段內的附加字符數目來被填充到存儲器104內的64比特的邊界。例如,如果9個字符將包括到垂直節點810中,那么字符1和2可以分別被分配給第一字符814和第二字符815,并且對應于字符3到9的附加字符信息的56個比特可以被附加到垂直節點810上。可以包括附加的8個比特填充值以便使附加字符信息對齊8字節字邊界。
類似地,垂直節點820可以包括,例如2比特的節點類型821(例如“10”),38比特的地址822,8比特的長度823(例如“8”),8比特的第一字符824(例如“a”)和8比特的第二字符825(例如“null”)。在這個例子中,地址822可以指向搜索樹中的下一個節點,例如水平節點830。從而,垂直節點820可以是8個字節長,并且有利地,可以定位在存儲器104中的8字節字邊界上。當然,如果需要的話,附加信息也可以被包括在垂直節點820中,如上面所述引用垂直節點810。
水平節點830可以包括,例如2比特的節點類型831(例如“01”),38比特的第一地址832,8比特的地址計數833(例如2),8比特的第一字符834(例如“·”),8比特的最后字符835(例如“w”),可變長度的位圖836,和38比特的第二地址837。在這個例子中,第一字符834可以包括一單個字符“·”,表示由垂直節點810和820定義的搜索關鍵字分段“la”,而最后字符831可以包括一單個字符“w”,表示由垂直節點810和820定義的搜索關鍵字分段“law”,以及水平節點830的最后字符835。第一地址832可以指向和搜索關鍵字分段“la”相關聯的關鍵字數據記錄840,而第二地址837可以指向和搜索關鍵字分段“law”相關聯的關鍵字數據記錄850。
位圖836可以有利地表示哪個關鍵字(例如字符)由水平節點830引用。位圖836內的一個比特位置中的“1”表示該關鍵字或字符由水平節點830引用,而位圖836內的一個比特位置中的“0”表示該關鍵字或字符不由水平節點830引用。一般地,位圖836的長度可以取決于在第一字符834和最后字符835之間且包括這些邊界字符的連續關鍵字或字符的數量。例如,如果第一字符834是“a”并且最后字符835是“z”,那么位圖836是26比特長,其中每個比特對應于包括“a”到“z”之間的一個字符。在這個例子中,附加的38比特的地址將被附加到對應于位圖836內表示的每一個字符的平行節點830的末尾。這些38比特的地址的每一個以及位圖836可以被填充,以便使每一個數量對齊存儲器104中的8字節字邊界。在一個實施例中,8比特的ASCII字符集可以被用作搜索關鍵字空間,使得位圖836可以是256比特長(即28比特或32個字節)。在圖8中描述的例子中,由于特定的引用字符“·”和“2”的地址計數833,位圖836可以是2個比特長,并且在對應于最后字符835的每個比特位置中包括一個“1”。
在一個實施例中,如所討論的參考關鍵字數據記錄750(圖7),關鍵字數據記錄850可以包括,例如可變長度的關鍵字853和至少一個終結數據指針。如圖8所描述的,關鍵字數據記錄850包括兩個終結數據指針,終結數據指針857和終結數據指針858。關鍵字數據記錄850可以在其前頭加上12比特的關鍵字長度851和12比特的終結指針計數/狀態852,并且可以包括填充值(為清楚起見沒有示出)以便使終結數據指針857和終結數據指針858對齊存儲器104中的8字節邊界。終結數據指針857和終結數據指針858可以分別包含10比特的終結數據類型和其它數據,例如在二進制記錄搜索中使用的長度、狀態或者數據。終結數據指針857和終結數據指針858可以根據用于更快檢索特定資源記錄(例如終結數據記錄860和終結數據記錄870)的終結數據類型來存儲。
在另一個實施例中,并如參考關鍵字數據記錄740所討論的(圖7),關鍵字數據記錄840可以包括嵌入的終結數據846,而不是終結數據記錄指針。例如,關鍵字數據記錄840可以包括關鍵字長度841、終結指針計數842、可變長度的關鍵字843、嵌入記錄元素844的數量,接著是嵌入記錄元素844的數量中的每一個的記錄元素長度845(例如,以字節為單位)和嵌入記錄數據846(例如,字符串、字節序列等)。
在另一個實施例中,并如參考終結數據記錄760所討論的(圖7),終結數據記錄860,例如可以包括12比特的長度861,4比特的狀態,和可變長度的字符串862(例如一個IP地址)。可替換地,可變長度的字符串862可是字節序列。終結數據記錄860可以包括填充值(為清楚起見沒有示出)以便使每個終結數據記錄對齊存儲器104中的8字節邊界。可替換地,終結數據記錄860可以包括對4字節邊界的填充值(為清楚起見沒有示出),或終結數據記錄860可以不包括任何填充值。存儲器管理算法通常可以確定終結數據記錄860是否填充了8字節、4字節或0字節邊界。類似地,終結數據記錄870可以包括12比特的長度871、4比特的狀態和可變長度的字符串872(例如一個IP地址)。
一般地,諸如OAK樹的搜索索引和數據記錄都可被構造,使得8字節的指針定位在存儲器中的8字節邊界上。例如,垂直節點810可以包含8字節(或更小的)的指向垂直節點820的指針,并且可以存儲在可被8整除(即8字節邊界,或8N)的存儲器地址上。類似地,諸如OAK樹的搜索索引和數據記錄都可被構造,使得4字節的指針定位在存儲器的4字節邊界上。結果,數據庫800的修改可以利用單個不可中斷操作通過更新指向對齊的地址的指針來完成,該單個不可中斷操作包括例如將新指針寫到搜索索引,比如OAK樹節點,或將新指針寫到數據記錄。
以上參考圖8討論的不同實施例顯示了很多的優點。例如,OAK樹數據結構是極其空間有效的和8比特清除的。正則表達式搜索可以被用于搜索包括多個字符的字符串分段的垂直節點,因為8比特第一字符(例如第一字符814),8比特第二字符(例如第二字符815)以及任何附加的8比特字符(例如附加字符816-1...816-N)可以連續地定位在垂直節點(例如垂直節點810)中。搜索失敗可以很快地被發現,并且可以需要穿過不多于N個節點來搜索N字符長的搜索字符串。
圖9是圖解說明根據本發明的實施例的用于搜索和并發更新數據庫而不使用數據庫鎖或訪問控制的方法的頂層流程圖。
可以創建一個更新線程和多個搜索線程(900)。在一個實施例中,系統100可以產生單個更新線程,以合并從例如WAN 124上的OLTP服務器140-1接收的對本地數據庫的更新。在其它實施例中,系統100可以接收來自WAN 124上的OLTP服務器140-1...140-S和來自WAN 124或LAN 122上的多個網絡計算機120-1...120-N的更新。系統100還可以響應從多個網絡計算機120-1...120-N接收的每個對話請求來產生搜索線程。例如,一個管理器線程可以為從多個網絡計算機120-1...120-N傳送的對話請求輪詢與一個或多個網絡接口114-1...114-O相關聯的一個或多個控制端口。一旦來自特定網絡計算機120-1...120-N的對話請求被接收,該管理線程可以產生一個搜索線程并將該搜索線程和該特定網絡計算機(例如PE)相關聯。
在一個可替換實施例中,系統100可以產生多個搜索線程而不用為來自多個網絡計算機120-1...120-N的對話請求輪詢。在這個實施例中,該搜索線程可以不和特定網絡計算機相關聯,并且可以均勻分布在多個處理器102-1...102-P中。或者,該搜索線程可以在多個處理器102-1...102-P的子集上執行。搜索線程的數量可以不必和網絡計算機的數量(比如N)匹配。
多個搜索查詢可以通過網絡被接收(910)。在一個實施例中,多個網絡計算機120-1...120-N可以通過LAN 122或可替換的WAN124向系統100發送多個搜索查詢。該多個搜索查詢可以包括,例如搜索項或關鍵字,以及跟每個查詢相關聯的狀態信息(例如查詢源地址,協議類型等)。狀態信息可以由系統100顯式地維護,或可替換地,提供狀態信息句柄。在優選實施例中,多個網絡計算機120-1...120-N的每一個可以將預先確定數量的搜索查詢多路復用成用于傳輸給系統100的單個網絡包(例如如圖2描述的請求超級包)。
每個搜索查詢可以被分配給多個搜索線程之一用于處理(920)。在一個實施例中,每個搜索線程可以和多個網絡計算機120-1...120-N之一相關聯,并且從那個特定網絡計算機接收的所有搜索查詢可以被分配給搜索線程(920)。換句話說,一個搜索線程可以處理從單個網絡計算機(比如單個PE)到達的所有搜索查詢。在一個實施例中,每個搜索線程可以從單個多路復用的網絡包(例如,如圖2描述的請求超級包220)中提取單個搜索查詢,或可替換地,該提取可以由不同進程或線程執行。
在另一個實施例中,從多個網絡計算機120-1...120-N中的每一個接收的搜索查詢可以被分配給不同的搜索線程(920)。在這個實施例中,該多線程分配可以基于一個優化的分布函數,該函數可以結合多種系統參數,包括例如處理器裝載。當然,將搜索查詢分配給搜索線程可以隨時間而變化,根據各種系統參數,包括處理器可利用性、系統部件性能等。各種機制可以用作將搜索查詢傳送給系統100內分配的搜索線程,例如共享存儲器,內部處理消息,令牌,信號燈等。
每個搜索線程可以根據分配的搜索查詢來搜索數據庫(930)。搜索數據庫可以依據數據庫的基礎結構。
參考圖4中描述的的數據庫實施例,數據庫400可以用搜索關鍵字來搜索(930)。接著可確定對應于該搜索關鍵字的數據記錄(例如數據庫記錄420)。參考圖5中描述的的數據庫實施例,0可以首先用搜索關鍵字來搜索look-aside文件52(930),并且如果沒有確定匹配,那么可搜索快照文件510(930)。接著可以確定對應于該搜索關鍵字的數據記錄。
參考圖6中描述的數據庫實施例,可以首先用搜索關鍵字來搜索域名數據610(930),并且接著可確定對應于該搜索關鍵字的名字服務器數據630中的資源數據。例如,對于搜索關鍵字“la.com”,可用域名數據610中的域名記錄620來確定匹配。提取合適的信息,包括例如名字服務器指針626。那么,可用名字服務器指針626索引合適的名字服務器記錄640,并且可提取名字服務器網絡地址647。
參考圖7中描述的的數據庫實施例,可用搜索關鍵字搜索TST(930),由此確定資源數據。例如,對于搜索關鍵字“law.com”,可以搜索搜索節點710(930),并且可用節點730來確定匹配。可提取關鍵字指針736,由此可確定關鍵字數據記錄750。接著可識別終結數據指針752的數量,并且可提取每個終結數據指針。例如,終結數據指針757可以引用終結數據記錄760,并且終結記錄指針758可以引用終結數據770。接著可以分別利用長度761和771從每個終結數據記錄中提取可變長度的資源數據,例如名字服務器網絡地址762和名字服務器網絡地址772。
參考圖8中描述的數據庫實施例,可用搜索關鍵字來搜索OAK樹(930),由此確定資源數據。例如,對于搜索關鍵字“law.com”,可以搜索搜索節點810(930),并且可用節點830來確定匹配。可提取第二地址837,由此確定關鍵字數據記錄850。接著可識別終結數據指針852的數量,并且可提取每個終結數據指針。例如,終結數據指針857可以引用終結數據記錄860,并且終結數據指針858可以引用終結數據870。接著可以分別利用長度861和871從每個終結數據記錄中提取可變長度的資源數據,例如名字服務器網絡地址862和名字服務器網絡地址872。
每個搜索線程可以創建對應于分配的搜索查詢的多個搜索應答(940)。如果沒有為特定搜索關鍵字找到匹配,那么應答可以包括合適的指示,例如空字符。對于域名解析,例如,搜索關鍵字可以是“law.com”并且對應的資源數據可以是“180.1.1.1”。多于一個的名字服務器網絡地址可以和一個搜索關鍵字相關聯,在這個情況下,可以確定多于一個的名字服務器網絡地址。
可以通過網絡發送應答(950)。在一個實施例中,每個搜索線程可以將合適的應答多路復用成對應于包含原始查詢的單個網絡包(例如請求超級包220)的單個網絡包(例如響應超級包240)。或者,不同的進程或線程可以將合適的應答多路復用成單個網絡包。接著響應網絡包可以通過LAN 122或可替換的WAN 124被發送到多個網絡計算機120-1...120-N中的合適的網絡計算機(950)。在一個實施例中,響應包可以被發送到發出請求包的相同網絡計算機,而在另一個實施例中,響應包可以被發送到不同的網絡計算機。
更新線程可以接收網絡上的新信息(960)。在一個實施例中,新信息可以例如通過WAN 124從OLTP服務器140-1發送到系統100。在其它實施例中,系統100可以通過WAN 124接收來自OLTP服務器140-1...140-S的更新,和通過WAN 124或LAN 122接收來自多個網絡計算機120-1...120-N的更新。在DNS解析實施例中,例如,新信息可以包括新域名數據、新名字服務器數據、用于存在的域名的新名字服務器等。可替換地,新信息可以表示可從數據庫中刪除域名、名字服務器、名字服務器網絡地址等。一般地,包括在數據庫中的任何信息都可被適當地添加、修改或刪除。
更新線程可以在數據庫中創建包含新信息的新元素(970)。一般地,對在數據庫的存在的元素內包含的信息的修改是通過根據存在的元素來創建新元素,然后修改新元素以包括該新信息來體現。在這個過程中,在該新元素被確認到數據庫前,新元素對于正在系統100上執行的搜索線程或進程是不可見的。一般地,對數據庫的添加可以用類似的方式完成,而不需要使用在存在的元素內包含的信息。在一個實施例中,從數據庫中刪除一個存在的元素可以通過添加新的、顯式的“刪除”元素到數據庫來完成。在另一個實施例中,從數據庫刪除一個存在的元素可以通過用適當的指示符(比如空指針等)重寫指向存在的元素的指針來完成。在這個實施例中,更新線程在數據庫中不創建包含新信息的新元素。
在DNS解析實施例中,例如,新信息可以包括被添加到數據庫的新域名。在這個例子中,為了簡明,該新域名可以引用存在的名字服務器。參考圖6,用于新域名記錄615的存儲器空間可以從和域名記錄611相關聯的存儲器池中分配,或可替換地,從和域名數據610相關聯的通用存儲器池中分配。該新域名可以被標準化并且拷貝到新域名記錄615,并且指向存在的名字服務器(例如名字服務器記錄655)的指針可以被確定并且拷貝到新域名記錄615。其它信息可以被計算并且添加到新域名記錄615;例如多個名字服務器、鏈指針等。在更復雜的例子中,新信息可以包括具有對應的資源數據的新搜索關鍵字。
參考圖7,可以首先創建新搜索節點705以及新關鍵字數據記錄780。在這個例子中,新搜索節點705可以包括在第一位置中的比較字符(“m”),它比在存在的搜索節點710的第一位置中的比較字符(“l”)大。結果,搜索節點705可以被插入到同搜索節點710一樣的“level”處的TST中(即,第一字符位置)。在搜索節點705被確認到數據庫之前,搜索節點710的4字節的“大于”指針715可以包含一個“空“指針。搜索節點705還可以包含4字節的關鍵字指針706,其包含有指向新關鍵字數據記錄780的40比特的指針。關鍵字數據記錄780可以包括關鍵字長度781(例如“5”)和類型782(例如指明嵌入資源數據),可變長度的關鍵字783(例如“m.com”),多個嵌入資源784(例如“1”),資源長度785(例如“g”),以及可變長度的資源字符串786或字節序列(例如“180.1.1.1”)。在一個實施例中,可以從與TST節點701相關聯的存儲器池中為搜索節點705分配存儲器空間,而可從與多個關鍵字數據記錄702相關聯的存儲器池中為關鍵字數據記錄770分配存儲器空間。
參考圖8,可以首先創新搜索節點890以及新關鍵字數據記錄880。在這個例子中,新搜索節點890可以是水平節點,包括例如2比特的節點類型(例如“01”),38比特的第一地址892,8比特的地址計數893(例如2),8比特的第一字符894(例如“l”),8比特的最后字符895(例如“m”),可變長度的位圖896和38比特的第二地址897。第一地址892可以指向垂直節點820,在“l...”搜索字符串路徑中的下一個垂直節點,而第二地址897可以指向和搜索關鍵字分段“m”相關聯的關鍵字數據記錄880。關鍵字數據記錄880可以包括關鍵字長度881(例如“5”)和類型882(例如指明嵌入資源數據),可變長度的關鍵字883(例如“m.com”),多個嵌入資源884(例如“1”),資源長度885(例如“g”),以及可變長度的資源字符串886或字節序列(例如“180.1.1.1”)。在一個實施例中,可從與多個搜索節點801相關聯的存儲器池中為搜索節點890分配存儲器空間,而可從與多個關鍵字數據記錄802相關聯的存儲器池中為關鍵字數據記錄880分配存儲器空間。
更新線程可以利用單個不可中斷操作將指針寫到數據庫(980)。一般地,新元素在將指向新元素的指針寫到數據庫的適當位置的瞬間被確認到數據庫中(即,對于搜索線程或進程變為可見)。如上所討論的,可以在存儲器中對齊該適當的位置,使得單個操作包括適當長度的單個存儲指令。在實施例中,可以通過用適當的指示符(例如“null”指針等)重寫指向存在的元素的指針的瞬間,從數據庫刪除該存在的元素(即,對于搜索線程或進程變為可見)。又一次,可在存儲器中對齊該適當的位置,使得單個操作包括適當長度的單個存儲指令。
參考圖6,對應于域名記錄620的8字節的指針可以被寫到散列表612(例如元素613)中。重要地,該散列表入口在存儲器104的8字節的邊界上對齊,以保證單個8字節存儲指令用于更新這個值。參考圖7,對應于新搜索節點705的4字節的指針可以被寫到搜索節點710中的4字節的“更大”節點指針715。重要地,該節點指針715在存儲器104的4字節的邊界上對齊,以保證單個4字節存儲指令用于更新這個值。參考圖8,多個搜索節點801也可以包括樹頂地址899,該地址可以在存儲器104的8字節的字邊界上對齊并且引用多個搜索節點801中的第一節點(即,例如垂直節點810)。可以利用單個存儲指令將對應于新搜索節點890的8字節的指針寫到樹頂地址899。在這些實施例中的每一個中,剛好在存儲指令之前,該新數據對于搜索線程是不可見的,而剛好存儲指令之后,該新數據對于搜索線程是可見的。這樣,通過單個不可中斷操作,新數據可以被確定到數據庫而不需使用數據庫鎖或訪問控制。
在一個實施例中,更新線程可以在指針被寫到(980)數據庫之后物理上刪除(990)存在的元素。有利地,對于數據庫中被修改或被刪除的存在的元素,從存儲器104中物理刪除這些元素可以被延遲,以保持正在進行的搜索的一致性。例如,在修改了存在的元素以及對應的新元素被確認到數據庫之后,從存儲器104中物理刪除這些元素可以被延遲,使得具有剛在新元素被確認到數據庫之前獲得的結果的存在的搜索線程可以繼續使用數據的前一個狀態。類似地,在已經從數據庫中刪除一個存在的元素之后,從存儲器104中物理刪除該存在的元素可以被延遲,使得具有剛在從數據庫中刪除該存在的元素之前獲得的結果的該存在的搜索線程可以繼續使用數據的前一個狀態。該更新線程可以在存在的元素被修改、或刪除之前開始的所有搜索線程結束之后物理地刪除(990)存在的元素。
潛在的復雜性可以由本發明實施例相關的方法與系統100的各種體系結構特性的相互作用而出現。例如,其上運行更新線程的處理器(例如處理器102-1,102-2等)可以包括支持無序指令執行的硬件。在另一個例子中,系統100可以包括可生成一系列指令的、與本發明實施例相關的優化編譯器,這些指令已經被最佳地重新安排以開發處理器內部體系結構(例如處理器102-1,102-2等)的并行性。本領域的技術人員隨時承認還有許多其它的復雜性。例如通過創建在新元素的創建(970)和到數據庫的指針寫入(980)之間的相關性,可以消除由無序指令執行引起的數據危險性。
在一個實施例中,可以通過插入附加算法操作,比如異或(XOR)指令到由處理器102-1執行的指令序列中,以便在執行到數據庫的指針寫入(980)之前強制執行與新元素的創建(970)相關聯的指令或者完成,來建立這些相關性。例如,存儲器104中對應于新元素的位置的內容可以和存儲器104中對應于指向該新元素的指針的位置的內容進行異或。結果,新元素的地址可以被寫到(980)存儲器104,以確認該新元素到數據庫。本領域技術人員隨時明白克服這些復雜性的許多方法。
在這里詳細地描述和示例了本發明的幾個實施例。但是,需要理解,本發明的修改和變化可由上述的教授覆蓋,并且都在所附的權利要求的范圍內而沒有偏離本發明的精神和意圖范圍。
權利要求
1.一種多線程網絡數據庫系統,包括與網絡連接的至少一個處理器;和與所述處理器連接的存儲器,該存儲器包括數據庫和指令,所述處理器執行該指令以創建更新線程和多個搜索線程;將通過網絡接收的多個搜索查詢的每一個分配到多個搜索線程之一;對于每個搜索線程根據分配的搜索查詢搜索數據庫,創建對應于分配的搜索查詢的多個搜索應答,并且通過網絡發送多個搜索應答;并且對于更新線程根據通過網絡接收的新信息創建新元素,并且在不需要限制多個搜索線程對數據庫訪問的情況下,利用單個不可中斷操作將指向新元素的指針寫到數據庫。
2.如權利要求1所述系統,其中單個不可中斷操作是存儲指令。
3.如權利要求1所述系統,還包括對于更新線程將所述指針寫到數據庫之后,從存儲器物理地刪除存在的元素。
4.如權利要求2所述系統,其中存儲指令將4個字節寫到位于4字節邊界上的存儲器地址。
5.如權利要求2所述系統,其中存儲指令將8個字節寫到位于8字節邊界上的存儲器地址。
6.如權利要求2所述系統,其中所述處理器具有至少n個字節大小的字,所述存儲器具有至少n個字節寬并且該存儲指令將n個字節寫到位于n字節邊界的存儲器地址。
7.如權利要求1所述系統,其中多個搜索查詢在單個網絡包中接收。
8.如權利要求1所述系統,其中多個搜索應答在單個網絡包中發送。
9.如權利要求1所述系統,其中所述限制訪問包括數據庫鎖定。
10.如權利要求1所述系統,其中所述限制訪問包括自旋鎖定。
11.如權利要求10所述系統,其中所述自旋鎖定包括利用至少一個信號燈。
12.如權利要求11所述系統,其中信號燈是互斥信號燈。
13.如權利要求1所述系統,還包括多個處理器和對稱多處理操作系統。
14.如權利要求13所述系統,其中多個搜索線程至少每秒執行100,000個搜索。
15.如權利要求14所述系統,其中更新線程至少每秒執行10,000個更新。
16.如權利要求15所述系統,其中更新線程每秒執行50,000到130,000個更新。
17.如權利要求1所述系統,其中將指向新元素的指針寫到搜索索引。
18.如權利要求17所述系統,其中搜索索引是TST。
19.如權利要求17所述系統,其中搜索索引是散列表。
20.如權利要求1所述系統,其中將指向新元素的指針寫到數據庫中的數據記錄。
21.一種搜索和并發更新數據庫的方法,包括創建更新線程和多個搜索線程;將通過網絡接收的多個搜索查詢中的每一個分配到多個搜索線程之一;對于每個搜索線程根據分配的搜索查詢搜索數據庫,創建對應于分配的搜索查詢的多個搜索應答,并且通過網絡發送多個搜索應答;并且對于更新線程根據通過網絡接收的新信息創建新元素,并且在不需要限制多個搜索線程對數據庫訪問的情況下,利用單個不可中斷操作將指向新元素的指針寫到數據庫。
22.如權利要求21所述方法,其中單個不可中斷操作是存儲指令。
23.如權利要求21所述方法,還包括對于更新線程將所述指針寫到數據庫之后,物理刪除存在的元素。
24.如權利要求22所述方法,其中存儲指令將4個字節寫到位于4字節邊界上的存儲器地址。
25.如權利要求22所述方法,其中存儲指令將8個字節寫到位于8字節邊界上的存儲器地址。
26.如權利要求21所述方法,其中多個搜索查詢在單個網絡包中接收。
27.如權利要求21所述方法,其中多個搜索應答在單個網絡包中發送。
28.如權利要求21所述方法,其中所述限制訪問包括數據庫鎖定。
29.如權利要求21所述方法,其中所述限制訪問包括自旋鎖定。
30.如權利要求29所述方法,其中所述自旋鎖定包括利用至少一個信號燈。
31.如權利要求30所述方法,其中信號燈是互斥信號燈。
32.如權利要求21所述方法,其中多個搜索線程至少每秒執行100,000個搜索。
33.如權利要求32所述方法,其中更新線程至少每秒執行10,000個更新。
34.如權利要求33所述方法,其中更新線程每秒執行50,000到130,000個更新。
35.如權利要求21所述方法,其中將指向新元素的指針寫到搜索索引。
36.如權利要求35所述方法,其中搜索索引是TST。
37.如權利要求21所述方法,其中將指向新元素的指針寫到數據庫中的數據記錄。
38.一種計算機可讀介質,包括由至少一個處理器執行以實現搜索和并發更新數據庫的方法的指令,該方法包括創建更新線程和多個搜索線程;將通過網絡接收的多個搜索查詢中的每一個分配到多個搜索線程之一;對于每個搜索線程根據分配的搜索查詢搜索數據庫,創建對應于分配的搜索查詢的多個搜索應答,并且通過網絡發送多個搜索應答;并且對于更新線程根據通過網絡接收的新信息創建新元素,并且在不需要限制多個搜索線程對數據庫訪問的情況下,利用單個不可中斷操作將指向新元素的指針寫到數據庫。
39.如權利要求38所述計算機可讀介質,其中單個不可中斷操作是存儲指令。
40.如權利要求38所述計算機可讀介質,還包括對于更新線程將所述指針寫到數據庫之后,物理刪除存在的元素。
41.如權利要求39所述計算機可讀介質,其中存儲指令將4個字節寫到位于4字節邊界上的存儲器地址。
42.如權利要求39所述計算機可讀介質,其中存儲指令將8個字節寫到位于8字節邊界上的存儲器地址。
43.如權利要求38所述計算機可讀介質,其中多個搜索查詢在單個網絡包中接收。
44.如權利要求38所述計算機可讀介質,其中多個搜索應答在單個網絡包中發送。
45.如權利要求38所述計算機可讀介質,其中所述限制訪問包括數據庫鎖定。
46.如權利要求38所述計算機可讀介質,其中所述限制訪問包括自旋鎖定。
47.如權利要求46所述計算機可讀介質,其中所述自旋鎖定包括利用至少一個信號燈。
48.如權利要求47所述計算機可讀介質,其中信號燈是互斥信號燈。
49.如權利要求38所述計算機可讀介質,其中將指向新元素的指針寫到搜索索引。
50.如權利要求49所述計算機可讀介質,其中搜索索引是TST。
51.如權利要求38所述計算機可讀介質,其中將指向新元素的指針寫到數據庫中的數據記錄。
52.一種搜索和并發更新數據庫的方法,包括創建更新線程和多個搜索線程;將通過網絡接收的多個搜索查詢中的每一個分配到多個搜索線程之一;對于每個搜索線程根據分配的搜索查詢搜索數據庫,創建對應于分配的搜索查詢的多個搜索應答,并且通過網絡發送多個搜索應答;并且對于更新線程在不需要限制多個搜索線程對數據庫訪問的情況下,利用單個不可中斷操作將指向存在的元素的指針寫到數據庫。
53.如權利要求52所述方法,其中指針包括空指針。
54.如權利要求52所述方法,還包括對于更新線程將所述指針寫到數據庫之后,物理刪除存在的元素。
全文摘要
本發明描述了對于大型數據庫系統利用并發更新而無需使用數據庫鎖或訪問控制的高速數據庫搜索的方法和系統。系統(100)包括與總線(101)連接的多個處理器(102-1…102-p);多個二級存儲器緩存(103-1...103-p);存儲器(即RAM)(104);只讀存儲器(ROM)(106);存儲設備(108);顯示器(即LCD監視器);輸入設備(112);可發送/接收代表各種信息的電子信號的網絡接口(114-1…114-O);廣域網(124);局域網(LAN)(122);多個網絡計算機(120-1…120-N前端協議引擎);和接收更新業務量到數據庫(142-1…142-S)的多個在線事務處理(OLTP)服務器(140-1…140-S)。
文檔編號G06F9/46GK1610877SQ02826619
公開日2005年4月27日 申請日期2002年11月1日 優先權日2001年11月1日
發明者A·N·巴洛 申請人:弗里塞恩公司