專利名稱:事務(wù)處理存儲器管理器的制作方法
技術(shù)領(lǐng)域:
本公開申請涉及計算機(jī)系統(tǒng)。更具體地說,本公開申請涉及一種用于為大型數(shù)據(jù)庫系統(tǒng)提供高速數(shù)據(jù)庫搜索與同時更新的方法和系統(tǒng)。
背景技術(shù):
隨著互聯(lián)網(wǎng)繼續(xù)其迅速增長,以合理的價格用于根和通用頂級域(generictop level domain)(gTLD)服務(wù)器的定標(biāo)域名服務(wù)(scaling domain name service)(DNS)解析變得越來越困難。A根服務(wù)器(即a.root-server.net)保存并將互聯(lián)網(wǎng)名稱空間根區(qū)域文件分配給在地理上分布在全世界的12個次級根服務(wù)器(即,b.root-server.net,c.root-server.net,等等),而相應(yīng)的gTLD服務(wù)器(即,a.gtld-servers.net,b.gtld-servers.net,等等)類似地被分配并支持頂級域(例如,*.com,*.net,*.org,等等)。與查詢率的持續(xù)增長相關(guān)的不斷增加的數(shù)據(jù)量正在迫使全部重新考慮在隨后的若干年內(nèi)對于根和gTLD DNS業(yè)務(wù)所需要的硬件和軟件基礎(chǔ)設(shè)施。標(biāo)準(zhǔn)“bind(綁定)”軟件分配的典型單服務(wù)器安裝已經(jīng)不足以滿足A根的需要,并很快將甚至不能符合gTLD需要。隨著公用交換電話網(wǎng)絡(luò)(PSTN)和互聯(lián)網(wǎng)的融合,存在通用、高性能搜索機(jī)制在PSTN的SS7信令網(wǎng)絡(luò)上提供通常與業(yè)務(wù)控制點(SCP)有關(guān)的特性的機(jī)會,因為提供跨越PSTN和互聯(lián)網(wǎng)的新的先進(jìn)業(yè)務(wù),包括先進(jìn)智能網(wǎng)(AIN)、基于網(wǎng)際協(xié)議的語音(VoIP)業(yè)務(wù)、地理定位業(yè)務(wù)等等。
圖1是根據(jù)本發(fā)明一種實施例的系統(tǒng)方框圖;圖2是圖示根據(jù)本發(fā)明一種實施例的消息數(shù)據(jù)結(jié)構(gòu)的詳細(xì)方框圖;圖3是圖示根據(jù)本發(fā)明一種實施例的消息延遲數(shù)據(jù)結(jié)構(gòu)構(gòu)造的詳細(xì)方框圖;圖4是圖示根據(jù)本發(fā)明一種實施例的通用數(shù)據(jù)庫結(jié)構(gòu)的詳細(xì)方框圖;圖5是圖示根據(jù)本發(fā)明一種實施例的通用數(shù)據(jù)庫結(jié)構(gòu)的詳細(xì)方框圖;圖6是圖示根據(jù)本發(fā)明一種實施例的通用數(shù)據(jù)庫結(jié)構(gòu)的詳細(xì)方框圖;圖7是圖示根據(jù)本發(fā)明一種實施例的通用數(shù)據(jù)庫結(jié)構(gòu)的詳細(xì)方框圖;圖8是圖示根據(jù)本發(fā)明一種實施例的通用數(shù)據(jù)庫結(jié)構(gòu)的詳細(xì)方框圖;圖9是圖示根據(jù)本發(fā)明一種實施例的用于搜索和同時更新數(shù)據(jù)庫的方法的頂級流程圖;圖10是圖示根據(jù)本發(fā)明一種實施例的用于搜索和同時更新數(shù)據(jù)庫的方法的頂級流程圖。
具體實施例方式
本發(fā)明的實施例提供一種用于大型數(shù)據(jù)庫系統(tǒng)的高速數(shù)據(jù)庫搜索與同時更新的方法和系統(tǒng)。具體而言,可以在網(wǎng)絡(luò)上接收多個搜索查詢,可以搜索數(shù)據(jù)庫,并可以在網(wǎng)絡(luò)上發(fā)送多個搜索應(yīng)答。在搜索數(shù)據(jù)庫的同時,可以在網(wǎng)絡(luò)上接收新信息,并可以基于新信息創(chuàng)建多個新的數(shù)據(jù)庫元素(element),并可以將修改位(dirty bit)設(shè)置在每個新的數(shù)據(jù)庫元素內(nèi)??梢允褂脝蝹€不可中斷操作將指向每個新的數(shù)據(jù)庫元素的指針寫入數(shù)據(jù)庫,并可以清除每個新的數(shù)據(jù)庫元素內(nèi)的修改位。
圖1是圖示根據(jù)本發(fā)明一種實施例的系統(tǒng)的方框圖。通常,系統(tǒng)100可裝備(host)一大型存儲器駐留數(shù)據(jù)庫,接收搜索請求并在網(wǎng)絡(luò)上提供搜索響應(yīng)。例如,系統(tǒng)100可以是對稱的多處理(SMP)計算機(jī),例如由紐約的Armonk的國際商業(yè)機(jī)器公司制造的IBM RS/6000M80或S80、加利福尼亞州的圣克來克的Sun微系統(tǒng)公司制造的Sun EnterpriseTM10000等等。系統(tǒng)100也可以是多處理器個人計算機(jī),例如加利福尼亞州的Palo Alto的惠普公司制造的CompaqProLiantTMML530(包括兩個英特爾奔騰III866MHz處理器)。系統(tǒng)100還可以包括多處理操作系統(tǒng),例如IBM AIX4、Sun SolarisTM8操作環(huán)境、Red HatLinux6.2、等等。系統(tǒng)100可以在網(wǎng)絡(luò)124上接收周期性更新,這可同時并入在數(shù)據(jù)庫內(nèi)。
在一種實施例中,系統(tǒng)100可包括耦合到總線101的至少一個處理器102-1。處理器102-1可包括內(nèi)部存儲器超高速緩存(例如L1超高速緩存,為了清楚未圖示)。輔助存儲器超高速緩存103-1(例如,L2超高速緩存、L2/L3超高速緩存等等)可駐留在處理器102-1和總線101之間。在一個優(yōu)選實施例中,系統(tǒng)100可包括耦合到總線101的多個處理器102-1、……、102-P。多個輔助存儲器超高速緩存103-1、……、103-P也可駐留在多個處理器102-1、……、102-P和總線101之間(例如監(jiān)聽結(jié)構(gòu)),或者可選擇地,至少一個輔助存儲器超高速緩存103-1可耦合到總線101(例如后備結(jié)構(gòu))。系統(tǒng)100可包括耦合到總線101的存儲器104,例如隨機(jī)存取存儲器(RAM),等等,用于存儲信息和將由多個處理器102-1、……、102-P執(zhí)行的指令。
存儲器104可存儲大型數(shù)據(jù)庫,例如用于將互聯(lián)網(wǎng)域名轉(zhuǎn)換成內(nèi)部網(wǎng)地址,用于將姓名或電話號碼轉(zhuǎn)換成網(wǎng)絡(luò)地址,用于提供和更新用戶簡檔數(shù)據(jù),用于提供和更新用戶出現(xiàn)數(shù)據(jù)、等等。有利地,數(shù)據(jù)庫的大小和每秒轉(zhuǎn)換的數(shù)量可以非常大。例如,存儲器104可包括至少64GB的RAM,并可以裝備有500M(即500×106)記錄域名數(shù)據(jù)庫、500M記錄用戶數(shù)據(jù)庫、450M記錄電話號碼可移植性數(shù)據(jù)庫、等等。
在示例性的64比特系統(tǒng)結(jié)構(gòu)上,例如包括耦合到至少64比特總線101和64比特存儲器104的至少一個64比特大型終端(big-endian)處理器102-1,可使用單個不可中斷操作將8字節(jié)指針值寫入8字節(jié)邊界上的存儲器地址(即可被八整除的存儲器地址,或者例如8N)。通常,輔助存儲器超高速緩存103-1的存在可簡單地延遲寫入存儲器104的8字節(jié)指針。例如,在一種實施例中,輔助存儲器超高速緩存103-1可以是在直接寫入(write-through)模式中操作的監(jiān)聽超高速緩存,所以單個8字節(jié)存儲指令可在沒有中斷的情況下并在僅兩個系統(tǒng)時鐘周期內(nèi)將八字節(jié)的數(shù)據(jù)從處理器102-1移動到存儲器104。在另一種實施例中,輔助存儲器超高速緩存103-1可以是在回寫模式中操作的監(jiān)聽超高速緩存,所以8字節(jié)指針可以首先被寫入到輔助存儲器超高速緩存103-1,其隨后可以在以后將該8字節(jié)指針寫入存儲器104,例如,當(dāng)將其中存儲有8字節(jié)指針的超高速緩存線被寫入存儲器104時(即,例如,當(dāng)特定的超高速緩存線或整個輔助存儲器超高速緩存被“沖洗”時)。
最后,從處理器102-1的角度來看,一旦將數(shù)據(jù)鎖存到處理器102-1的輸出引線上,在一個連續(xù)的不中斷的傳送中將所有八字節(jié)的數(shù)據(jù)寫入到存儲器104內(nèi),這可以由于輔助存儲器超高速緩存103-1的作用而被延遲,如果存在的話。從處理器102-2、……、102-P的角度來看,一旦將數(shù)據(jù)鎖存到處理器102-1的輸出引線上,則在一個連續(xù)的不中斷的傳送中將所有八字節(jié)的數(shù)據(jù)寫入到存儲器104內(nèi),這通過輔助存儲器超高速緩存103-1、……、103-P上的超高速緩存相干協(xié)議來實施,這可以延遲到存儲器104的寫入,如果存在的話。
然而,如果將8字節(jié)指針值寫入到存儲器104內(nèi)錯誤對準(zhǔn)的位置上,例如跨越8字節(jié)邊界的存儲器地址,則不能使用單個8字節(jié)存儲指令從存儲器102-1傳送所有八字節(jié)數(shù)據(jù)。相反,處理器102-1可發(fā)出兩個單獨的并且不同的存儲指令。例如,如果存儲器地址在8字節(jié)邊界之前的4字節(jié)開始(例如8N-4),則第一存儲指令將4個最高有效字節(jié)傳送給存儲器104(例如8N-4),而第二存儲指令將4個最低有效字節(jié)傳送給存儲器104(例如8N)。重要地,在這兩個單獨的存儲指令之間,處理器102-1可被中斷,或者處理器102-1可放松總線101對另一系統(tǒng)組件(例如處理器102-P等等)的控制。因此,駐留在存儲器104內(nèi)的指針值將是無效的,直到處理器102-1可完成第二存儲指令。如果另一個組件開始對這個存儲器位置的單個不可中斷的存儲器讀取,則該無效的值將作為可推測有效的值而被返回。
類似地,可使用單個不可中斷操作將新的4字節(jié)指針值寫入可被4整除的存儲器地址(例如4N)。注意,在上面討論的例子中,可使用單個存儲指令將4字節(jié)指針值寫入8N-4存儲器位置。當(dāng)然,如果將4字節(jié)指針值寫入跨越4字節(jié)邊界的位置,例如4N-2,則不能使用單個存儲指令將所有的四字節(jié)數(shù)據(jù)從處理器102-1傳送,并且在存儲器104內(nèi)駐留的指針值在一定的時間周期可能是無效的。
系統(tǒng)100還可以包括耦合到總線101的只讀存儲器(ROM)106或者其它靜態(tài)存儲設(shè)備,用于存儲靜態(tài)信息和用于處理器102-1的指令。諸如磁盤或光盤的存儲設(shè)備108可耦合到總線101,用于存儲信息和指令。系統(tǒng)100還可以包括耦合到總線101的顯示器110(例如LCD監(jiān)視器)和輸入設(shè)備112(例如鍵盤、鼠標(biāo)、跟蹤球、等等)。系統(tǒng)100可以包括多個網(wǎng)絡(luò)接口114-1、……、114-O,其可以發(fā)送和接收承載代表各種類型信息的數(shù)字?jǐn)?shù)據(jù)流的電、電磁或光信號。在一種實施例中,網(wǎng)絡(luò)接口114-1可耦合到總線101和局域網(wǎng)(LAN)122,而網(wǎng)絡(luò)接口114-O可耦合到總線101和廣域網(wǎng)(WAN)124。多個網(wǎng)絡(luò)接口114-1、……、114-O可支持各種網(wǎng)絡(luò)協(xié)議,包括諸如吉比特以太網(wǎng)(例如IEEE標(biāo)準(zhǔn)802.3-2002,于2002年出版)、光纖通道(例如ANSI標(biāo)準(zhǔn)X.3230-1994,于1994年出版)等等。多個網(wǎng)絡(luò)計算機(jī)120-1、……、120-N可耦合到LAN 122和WAN 124。在一種實施例中,LAN 122和WAN 124可以是物理上不同的網(wǎng)絡(luò),而在另一個實施例中,LAN 122和WAN 124可以經(jīng)由網(wǎng)絡(luò)網(wǎng)關(guān)或路由器(為了清楚而未圖示)??蛇x擇地,LAN 122和WAN 124可以是相同的網(wǎng)絡(luò)。
如上面所指出的,系統(tǒng)100可提供DNS解析(resolution)服務(wù)。在DNS解析實施例中,通??稍诰W(wǎng)絡(luò)傳送和數(shù)據(jù)查找功能之間劃分DNS解析服務(wù)。例如,系統(tǒng)100可以是為可在大型數(shù)據(jù)組上的數(shù)據(jù)查找而優(yōu)化的后端查找引擎(LUE),而多個網(wǎng)絡(luò)計算機(jī)120-1、……、120-N可以是為了網(wǎng)絡(luò)處理和傳送而優(yōu)化的多個前端協(xié)議引擎(PE)。LUE可以是功能強大的多處理器服務(wù)器,在存儲器104內(nèi)存儲整個DNS記錄集,以便于高速、高通過量搜索和更新。在一種可選實施例中,DNS解析服務(wù)可利用一系列功能強大的多處理器服務(wù)器或LUE來提供,每個服務(wù)器或LUE在存儲器內(nèi)存儲整個DNS記錄集的子集,以便于高速、高通過量搜索和更新。
相反地,多個PE可以是普通的低簡檔的基于PC的機(jī)器,運行高效的多任務(wù)操作系統(tǒng)(例如Red Hat Linux6.2),最小化在LUE上的網(wǎng)絡(luò)處理傳送負(fù)載,以最大化DNS解析的可用資源。PE可以處理有線DNS協(xié)議的細(xì)微差別,響應(yīng)無效的DNS查詢,并在LAN 122將多個有效的DNS查詢復(fù)用到LUE。例如,可利用每秒將要處理的DNS查詢的數(shù)量和特定系統(tǒng)的性能特性來確定用于單個LUE的PE的數(shù)量。也可以使用其它的量度來確定合適的映射比和行為。
通常,可支持其它的大容量的基于查詢的實施例,例如包括電話號碼解析、SS7信令處理、地理位置確定、電話號碼到用戶映射、用戶位置和存在確定等等。
在一種實施例中,中央在線事務(wù)處理(OLTP)服務(wù)器140-1可耦合到WAN124,并接收來自各個信源的到數(shù)據(jù)庫142-1的添加、修改和刪除(即更新業(yè)務(wù))。OLTP服務(wù)器140-1可在WAN 124上向系統(tǒng)100發(fā)送更新,其包括數(shù)據(jù)庫142-1的本地拷貝。OLTP服務(wù)器140-1可為了以各種格式和協(xié)議處理更新業(yè)務(wù)而被優(yōu)化,其中所述協(xié)議例如包括超文本傳輸協(xié)議(HyperText Transmission Protocol)(HTTP)、注冊記錄者協(xié)議(Registry Registrar Protocol)(RRP)、可擴(kuò)展供應(yīng)協(xié)議(Extensible Provisioning Protocol)(EPP)、服務(wù)管理系統(tǒng)(ServiceManagement System)/800機(jī)械化通用接口(Mechanized Generic Interface)(MGI)和其它在線提供協(xié)議。只讀LUE的格局可部署在集線和輪輻(spoke)結(jié)構(gòu)中,以提供與來自O(shè)LTP服務(wù)器140-1的大容量遞增更新結(jié)合的高速搜索能力。
在一種可選實施例中,數(shù)據(jù)可分布在多個OLTP服務(wù)器140-1、……、140-S上,其每個都可以耦合到WAN 124。OLTP服務(wù)器140-1、……、140-S可從各個信源接收到對其相應(yīng)數(shù)據(jù)庫142-1、……、142-S(為了清楚未圖示)的添加、修改和刪除(即更新業(yè)務(wù))。OLTP服務(wù)器140-1、……、140-S可在WAN 124上向系統(tǒng)100發(fā)送更新,其可包括數(shù)據(jù)庫142-1、……、142-S的拷貝和其它動態(tài)創(chuàng)建的數(shù)據(jù)、等等。例如,在地理位置實施例中,OLTP服務(wù)器140-1、……、140-S可從多組遠(yuǎn)程傳感器中接收更新業(yè)務(wù)。在另一種可選實施例中,多個網(wǎng)絡(luò)計算120-1、……、120-N也可在WAN 124或LAN 122從各個信源接收添加、修改和刪除(即更新業(yè)務(wù))。在這個實施例中,多個網(wǎng)絡(luò)計算機(jī)120-1、……、120-N可向系統(tǒng)100發(fā)送更新以及查詢。
在DNS解析實施例中,每個PE(例如多個網(wǎng)絡(luò)計算機(jī)120-1、……、120-N中的每個)可將在廣域網(wǎng)(例如WAN 124)上接收到的若干DNS查詢消息組合或復(fù)用成單個請求超分組,并在局域網(wǎng)(例如LAN 122)上將該請求超分組發(fā)送給LUE(例如系統(tǒng)100)。LUE可將若干DNS查詢消息應(yīng)答組合或復(fù)用成單個響應(yīng)超分組,并在局域網(wǎng)上將該響應(yīng)超分組發(fā)送給合適的PE。通常,請求或響應(yīng)超分組的最大大小可由物理網(wǎng)絡(luò)層(例如吉比特以太網(wǎng))的最大傳輸單元(MTU)來限制。例如,低于100字節(jié)和200字節(jié)的典型DNS查詢和應(yīng)答消息大小分別允許超過30個查詢被復(fù)用成單個請求超分組,以及超過15個應(yīng)答被復(fù)用成單個響應(yīng)超分組。然而,更少數(shù)量的查詢(例如20個查詢)可包括在單個請求超分組中,以避免在響應(yīng)上的MTU溢出(例如10個應(yīng)答)。對于較大的MTU大小,可相應(yīng)地增加被復(fù)用的查詢和響應(yīng)的個數(shù)。
每個多任務(wù)PE可包括入站線程和出站線程以分別管理DNS查詢和應(yīng)答。例如,入站線程可不整理(un-marshal)來自在廣域網(wǎng)上接收的輸入DNS查詢分組的DNS查詢組分,并將若干毫秒的查詢復(fù)用成單個請求超分組。隨后,入站線程可在局域網(wǎng)上將該請求超分組發(fā)送給LUE。相反地,出站線程可接收來自LUE的響應(yīng)超分組,解復(fù)用在其中包含的應(yīng)答,并將各個字段整理(marshal)成有效的DNS應(yīng)答,隨后可以在廣域網(wǎng)上予以發(fā)送。通常,如上而所指出的,也可以支持其它的大容量的基于查詢的實施例。
在一種實施例中,請求超分組也可以包括與每個DNS查詢有關(guān)的狀態(tài)信息,例如信源地址、協(xié)議類型、等等。LUE可在響應(yīng)超分組內(nèi)包括狀態(tài)信息和相關(guān)的DNS應(yīng)答。隨后,每個PE可以使用從LUE發(fā)送的信息構(gòu)建并返回有效的DNS應(yīng)答消息。因此,每個PE可有利地作為無狀態(tài)機(jī)器操作,即可以根據(jù)在響應(yīng)超分組內(nèi)包含的信息形成有效的DNS應(yīng)答。通常,LUE可以將響應(yīng)超分組返回給PE,從所述PE始發(fā)輸入超分組;然而,其它的變化顯然也是可能的。
在一種可選實施例中,每個PE可保存與每個DNS查詢有關(guān)的狀態(tài)信息,并包括對請求超分組內(nèi)的狀態(tài)信息的參考或手柄(handle)。LUE可包括在響應(yīng)超分組內(nèi)的狀態(tài)信息參考和相關(guān)的DNS應(yīng)答。隨后,每個PE可以使用從LUE發(fā)送的狀態(tài)信息參考以及在其上保存的狀態(tài)信息來構(gòu)建并返回有效的DNS應(yīng)答消息。在這個實施例中,LUE可將響應(yīng)超分組返回給PE,從該PE始發(fā)輸入超分組。
圖2是圖示根據(jù)本發(fā)明一種實施例的消息數(shù)據(jù)結(jié)構(gòu)的詳細(xì)方框圖。通常,消息200可以包括具有多個順序號211-1、……、211-S和多個消息計數(shù)212-1、……、212-S的首部210以及數(shù)據(jù)負(fù)載215。
在DNS解析實施例中,消息200可用于請求超分組和響應(yīng)超分組。例如,請求超分組220可以包括具有多個順序號231-1、……、232-S和多個消息計數(shù)232-1、……、232-S的首部230和具有由PE在預(yù)定的時間周期上累計的多個DNS查詢236-1、……、236-Q的數(shù)據(jù)負(fù)載235,所述預(yù)定時間周期例如是若干毫秒。在一種實施例中,每個DNS查詢236-1、……、236-Q可包括狀態(tài)信息,而在可選實施例中,每個DNS查詢236-1、……、236-Q可包括到狀態(tài)信息的手柄(handle)。
類似地,響應(yīng)超分組240可以包括具有多個順序號251-1、……、251-S和多個消息計數(shù)252-1、……、252-S的首部250和包含大致對應(yīng)于請求超分組220內(nèi)包含的多個DNS查詢的多個DNS應(yīng)答256-1、……、256-R的數(shù)據(jù)負(fù)載255。在一種實施例中,每個DNS應(yīng)答256-1、……、256-R可包括與相應(yīng)DNS查詢相關(guān)的狀態(tài)信息,而在一種可選實施例中,每個DNS應(yīng)答256-1、……、256-R可包括到與相應(yīng)DNS查詢相關(guān)的狀態(tài)信息的手柄。偶爾,相應(yīng)DNS應(yīng)答的總大小可超過響應(yīng)超分組240的數(shù)據(jù)負(fù)載255的大小。這種溢出可以限制于例如單個應(yīng)答,即與請求超分組220內(nèi)包含的最后一個查詢相關(guān)的應(yīng)答。并不發(fā)送僅包含單個應(yīng)答的附加響應(yīng)超分組240,溢出應(yīng)答可最好被包括在對應(yīng)于下一請求超分組的下一個響應(yīng)超分組240內(nèi)。有利地,首部250可包括確定溢出條件范圍的合適信息。在峰值處理條件下,多個應(yīng)答可以溢出到下一響應(yīng)超分組。
例如,在響應(yīng)超分組240內(nèi),首部250可包括至少兩個順序號251-1和251-2以及至少兩個消息計數(shù)252-1和252-2,組合成兩對互補字段。雖然可能存在“S”個順序號和消息計數(shù)對,通常,S是小數(shù)目,例如2、3、4、等等。因而,首部250可以包括與消息計數(shù)252-1成對的順序號25 1-1以及與消息計數(shù)252-2成對的順序號251-2,等等。通常,消息計數(shù)252-1可以反映在與順序號251-1相關(guān)的數(shù)據(jù)負(fù)載255內(nèi)包含的應(yīng)答數(shù)量。在一種實施例中,順序號251-1可以是雙字節(jié)字段,而消息計數(shù)252-1可以是一字節(jié)字段。
在更具體的例子中,請求超分組220的數(shù)據(jù)負(fù)載235可以包括七個DNS查詢(如圖2所示)。在一種實施例中,順序號231-1可以設(shè)置為唯一值(例如1024)和消息計數(shù)232-1可以設(shè)置為七,而順序號231-2和消息計數(shù)232-2可以設(shè)置為零。在另一種實施例中,首部230可以僅包含一個順序號和一個消息計數(shù),例如分別設(shè)置為1024和七的順序號231-1和消息計數(shù)232-1。典型地,請求超分組220可以包括與特定順序號相關(guān)的所有查詢。
響應(yīng)超分組240的數(shù)據(jù)負(fù)載255可以包括七個相應(yīng)的DNS應(yīng)答(如圖2所示)。在這個例子中,首部250可以包括類似于請求超分組220的信息,即設(shè)置為相同唯一值(即1024)的順序號251-1,設(shè)置為七的消息計數(shù)252-1,和都設(shè)置為零的順序號252-2與消息計數(shù)252-2。然而,在另一個例子中,響應(yīng)超分組240的數(shù)據(jù)負(fù)載255可以僅包括五個相應(yīng)的DNS應(yīng)答,并且可以將消息計數(shù)設(shè)置為五。與順序號1024相關(guān)的其余兩個響應(yīng)可包括在下一個響應(yīng)超分組240內(nèi)。
下一個響應(yīng)超分組240可以包括不同的順序號(例如1025)和至少一個DNS查詢,以便下一個響應(yīng)超分組240可以包括與1024順序號相關(guān)的兩個先前應(yīng)答以及與1025順序號相關(guān)的至少一個應(yīng)答。在這個例子中,下一個響應(yīng)超分組240的首部250可以包括設(shè)置為1024的順序號251-1、設(shè)置為二的消息計數(shù)252-1、設(shè)置為1025的順序號251-2和設(shè)置為一的消息計數(shù)252-2。因而,響應(yīng)超分組240可以包括與包含在兩個不同請求超分組內(nèi)的三個查詢相關(guān)的總共三個應(yīng)答。
圖3是圖示根據(jù)本發(fā)明一種實施例的消息延遲數(shù)據(jù)結(jié)構(gòu)的詳細(xì)方框圖。消息延遲數(shù)據(jù)結(jié)構(gòu)300可以包括通常與消息200的發(fā)送和接收相關(guān)的信息。在DNS解析實施例中,消息延遲數(shù)據(jù)結(jié)構(gòu)300可以包括與請求超分組和響應(yīng)超分組相關(guān)的延遲信息;這個延遲信息可以組織在根據(jù)順序號值進(jìn)行索引的表格格式內(nèi)(例如索引301)。例如,消息延遲數(shù)據(jù)結(jié)構(gòu)300可以包括若干行,行數(shù)N等于唯一順序號的總數(shù),如通常用表格元素310、320和330所表示的。在一個實施例中,超分組首部順序號在長度上可以是兩個字節(jié),并定義從零到216-1(即65,535)的唯一順序號的范圍。在這種情況下,N可以等于65,536。延遲信息可以包括請求時間標(biāo)記302、請求查詢計數(shù)303、響應(yīng)時間標(biāo)記304、響應(yīng)應(yīng)答計數(shù)305和響應(yīng)消息計數(shù)306。在可選實施例中,延遲信息還可以包括初始響應(yīng)時間標(biāo)記(未圖示)。
在一個例子中,表格元素320圖示用于具有等于1024的單一順序號231-1的請求超分組220的延遲信息。請求時間標(biāo)記302可以表示何時將這個特定請求超分組發(fā)送給LUE。請求查詢計數(shù)303可以表示在這個特定請求超分組內(nèi)包含多少查詢。響應(yīng)時間標(biāo)記304可以表示具有等于1024的順序號的響應(yīng)超分組何時在PE(例如網(wǎng)絡(luò)計算機(jī)120-N)上被接收,并且在PE上接收到一個以上的響應(yīng)超分組時可以被更新。響應(yīng)應(yīng)答計數(shù)305可以表示在與這個順序號(即1024)相關(guān)的所有接收到的響應(yīng)超分組內(nèi)包含的應(yīng)答的總數(shù)。響應(yīng)消息計數(shù)306可以表示具有此順序號(即1024)的響應(yīng)超分組抵達(dá)PE的個數(shù)。在這個特定響應(yīng)超分組內(nèi)包含的對查詢的應(yīng)答可以被劃分在多個響應(yīng)超分組上,在這種情況下,可以在接收到每個附加響應(yīng)超分組時更新響應(yīng)時間標(biāo)記304、響應(yīng)應(yīng)答計數(shù)305和響應(yīng)消息計數(shù)306。在一種可選實施例中,初始響應(yīng)時間標(biāo)記可以表示何時在PE上接收到包含對此順序號(即1024)應(yīng)答的第一響應(yīng)超分組。在這個實施例中,當(dāng)接收到附加(即第二和后續(xù))響應(yīng)超分組時可以更新響應(yīng)時間標(biāo)記304。
可根據(jù)在消息延遲數(shù)據(jù)結(jié)構(gòu)300內(nèi)包含的延遲信息來確定各個重要的延遲量度。例如,簡單的用于給定索引301(即順序號)的請求查詢計數(shù)303和響應(yīng)應(yīng)答計數(shù)305之間的交叉核對(cross-checking)可以表示丟失應(yīng)答的數(shù)量。這個不同可以表示由LUE不能說明地丟棄的查詢的數(shù)量。比較請求時間標(biāo)記302和響應(yīng)時間標(biāo)記304可以表示在當(dāng)前的消息負(fù)載情況下執(zhí)行特定的PE/LUE組合的情況。當(dāng)前請求超分組順序號和當(dāng)前響應(yīng)超分組順序號之間的差值可以與LUE的響應(yīng)性能相關(guān);例如,差值越大,則性能越慢。響應(yīng)消息計數(shù)306可以表示有多少個響應(yīng)超分組在用于每個請求超分組,并且在DNS解析業(yè)務(wù)分析中可能是重要的。當(dāng)在PE和LUE之間移動的查詢和應(yīng)答的延遲增加時,則PE可以減少由系統(tǒng)處理的DNS查詢分組的數(shù)量。
通常,LUE可以在輸入的復(fù)用請求超分組上執(zhí)行多線程查找,并可以將應(yīng)答組合到輸出的復(fù)用響應(yīng)超分組內(nèi)。例如,LUE可以為每個有源PE引起一個搜索線程或者處理,并將來自該PE的所有輸入請求超分組路由選擇到該搜索線程。LUE可以引起一個管理器線程或者處理,以控制PE與搜索線程的相關(guān),以及更新線程或者處理以更新位于存儲器104內(nèi)的數(shù)據(jù)庫。每個搜索線程可以從輸入請求超分組中提取搜索查詢,執(zhí)行各個搜索,構(gòu)造包含搜索應(yīng)答的輸出響應(yīng)超分組,并將該超分組發(fā)送給合適的PE。更新線程可以接收來自O(shè)LTP1401-1的對數(shù)據(jù)庫的更新,并將新數(shù)據(jù)合并到數(shù)據(jù)庫內(nèi)。在可選實施例中,多個網(wǎng)絡(luò)計算機(jī)120-1、……、120-N可以將更新發(fā)送給系統(tǒng)100。這些更新例如可以包括在輸入請求超分組消息流內(nèi)。
因此,利用超分組協(xié)議,LUE可以在網(wǎng)絡(luò)處理上花費它的低于15%的處理器容量,從而顯著地提高搜索查詢通過量。在一種實施例中,IBM8路M80可以維持每秒180k至220k查詢的搜索速率(qps),而IBM24路S80可以維持400k至500k qps。使搜索速率加倍,即分別到500k和1Mqps,簡單地需要兩倍的硬件,即例如兩個LUE及其輔助PE。在另一種實施例中,運行Red HatLinux6.2的雙奔騰III 866MHz多處理器個人計算機(jī)可維持在100K/秒量級上的更新速率。當(dāng)然,硬件性能上的提高也提高了與本發(fā)明實施例相關(guān)的搜索和更新速率,并且當(dāng)制造商使用更快執(zhí)行機(jī)器替換這些多處理器計算機(jī)時,例如,所維持的搜索和更新速率可等量地提高。通常,系統(tǒng)100并不限于客戶機(jī)或服務(wù)器結(jié)構(gòu),并且本發(fā)明的實施例并不限于硬件和/或軟件的任何特定組合。
圖4是圖示根據(jù)本發(fā)明一種實施例的通用數(shù)據(jù)庫結(jié)構(gòu)的方框圖。在這個實施例中,數(shù)據(jù)庫400可包括數(shù)據(jù)庫記錄的至少一個表格或組401和至少一個相應(yīng)的搜索索引402,所述搜索索引具有到數(shù)據(jù)庫記錄組401內(nèi)各個記錄的指針(索引、直接字節(jié)偏移、等等)。例如,指針405可以參考數(shù)據(jù)庫記錄410。
在一種實施例中,數(shù)據(jù)庫400可以包括作為搜索索引的至少一個散列表403,該搜索索引具有到數(shù)據(jù)庫記錄表格或組401內(nèi)的指針(索引、直接字節(jié)偏移、等等)。散列函數(shù)可以將搜索密鑰映射到整數(shù)值,此值隨后可以用作到散列表403的索引。因為一個以上的搜索密鑰可映射到單個整數(shù)值,可使用散列鏈指針的單獨鏈接列表創(chuàng)建散列桶(bucket)。例如,散列表403內(nèi)的每個表目可包含到散列桶的第一元素的指針,并且該散列桶的每個元素可包含到鏈接列表內(nèi)下一元素或數(shù)據(jù)庫記錄的散列鏈指針。有利地,對于參考散列桶內(nèi)隨后元素的那些元素或數(shù)據(jù)庫記錄來說,可能僅需要散列鏈指針。
散列表403可包括到各個數(shù)據(jù)庫記錄401的8字節(jié)指針陣列。例如,散列表403內(nèi)的散列指針404可參考數(shù)據(jù)庫記錄420作為散列桶內(nèi)的第一元素。數(shù)據(jù)庫記錄420可包含散列鏈指針424,其可以參考散列桶內(nèi)的下一元素或數(shù)據(jù)庫記錄。數(shù)據(jù)庫記錄420還可以包括數(shù)據(jù)長度421和相關(guān)的固定或可變長度數(shù)據(jù)422。在一種實施例中,可包括表示數(shù)據(jù)結(jié)束422的空字符423。此外,數(shù)據(jù)庫記錄420可包括數(shù)據(jù)指針425,它可以參考在數(shù)據(jù)庫記錄組401或不同的數(shù)據(jù)庫記錄表格或組(未圖示)內(nèi)的另一個數(shù)據(jù)庫記錄,其中可以定位附加的數(shù)據(jù)。
系統(tǒng)100可以使用各種公知的算法來在這個數(shù)據(jù)結(jié)構(gòu)內(nèi)搜索給定的搜索項目或密鑰。通常,可以通過在多個處理器102-1、……、102-P中的至少一個處理器上執(zhí)行的多個搜索處理或線程來搜索數(shù)據(jù)庫400。然而,對數(shù)據(jù)庫400的修改不能完全由一個或多個更新線程來執(zhí)行,除非禁止搜索線程在添加、修改或刪除數(shù)據(jù)庫400內(nèi)信息所必需的時間周期內(nèi)訪問數(shù)據(jù)庫400。例如,為了修改數(shù)據(jù)庫400內(nèi)的數(shù)據(jù)庫記錄430,可通過更新線程鎖定數(shù)據(jù)庫記錄組401以防止搜索線程在更新線程正在修改數(shù)據(jù)庫記錄430內(nèi)的信息時訪問數(shù)據(jù)庫400。存在多種公知的鎖定數(shù)據(jù)庫400以防止搜索訪問的機(jī)制,包括自旋鎖、信號量、互斥(mutex)等等的使用。此外,各個現(xiàn)有的商業(yè)數(shù)據(jù)庫提供特定命令來鎖定全部或部分?jǐn)?shù)據(jù)庫400,例如由加利福尼亞州Redwood Shore的Oracle公司制造的Oracle 8數(shù)據(jù)庫等內(nèi)的鎖定表格命令。
圖5是圖示根據(jù)本發(fā)明另一種實施例的通用數(shù)據(jù)庫結(jié)構(gòu)的方框圖。在這個實施例中,數(shù)據(jù)庫500可以包括高度優(yōu)化的只讀主快照文件(master snapshotfile)510和不斷完善的后備文件520。主快照文件510可包括數(shù)據(jù)庫記錄511的至少一個表格或組和至少一個相應(yīng)的搜索索引512,具有指向數(shù)據(jù)庫記錄組511內(nèi)的各個記錄的指針(索引、直接字節(jié)偏移等等)。可選擇地,主快照文件510可以包括作為搜索索引的至少一個散列表513,所述搜索索引具有指向數(shù)據(jù)庫記錄表格或組511內(nèi)的指針(索引、直接字節(jié)偏移、等等)。類似地,后備文件520可以包括至少兩個數(shù)據(jù)庫記錄表格或組,包括數(shù)據(jù)庫添加記錄521和數(shù)據(jù)庫刪除記錄531。相應(yīng)的搜索索引522和532可以提供有指向數(shù)據(jù)庫添加記錄521和數(shù)據(jù)庫刪除記錄531內(nèi)的各個記錄的指針(索引、直接字節(jié)偏移、等等)??蛇x擇地,后備表520可以包括作為搜索索引的散列表523和533,具有分別指向數(shù)據(jù)庫添加記錄521和數(shù)據(jù)庫刪除記錄531內(nèi)的指針(索引、直接字節(jié)偏移、等等)。
系統(tǒng)100可使用各種公知的算法來在這個數(shù)據(jù)結(jié)構(gòu)中搜索給定搜索項或密鑰。在典型的例子中,后備文件520可包括所有的對數(shù)據(jù)的最新改變,并可以在只讀主快照文件510之前被搜索。如果在后備文件520內(nèi)找到搜索密鑰,則在不訪問快照文件510的情況下返回響應(yīng),但是如果未發(fā)現(xiàn)密鑰,則可以搜索快照文件510。然而,當(dāng)后備文件520在存儲器104內(nèi)不再適合快照文件510時,則搜索查詢速率以10至50或者更大因數(shù)顯著地降低。因此,為了避免或最小化搜索查詢速率中的任何降低,通過合并在后備文件520內(nèi)包含的所有添加、刪除和修改,可定期地更新或重新創(chuàng)建快照文件510。
快照文件510內(nèi)的數(shù)據(jù)可以不物理地改變,但是邏輯地被添加、修改或刪除。例如,通過在數(shù)據(jù)庫刪除記錄531內(nèi)創(chuàng)建相應(yīng)的刪除記錄,并將到該刪除記錄的指針寫入散列表533內(nèi)的合適位置,可以刪除或邏輯地“遺忘”快照文件510內(nèi)的數(shù)據(jù)。通過將數(shù)據(jù)記錄從快照文件510拷貝到數(shù)據(jù)庫添加記錄521內(nèi)的新數(shù)據(jù)記錄,修改新表目內(nèi)的數(shù)據(jù),并且然后將到新表目的指針寫入合適的散列表(例如散列表522)或數(shù)據(jù)庫添加記錄521內(nèi)的鏈指針,可邏輯地修改快照文件510內(nèi)的數(shù)據(jù)。類似地,通過創(chuàng)建數(shù)據(jù)庫添加記錄521內(nèi)的新數(shù)據(jù)記錄,然后將到新表目的指針寫入合適的散列表(例如散列表522)或數(shù)據(jù)庫添加記錄521內(nèi)的鏈指針,可以邏輯地將快照文件510內(nèi)的數(shù)據(jù)添加給快照文件510。
在DNS解析實施例中,例如,快照文件510可包括域名數(shù)據(jù)和名稱服務(wù)器數(shù)據(jù),將其組織為獨立的數(shù)據(jù)表格或者塊,并帶有獨立的搜索索引(例如511-1、511-2、512-1、512-2、513-1、513-2、等等,為了簡明未圖示)。類似地,后備文件520可包括對域名數(shù)據(jù)和名稱服務(wù)器數(shù)據(jù)的添加和修改,以及對域名數(shù)據(jù)和名稱服務(wù)器數(shù)據(jù)的刪除(例如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是圖示根據(jù)本發(fā)明一種實施例的通用數(shù)據(jù)庫結(jié)構(gòu)的詳細(xì)方框圖。通常,數(shù)據(jù)庫600可組織成數(shù)據(jù)的單個可搜索的表示。數(shù)據(jù)集更新可連續(xù)地合并到數(shù)據(jù)庫600內(nèi),并可以在相關(guān)數(shù)據(jù)庫記錄上物理地執(zhí)行刪除或修改以釋放存儲器104內(nèi)的空間,例如用于隨后的添加和修改。單個可搜索的表示可極限地擴(kuò)展到大的數(shù)據(jù)集大小和高的搜索與更新速率,并避免了定期地在多個搜索引擎計算機(jī)之中重新創(chuàng)建、傳播和重新裝載快照文件的需要。
在DNS解析實施例中,例如,數(shù)據(jù)庫600可以包括域名數(shù)據(jù)610和名稱服務(wù)器數(shù)據(jù)620。域名數(shù)據(jù)610和名稱服務(wù)器數(shù)據(jù)620可包括搜索索引,帶有到可變長度記錄塊的指針(索引、直接字節(jié)偏移等等)。如上文所討論的,散列函數(shù)可以將搜索密鑰映射成整數(shù)值,隨后可以將該整數(shù)值用作到散列表內(nèi)的索引。類似地,可以使用散列鏈指針的單鏈接列表為每個散列表索引創(chuàng)建散列桶。域名數(shù)據(jù)610可以包括例如作為搜索索引的散列表612和可變長度域名記錄塊611。散列表612可包括到各個域名記錄611的8字節(jié)指針陣列,例如參考域名記錄620的指針613??勺冮L度域名記錄620可包括例如下一記錄偏移621、名稱長度622、標(biāo)準(zhǔn)化名稱623、鏈指針624(即,例如,指向散列鏈內(nèi)的下一記錄)、多個名稱服務(wù)器625和名稱服務(wù)器指針626。這兩個鏈指針624和名稱服務(wù)器指針626的大小可以被優(yōu)化,以反映每個特定類型數(shù)據(jù)所需要的塊大小,例如用于鏈指針624的八字節(jié)和用于名稱服務(wù)器指針626的四字節(jié)。
名稱服務(wù)器數(shù)據(jù)630例如可以包括作為搜索索引的散列表632和可變長度名稱服務(wù)器記錄塊631。散列表632可以包括到各個名稱服務(wù)器記錄631的4字節(jié)指針陣列,例如參考名稱服務(wù)器記錄640的指針633。可變長度名稱服務(wù)器記錄640可以包括例如下一記錄偏移641、名稱長度642、標(biāo)準(zhǔn)化名稱643、鏈指針644(例如指向散列鏈內(nèi)的下一記錄)、名稱服務(wù)器網(wǎng)絡(luò)地址的數(shù)量645、名稱服務(wù)器地址長度646以及名稱服務(wù)器網(wǎng)絡(luò)地址647,該地址例如可以是網(wǎng)際協(xié)議(IP)網(wǎng)絡(luò)地址。通常,名稱服務(wù)器網(wǎng)絡(luò)地址可以以ASCII(美國信息交換標(biāo)準(zhǔn)碼,例如ISO-14962-1997,ANSI-X3.4-1997,等等)或二進(jìn)制格式進(jìn)行存儲;在這個例子中,名稱服務(wù)器網(wǎng)絡(luò)地址長度646表示以二進(jìn)制格式(即四字節(jié))存儲名稱服務(wù)器網(wǎng)絡(luò)地址647。鏈指針644的大小也可以被優(yōu)化,以反映所需要的名稱服務(wù)器數(shù)據(jù)塊大小,例如四個字節(jié)。
通常,諸如散列表和可變長度數(shù)據(jù)記錄的兩個搜索索引可以被構(gòu)建,以便將8字節(jié)指針定位在存儲器內(nèi)的8字節(jié)邊界上。例如,散列表612可以包含指向域名記錄611的8字節(jié)指針連續(xù)陣列,并可以存儲在可被八整除的存儲器地址上(即8字節(jié)邊界或8N)。類似地,諸如散列表和可變長度數(shù)據(jù)記錄的兩個搜索索引可以被構(gòu)建,以便將4字節(jié)指針定位在存儲器內(nèi)的4字節(jié)邊界上。例如,散列表632可以包含指向名稱服務(wù)器記錄631的4字節(jié)指針連續(xù)陣列,并可以存儲在可被四整除的存儲器地址上(即4字節(jié)邊界或4N)。因此,對數(shù)據(jù)庫600的修改可以通過使用單個不可中斷操作更新指向存儲器內(nèi)的對準(zhǔn)地址的指針來結(jié)束,包括例如將新指針寫入搜索索引,例如散列表,或者將新散列鏈指針寫入可變長度數(shù)據(jù)記錄。
圖7是圖示根據(jù)本發(fā)明一種實施例的通用數(shù)據(jù)庫結(jié)構(gòu)的詳細(xì)方框圖。通常,數(shù)據(jù)庫700也可以組織成單個的可搜索的數(shù)據(jù)表示。數(shù)據(jù)集更新可連續(xù)地被并入數(shù)據(jù)庫700內(nèi),并可以在相關(guān)數(shù)據(jù)庫記錄上物理地執(zhí)行刪除或修改以釋放存儲器104內(nèi)的空間,例如用于隨后的添加或修改。單個可搜索的表示極限地定標(biāo)到大的數(shù)據(jù)集大小以及高的搜索與更新速率,并避免了定期地在多個搜索引擎計算機(jī)之間重新創(chuàng)建、傳播和重新裝載快照文件的需要。
可以使用多種不同的物理數(shù)據(jù)結(jié)構(gòu)組織方式。一種示例性的組織方式可以使用到散列表的可選搜索索引,用于排列的順序訪問數(shù)據(jù)記錄,例如三進(jìn)制搜索樹(特里結(jié)構(gòu)(trie))或者TST,其組合二進(jìn)制搜索樹和數(shù)字搜索特里結(jié)構(gòu)的特點。在基于文本的應(yīng)用中,例如whois,域名解析使用DNS安全擴(kuò)展(互聯(lián)網(wǎng)工程任務(wù)組征求意見2535)等等,TST有利地最小化需要執(zhí)行的比較操作的數(shù)量,尤其在搜索丟失的情況下,并可以產(chǎn)生超越使用散列的搜索引擎實施方法的搜索性能量度。此外,TST還可以提供先進(jìn)的文本搜索特征,例如通配符搜索,這在例如whois、域名解析和互聯(lián)網(wǎng)內(nèi)容搜索等等的文本搜索應(yīng)用中可能是有用的。
在一種實施例中,TST可以包含以分級關(guān)系鏈接在一起的一系列節(jié)點。根節(jié)點可定位在樹的頂部,相關(guān)的子節(jié)點和鏈路可構(gòu)成旁支,并且葉節(jié)點可以結(jié)束每個旁支的末尾。每個葉節(jié)點可以與特定的搜索密鑰相關(guān),在到葉節(jié)點的路徑上的每個節(jié)點可以包含該密鑰的單個順序元素。該樹中的每個節(jié)點包含比較字符或分割值(split value)以及到該樹中其它的相連或“子”節(jié)點的3個指針。這些指針參考其分割值小于、等于或大于該節(jié)點分割值的子節(jié)點。因此,在TST內(nèi)搜索特定密鑰涉及從根節(jié)點到最終的葉節(jié)點遍歷該樹,順序地比較該密鑰的每個元素或字符位置與沿著該路徑的節(jié)點的分割值。此外,葉節(jié)點還可以包含到密鑰記錄的指針,其又包含到終端數(shù)據(jù)記錄的至少一個指針,所述終端數(shù)據(jù)記錄包含與該密鑰相關(guān)的記錄數(shù)據(jù)(例如IP地址)。可選擇地,密鑰記錄可以包含整個記錄數(shù)據(jù)。可以以二進(jìn)制格式、ASCII文本格式等等來存儲記錄數(shù)據(jù)。
在一種實施例中,數(shù)據(jù)庫700可以組織為TST,包括多個固定長度的搜索節(jié)點701、多個可變長度的密鑰數(shù)據(jù)記錄702和多個可變長度的終端數(shù)據(jù)記錄703。搜索節(jié)點701可以包括上面描述的各種類型的信息,包括例如比較字符(或值)和位置、旁支節(jié)點指針和密鑰指針。節(jié)點指針的大小通常可以通過節(jié)點數(shù)量來確定,而密鑰指針的大小通??梢酝ㄟ^可變長度密鑰數(shù)據(jù)集的大小來確定。密鑰數(shù)據(jù)記錄702可以包含密鑰信息以及終端數(shù)據(jù)信息,例如包括到終端數(shù)據(jù)記錄的指針或嵌入記錄數(shù)據(jù),而終端數(shù)據(jù)記錄703可以包含記錄數(shù)據(jù)。
在一種實施例中,每個固定長度搜索節(jié)點的長度可以是24字節(jié)。搜索節(jié)點710例如可以包含八比特比較字符(或字節(jié)值)711、12比特字符(或字節(jié))位置712和12比特節(jié)點類型/狀態(tài)(為了簡明未圖示);這些數(shù)據(jù)可以編碼在節(jié)點的前四個字節(jié)內(nèi)。比較字符711可以被編碼在節(jié)點的第一字節(jié)內(nèi),如圖7所示,或者可選擇地,字符位置712可以被編碼在節(jié)點的前十二個比特,以便使用簡單的移位操作來優(yōu)化對字符位置712的訪問。每個搜索節(jié)點的后12字節(jié)可以包含三個32比特指針,即指針713、指針714和指針715,分別代表“小于”、“等于”和“大于”支路節(jié)點指針。這些指針可包含計數(shù)器或節(jié)點索引,而不是字節(jié)偏移或存儲器地址。對于固定長度的搜索節(jié)點來說,可以根據(jù)計數(shù)器或索引值以及固定長度例如計數(shù)器*長度來計算字節(jié)偏移。最后的四個字節(jié)包含40比特密鑰指針716,它可以是表示相應(yīng)密鑰數(shù)據(jù)記錄并不存在的空值(圖示)或者到現(xiàn)有相應(yīng)密鑰數(shù)據(jù)記錄的指針(未圖示)以及其它數(shù)據(jù),例如包括12比特密鑰長度和12比特指針類型/狀態(tài)字段。密鑰指針716可以包含到適當(dāng)密鑰數(shù)據(jù)記錄的字節(jié)偏移,而密鑰長度可用于在消除TST內(nèi)的單向分支時優(yōu)化搜索和插入。指針類型/狀態(tài)字段可包含在有效性檢查內(nèi)使用的信息和在存儲器管理中使用的分配數(shù)據(jù)。
在一種實施例中,密鑰數(shù)據(jù)記錄750例如可以包括可變長度密鑰753和至少一個終端數(shù)據(jù)指針。如圖7所示,密鑰數(shù)據(jù)記錄750包括兩個終端數(shù)據(jù)指針終端數(shù)據(jù)指針757和終端數(shù)據(jù)指針758。密鑰數(shù)據(jù)記錄750可以前綴有12比特密鑰長度751和12比特終端指針計數(shù)/狀態(tài)752,并可以包括填充(為了簡明未圖示),以便在存儲器104內(nèi)的8字節(jié)邊界上對準(zhǔn)終端數(shù)據(jù)指針757和終端數(shù)據(jù)指針758。終端數(shù)據(jù)指針757和終端數(shù)據(jù)指針758可以均包括各種數(shù)據(jù),例如終端數(shù)據(jù)類型、長度、狀態(tài)或者在二進(jìn)制記錄搜索內(nèi)有用的數(shù)據(jù)。終端數(shù)據(jù)指針757和終端數(shù)據(jù)指針758可以通過用于更快地檢索特定資源記錄(例如終端數(shù)據(jù)記錄760和終端數(shù)據(jù)記錄770)的終端數(shù)據(jù)類型來存儲。在另一種實施例中,密鑰數(shù)據(jù)記錄740可以包括嵌入的終端數(shù)據(jù)746,而不是或者還包含終端數(shù)據(jù)記錄指針。例如,密鑰數(shù)據(jù)記錄740可以包含密鑰長度741、終端指針計數(shù)742、可變長度密鑰743、嵌入記錄元素的個數(shù)744、隨后是記錄元素長度745(例如以字節(jié)為單位)和嵌入的用于這些嵌入記錄元素744之中每個的記錄數(shù)據(jù)746(例如字符串和字節(jié)序列等)。
在一種實施例中,終端數(shù)據(jù)記錄760例如可以包括12比特長度761、4比特狀態(tài)和可變長度串762(例如IP地址)。可選擇地,可變長度串762可以是字節(jié)序列。終端數(shù)據(jù)記錄760可以包括填充以使每個終端數(shù)據(jù)記錄對準(zhǔn)存儲器104內(nèi)的8字節(jié)邊界??蛇x擇地,終端數(shù)據(jù)記錄760可以包括到4字節(jié)邊界的填充比特,或者終端數(shù)據(jù)記錄760可以不包括任何填充。存儲器管理算法通??梢源_定終端數(shù)據(jù)記錄760是否被填充到8字節(jié)、4字節(jié)或0字節(jié)邊界。類似地,終端數(shù)據(jù)記錄770可以包括12比特長度771、4比特狀態(tài)和可變長度串772(例如IP地址)。
通常,諸如TST和數(shù)據(jù)記錄的兩個搜索索引可以被構(gòu)造,以便將8字節(jié)指針定位在存儲器內(nèi)的8字節(jié)邊界上。例如,密鑰指針726可以包含到密鑰數(shù)據(jù)記錄740的8字節(jié)(或更少)指針,并可以存儲在可被八整除的存儲器地址上(即8字節(jié)邊界或8N)。類似地,諸如TST和數(shù)據(jù)記錄的兩個搜索索引可以被構(gòu)建,以便4字節(jié)指針定位在存儲器內(nèi)的4字節(jié)邊界上。例如,節(jié)點支路指針724可以包含到節(jié)點730的4字節(jié)(或更少)指針,并可以存儲在可被四整除的存儲器地址上(即4字節(jié)邊界或4N)。因此,對數(shù)據(jù)庫700的修改可以通過使用單個不可中斷的操作來更新指向存儲器內(nèi)對準(zhǔn)地址的指針來結(jié)束,包括例如將新指針寫入搜索索引,例如TST節(jié)點,或者將新指針寫入數(shù)據(jù)記錄。
圖8是圖示根據(jù)本發(fā)明一種實施例的通用數(shù)據(jù)庫結(jié)構(gòu)的詳細(xì)方框圖。如上所述,數(shù)據(jù)庫800還可以組織成單個可搜索的數(shù)據(jù)表示。數(shù)據(jù)集更新可以被連續(xù)地并入數(shù)據(jù)庫800,并可以對相關(guān)數(shù)據(jù)庫物理地執(zhí)行刪除或修改以釋放存儲器104內(nèi)的空間,例如用于隨后的添加或修改。單個可搜索的表示也極限地定標(biāo)到大的數(shù)據(jù)集大小和高的搜索與更新速率,并避免了在多個搜索引擎計算機(jī)之中定期重新創(chuàng)建、傳播和重新裝載快照文件的需要。
其它的搜索索引結(jié)構(gòu)對于訪問記錄數(shù)據(jù)也是可能的。在一種實施例中,數(shù)據(jù)庫800可以使用一種可選的排序搜索索引,組織成排序訪問密鑰樹(即“OAK樹”)。數(shù)據(jù)庫800可以包括例如多個可變長度搜索節(jié)點801、多個可變長度密鑰記錄802和多個可變長度終端數(shù)據(jù)記錄803。搜索節(jié)點801可以包括上面描述的各種類型的信息,例如搜索密鑰、到其它搜索節(jié)點的指針和到密鑰記錄的指針、等等。在一種實施例中,多個搜索節(jié)點801可以包括包含搜索密鑰片段(fragment)(例如字符串)的垂直和水平節(jié)點以及到其它搜索節(jié)點或密鑰記錄的指針。垂直節(jié)點可以包括例如至少一個搜索密鑰或字符、到多個搜索節(jié)點801內(nèi)的水平節(jié)點的指針、到多個密鑰記錄802內(nèi)的密鑰記錄的指針等等。水平節(jié)點可以包括例如至少兩個搜索密鑰或字符、到多個搜索節(jié)點801內(nèi)的垂直節(jié)點的指針、到多個搜索節(jié)點801內(nèi)的水平節(jié)點的指針、到多個密鑰記錄802內(nèi)的密鑰記錄的指針等等。通常,垂直節(jié)點可以包括代表搜索密鑰片段(例如字符串)的密鑰序列(例如字符),而水平節(jié)點可以包括各種密鑰(例如字符),它們可以存在于搜索密鑰片段(例如字符串)內(nèi)的特定位置上。
在一種實施例中,多個搜索節(jié)點801可以包括垂直節(jié)點810、垂直節(jié)點820和水平節(jié)點830。垂直節(jié)點810例如可以包括2比特節(jié)點類型811(例如“10”)、38比特地址812、8比特長度813(例如“8”)、8比特第一字符814(例如“1”)和8比特第二字符815(例如“null(空)”)。在這個例子中,地址812可以指向搜索樹中的下一節(jié)點即垂直節(jié)點820。在一種實施例中,38比特地址812可以包括1比特終端/節(jié)點標(biāo)志和參考存儲器104的1T字節(jié)(1012字節(jié))地址空間內(nèi)的8字節(jié)字之一的37比特偏移地址。因此,垂直節(jié)點810的長度可以是8字節(jié)(64比特),并有利地,可以定位在存儲器104內(nèi)的8字節(jié)字邊界上。通常,多個搜索節(jié)點801內(nèi)的每個垂直節(jié)點可以定位在存儲器104內(nèi)的8字節(jié)字邊界上。
垂直節(jié)點可以包括多字符搜索密鑰片段(例如字符串)。通常,可以將沒有相關(guān)密鑰數(shù)據(jù)記錄的搜索密鑰壓縮成單個的垂直節(jié)點,以有效地降低在多個搜索節(jié)點801內(nèi)需要的垂直節(jié)點的數(shù)量。在一種實施例中,垂直節(jié)點810可以包括用于搜索密鑰片段內(nèi)兩個字符以上的每個附加字符的八個比特,例如8比特字符816-1、816-2、……、816-N(如剖視圖所示)。有利地,根據(jù)在串片段內(nèi)包含的附加字符數(shù)量,可以將垂直節(jié)點810填充到存儲器104內(nèi)的64比特邊界。例如,如果在垂直節(jié)點810內(nèi)將包括九個字符,則可以將字符一和二分別分配給第一字符814和第二字符815,并且可以將對應(yīng)于字符三至九的附加字符信息的56個比特添加給垂直節(jié)點810。可以包括填充的附加八個比特以對準(zhǔn)在8字節(jié)字邊界上的附加字符信息。
類似地,垂直節(jié)點820可以包括例如2比特節(jié)點類型821(例如“10”)、38比特地址822、8比特長度823(例如“8”)、8比特第一字符824(例如“a”)和8比特第二字符825(例如“空”)。在這個例子中,地址822可以指向搜索樹內(nèi)的下一個節(jié)點,即水平節(jié)點830。因此,垂直節(jié)點820的長度可以是八個字節(jié),并且有利地,可以定位在存儲器104內(nèi)的8字節(jié)字邊界上。當(dāng)然,如果需要的話,附加信息也可以包括在垂直節(jié)點820內(nèi),如上面參考垂直節(jié)點810所描述的。
水平節(jié)點830可以包括例如2比特節(jié)點類型831(例如“01”)、38比特第一地址832、8比特地址計數(shù)833(例如2)、8比特第一字符834(例如“·”)、8比特最后一個字符835(例如“w”)、可變長度位圖836和38比特第二地址837。在這個例子中,第一字符834可以包括代表用垂直節(jié)點810和820定義的搜索密鑰片段“l(fā)a”的單個字符“·”,而最后一個字符831可以包括代表由垂直節(jié)點810和820定義的搜索密鑰片段“l(fā)aw”的單個字符“w”和水平節(jié)點830的最后一個字符835。第一地址832可以指向與搜索密鑰片段“l(fā)a”相關(guān)的密鑰數(shù)據(jù)記錄840,而第二地址837可以指向與搜索密鑰片段“l(fā)aw”相關(guān)的密鑰數(shù)據(jù)記錄850。
位圖836可以有利地表示水平節(jié)點830參考哪一些密鑰(例如字符)。位圖836內(nèi)比特位置中的“1”表示該密鑰或字符被水平節(jié)點830參考,而位圖836內(nèi)比特位置內(nèi)的“0”可以表示該密鑰或字符不被水平節(jié)點830參考。通常,位圖836的長度可以取決于在第一字符834和第二字符835之間的順序密鑰或字符(包括這些邊界字符)的數(shù)量。例如,如果第一字符834是“a”和最后一個字符835是“z”,則位圖836的長度可以是26比特,其中每個比特對應(yīng)于在“a”至“z”之間的包括“a”到“z”的字符之一。在這個例子中,附加的38比特地址將被添加給水平節(jié)點830的末尾,對應(yīng)于在位圖836中表示的每個字符??梢蕴畛溥@些38比特地址中的每個地址以及位圖836,以對準(zhǔn)在存儲器104內(nèi)8字節(jié)字邊界上的每個數(shù)量值。在一種實施例中,八比特ASCII字符集可以被用作搜索密鑰空間,以便位圖836的長度可以是256比特(即28比特或32字節(jié))。在圖8所圖示的例子中,由于特殊參考字符“·”和“2”的地址計數(shù)833,位圖836的長度可以是兩個比特,并可以在對應(yīng)于最后一個字符835的每個比特位置中包括“1”。
在一種實施例中,并且如參考密鑰數(shù)據(jù)記錄750(圖7)討論的,密鑰數(shù)據(jù)記錄850可以包括例如可變長度密鑰853和至少一個終端數(shù)據(jù)指針。如圖8所示,密鑰數(shù)據(jù)記錄850包括兩個終端數(shù)據(jù)指針,即終端數(shù)據(jù)指針857和終端數(shù)據(jù)指針858。密鑰數(shù)據(jù)記錄850可以前綴有12比特密鑰長度851和12比特終端指針計數(shù)/狀態(tài)852,并可以包括填充(為了簡明未圖示),以便在存儲器104內(nèi)的8字節(jié)邊界上對準(zhǔn)終端數(shù)據(jù)指針857和終端數(shù)據(jù)指針858。終端數(shù)據(jù)指針857和終端數(shù)據(jù)指針858可以均包含10比特終端數(shù)據(jù)類型和其它數(shù)據(jù),例如長度、狀態(tài)或者在二進(jìn)制記錄搜索中有用的數(shù)據(jù)。終端數(shù)據(jù)指針857和終端數(shù)據(jù)指針858可以通過終端數(shù)據(jù)類型來排序,以便更快地檢索特定資源記錄(例如終端數(shù)據(jù)記錄860和終端數(shù)據(jù)記錄870)。
在一種實施例中,并且如上面參考密鑰數(shù)據(jù)記錄740(圖7)所討論的,密鑰數(shù)據(jù)記錄840可以包括嵌入終端數(shù)據(jù)846,而不是終端數(shù)據(jù)記錄指針。例如,密鑰數(shù)據(jù)記錄840可以包括密鑰長度841、終端指針計數(shù)842、可變長度密鑰843、嵌入記錄元素的數(shù)量844、繼之以記錄元素長度845(例如以字節(jié)為單位)和用于每個嵌入記錄元素數(shù)量844的嵌入記錄數(shù)據(jù)846(例如字符串、字節(jié)序列、等等)。
在另一種實施例中,并且如參考終端數(shù)據(jù)記錄760(圖7)所討論,終端數(shù)據(jù)記錄860例如可以包括12比特長度861、4比特狀態(tài)和可變長度串862(例如IP地址)??蛇x擇地,可變長度串862可以是字節(jié)序列。終端數(shù)據(jù)記錄860可以包括填充(為了簡明未圖示)以對準(zhǔn)每個終端數(shù)據(jù)記錄與存儲器104內(nèi)的8字節(jié)邊界??蛇x擇地,終端數(shù)據(jù)記錄860可以包括到4字節(jié)邊界的填充(為了簡明未圖示),或者終端數(shù)據(jù)記錄860可以不包括任何填充。存儲器管理算法通??梢源_定終端數(shù)據(jù)記錄760是填充到8字節(jié)、4字節(jié)還是填充到0字節(jié)邊界。類似地,終端數(shù)據(jù)記錄870可以包括12比特長度871、4比特狀態(tài)和可變長度串872(例如IP地址)。
通常,諸如OAK樹和數(shù)據(jù)記錄的兩個搜索索引可以被構(gòu)建,以便8字節(jié)指針定位在存儲器內(nèi)的8字節(jié)邊界上。例如,垂直節(jié)點810可以包含到垂直節(jié)點820的8字節(jié)(或更少)的指針,并可以存儲在可被八整除的存儲器地址上(即8字節(jié)邊界或8N)。類似地,諸如OAK樹和數(shù)據(jù)記錄的兩個搜索索引可以被構(gòu)建,以便將4字節(jié)指針定位在存儲器內(nèi)的4字節(jié)邊界上。因此,對數(shù)據(jù)庫800的修改可以結(jié)束于使用單個不可中斷操作將指針更新成存儲器內(nèi)的對準(zhǔn)地址,例如包括將新指針寫入搜索索引,例如OAK樹節(jié)點,或者將新指針寫入數(shù)據(jù)記錄。
上面參考圖8討論的各種實施例具有許多優(yōu)點。例如,OAK樹數(shù)據(jù)結(jié)構(gòu)的空間非常有效,并且是8比特清潔(clean)的??梢允褂贸R?guī)的表達(dá)搜索來搜索包含多字符串片段的垂直節(jié)點,因為8比特第一字符(例如第一字符814)、8比特第二字符(例如第二字符8-15)和任一附加8比特字符(例如附加字符816-1、……、816-N)可以連續(xù)地定位在垂直節(jié)點(例如垂直節(jié)點810)內(nèi)??梢钥焖俚匕l(fā)現(xiàn)搜索丟失,并且可能不需要遍歷超過N個節(jié)點來搜索N字符長度搜索串。
圖9是圖示根據(jù)本發(fā)明一種實施例的在不使用操作系統(tǒng)或數(shù)據(jù)庫表格鎖的情況下用于搜索和同時更新數(shù)據(jù)庫的方法的頂級流程圖。
可以創(chuàng)建更新線程和多個搜索線程(900)。在一種實施例中,系統(tǒng)100可以生成單個更新線程以便將更新并入例如在WAN 124上從OLTP服務(wù)器140-1接收到的本地數(shù)據(jù)庫。在其它的實施例中,系統(tǒng)100可以在WAN 124上從OLTP服務(wù)器140-1、……、140-S或者在WAN 124或LAN 122上從多個網(wǎng)絡(luò)計算機(jī)120-1、……、120-N接收更新。系統(tǒng)100還可以響應(yīng)于從多個網(wǎng)絡(luò)計算機(jī)120-1、……、120-N接收到的每個對話請求而生成搜索線程。例如,管理器線程可以輪詢與一個或多個網(wǎng)絡(luò)接口114-1、……、114-O相關(guān)的一個或多個控制端口有關(guān)從多個網(wǎng)絡(luò)計算機(jī)120-1、……、120-N發(fā)送的對話請求。一旦接收到來自特定網(wǎng)絡(luò)計算機(jī)120-1、……、120-N的對話請求,則管理線程可以生成搜索線程,并將該搜索線程與特定網(wǎng)絡(luò)計算機(jī)(例如PE)相關(guān)。
在可選實施例中,系統(tǒng)100可以生成多個搜索線程,而不輪詢來自多個網(wǎng)絡(luò)計算機(jī)120-1、……、120-N的對話請求。在這個實施例中,搜索線程可以不與特定網(wǎng)絡(luò)計算機(jī)相關(guān),并可以均勻地分配在多個處理器102-1、……、102-P之間??蛇x擇地,搜索線程可以在多個處理器102-1、……、102-P的子集上執(zhí)行。搜索線程的數(shù)量可以不一定匹配網(wǎng)絡(luò)計算機(jī)的數(shù)量(例如N)。
可以在網(wǎng)絡(luò)上接收多個搜索查詢(910)。在一種實施例中,多個網(wǎng)絡(luò)計算機(jī)120-1、……、120-N可以在LAN 122或可選擇地在WAN 124上將多個搜索查詢發(fā)送給系統(tǒng)100。多個搜索查詢例如可以包含搜索項目或密鑰以及可以與每個查詢相關(guān)的狀態(tài)信息(例如查詢源地址、協(xié)議類型、等等)。狀態(tài)信息可以明確地由系統(tǒng)100維持,或者可選擇地,可以提供狀態(tài)信息手柄。在優(yōu)選實施例,多個網(wǎng)絡(luò)計算機(jī)120-1、……、120-N中的每個計算機(jī)可以將預(yù)定數(shù)量的搜索查詢復(fù)用成用于傳送給系統(tǒng)100的單個網(wǎng)絡(luò)分組(例如圖2中圖示的請求超分組220)。
在一種可選實施例中,可以在網(wǎng)絡(luò)上同時接收多個搜索查詢和新信息(910,960)。例如,多個網(wǎng)絡(luò)計算機(jī)120-1、……、120-N可以在LAN 122或可選擇地在WAN 124上將多個搜索查詢和新信息發(fā)送給系統(tǒng)100。多個搜索查詢例如可以包含搜索項目或密鑰以及可以與每個查詢相關(guān)的狀態(tài)信息(例如查詢源地址、協(xié)議類型、等等)。新信息可以包括例如對數(shù)據(jù)庫的添加、修改或刪除,并可以組合在一起作為帶有相關(guān)標(biāo)識符的事務(wù)處理。例如,在一種實施例中,多個網(wǎng)絡(luò)計算機(jī)120-1、……、120-N中的每個計算機(jī)可以將預(yù)定數(shù)量的搜索查詢和新信息復(fù)用成用于傳送給系統(tǒng)100的單個網(wǎng)絡(luò)分組,例如單個請求超分組220(為了簡明未圖示出新信息)。對于取決于事務(wù)處理內(nèi)的新信息的那些查詢來說,與那些查詢有關(guān)的狀態(tài)信息可以包括事務(wù)處理標(biāo)識符,和典型地,可以由系統(tǒng)100來維護(hù)。當(dāng)更新線程將事務(wù)處理應(yīng)用于數(shù)據(jù)庫(即,例如正在進(jìn)行事務(wù)處理)時,取決于事務(wù)處理的搜索查詢將暫停,直至更新線程成功地完成并提交事務(wù)處理。
每個搜索查詢可以被分配給搜索線程之一用于處理(920)。在一種實施例中,每個搜索線程可以與多個網(wǎng)絡(luò)計算機(jī)120-1、……、120-N之一相關(guān),并可以將從特定網(wǎng)絡(luò)計算機(jī)接收到的所有搜索查詢分配給搜索線程(920)。換句話說,一個搜索線程可以處理從單個網(wǎng)絡(luò)計算機(jī)(例如單個PE)抵達(dá)的所有搜索查詢。在一種實施例中,每個搜索線程可以從單個復(fù)用的網(wǎng)絡(luò)分組(例如如圖2所示的請求超分組220)中提取各個搜索查詢,或者可選擇地,可以由不同的處理或線程來執(zhí)行該提取。
在另一種實施例中,可以將從多個網(wǎng)絡(luò)計算機(jī)120-1、……、120-N中的每個計算機(jī)接收到的搜索查詢分配給不同的搜索線程(920)。在這個實施例中,多線程分配可以基于最佳分布函數(shù),此函數(shù)可以合并包括例如處理器負(fù)載的各個系統(tǒng)參數(shù)。當(dāng)然,根據(jù)各個系統(tǒng)參數(shù),包括處理器可用性、系統(tǒng)組件性能等,搜索查詢到搜索線程的分配可以隨著時間而改變??梢允褂酶鞣N機(jī)制來將搜索查詢傳送給系統(tǒng)100內(nèi)所分配的搜索線程,例如共享存儲器、處理間消息、令牌、信號量、等等。
每個搜索線程可以根據(jù)所分配的搜索查詢搜索數(shù)據(jù)庫(930)。在一種實施例中,每個搜索線程可以從單個復(fù)用的網(wǎng)絡(luò)分組(例如如圖2所示的請求超分組220)提取各個搜索查詢,或者可選擇地,可以通過不同的處理或線程執(zhí)行該提取。顯然,搜索數(shù)據(jù)庫可以取決于數(shù)據(jù)庫的基礎(chǔ)結(jié)構(gòu)。在一種實施例中,搜索數(shù)據(jù)庫可以取決于在特定事務(wù)處理內(nèi)包含的用于取決于該事務(wù)處理的那些搜索查詢的修改。
參見圖4所示的數(shù)據(jù)庫實施例,可以在數(shù)據(jù)庫400中搜索搜索密鑰(930)。隨后,可以確定對應(yīng)于搜索密鑰的數(shù)據(jù)記錄(例如數(shù)據(jù)庫記錄420)。參見圖5所示的數(shù)據(jù)庫實施例,可以首先在后備文件520中搜索搜索密鑰(930),并且如果未確定匹配,則可以搜索快照文件510(930)。隨后,可以確定對應(yīng)于搜索密鑰的數(shù)據(jù)記錄。
參見圖6所示的數(shù)據(jù)庫實施例,可以首先在域名數(shù)據(jù)610中搜索搜索密鑰(930),并隨后可以確定在名稱服務(wù)器數(shù)據(jù)630內(nèi)對應(yīng)于搜索密鑰的源數(shù)據(jù)。例如,對于“l(fā)a.com”搜索密鑰,可以確定與域名數(shù)據(jù)610內(nèi)的域名記錄620的匹配??梢蕴崛『线m的信息,包括例如名稱服務(wù)器指針626。隨后,可以使用名稱服務(wù)器指針626來索引合適的名稱服務(wù)器記錄640,并可以提取名稱服務(wù)器網(wǎng)絡(luò)地址647。
參見圖7所示的數(shù)據(jù)庫實施例,可以在TST中搜索搜索密鑰(930),從中可以確定源數(shù)據(jù)。例如,對于“l(fā)aw.com”搜索密鑰,可以搜索搜索節(jié)點701(930),并確定與節(jié)點730的匹配??梢蕴崛∶荑€指針736,從中可以確定密鑰數(shù)據(jù)記錄750。隨后可以識別終端數(shù)據(jù)指針752的數(shù)量,并可以提取每個終端數(shù)據(jù)指針。例如,終端數(shù)據(jù)指針757可以參考終端數(shù)據(jù)記錄760,而終端數(shù)據(jù)指針758可以參考終端數(shù)據(jù)記錄770。隨后,可以分別使用長度761和771從每個終端數(shù)據(jù)記錄中提取可變長度源數(shù)據(jù)例如名稱服務(wù)器網(wǎng)絡(luò)地址762和名稱服務(wù)器網(wǎng)絡(luò)地址772。
參見圖8所示的數(shù)據(jù)庫實施例,可以在OAK樹中搜索搜索密鑰(930),據(jù)此可以確定源數(shù)據(jù)。例如,對于“l(fā)aw.com”搜索密鑰,可以搜索搜索節(jié)點801(930),并確定與節(jié)點830的匹配??梢蕴崛〉诙刂?37,據(jù)此可以確定密鑰數(shù)據(jù)記錄850。隨后可以識別終端數(shù)據(jù)指針的數(shù)量852,并可以提取每個終端數(shù)據(jù)指針。例如,終端數(shù)據(jù)指針857可以參考終端數(shù)據(jù)記錄860,并且終端數(shù)據(jù)指針858可以參考終端數(shù)據(jù)記錄870。隨后,可以分別使用長度861和871從每個終端數(shù)據(jù)記錄中提取可變長度源數(shù)據(jù)例如名稱服務(wù)器網(wǎng)絡(luò)地址862和名稱服務(wù)器網(wǎng)絡(luò)地址872。
每個搜索線程可以創(chuàng)建(940)對應(yīng)于所分配的搜索查詢的多個搜索應(yīng)答。如果對于特定搜索密鑰未找到匹配,則應(yīng)答可以包括合適的指示,例如空字符。參見圖6至圖8,例如,搜索密鑰可以是“l(fā)aw.com”,并且相應(yīng)的源數(shù)據(jù)可以是“180.1.1.1”。一個以上的名稱服務(wù)器網(wǎng)絡(luò)地址可以與搜索密鑰相關(guān),在這種情況下,可以確定一個以上的名稱服務(wù)器網(wǎng)絡(luò)地址。
可以在網(wǎng)絡(luò)上發(fā)送這些應(yīng)答(950)。在一種實施例中,每個搜索線程可以將合適的應(yīng)答復(fù)用到單個網(wǎng)絡(luò)分組(例如響應(yīng)超分組240),所述網(wǎng)絡(luò)分組對應(yīng)于包含原始查詢的單個網(wǎng)絡(luò)分組(例如請求超分組220)??蛇x擇地,不同的處理或線程可以將合適的應(yīng)答復(fù)用在單個網(wǎng)絡(luò)分組內(nèi)。隨后,可以通過LAN 122或可選擇地通過WAN 124將響應(yīng)網(wǎng)絡(luò)分組發(fā)送給多個網(wǎng)絡(luò)計算機(jī)120-1、……、120-N內(nèi)的合適網(wǎng)絡(luò)計算機(jī)(950)。在一種實施例中,可以將響應(yīng)分組發(fā)送給從中始發(fā)請求分組的同一網(wǎng)絡(luò)計算機(jī),而在另一個實施例中,可以將響應(yīng)分組發(fā)送給不同的網(wǎng)絡(luò)計算機(jī)。
更新線程可以在網(wǎng)絡(luò)上接收新信息(960)。在一種實施例中,例如,可以在WAN 124上從OLTP服務(wù)器140-1向系統(tǒng)100發(fā)送新信息。在其它實施例中,系統(tǒng)100可以在WAN 124上從OLTP服務(wù)器140-1、……、140-S接收更新,或者在WAN 124或LAN 122上從多個網(wǎng)絡(luò)計算機(jī)120-1、……、120-N接收更新。如上面所討論的,在一種實施例中,多個網(wǎng)絡(luò)計算機(jī)120-1、……、120-N可以在LAN 122上或者可選擇地在WAN 124上將多個搜索查詢和新信息發(fā)送給系統(tǒng)100。因此,在這個實施例中,可以在網(wǎng)絡(luò)上同時接收多個搜索查詢和新信息(910,960)。
在DNS解析實施例中,例如,新信息可以包括新域名數(shù)據(jù)、新名稱服務(wù)器數(shù)據(jù)、用于現(xiàn)有域名的新名稱服務(wù)器、等等??蛇x擇地,新信息可以表示域名記錄和名稱服務(wù)器記錄等可以從數(shù)據(jù)庫中刪除。通常,在合適的時候,可以添加、修改或刪除在數(shù)據(jù)庫內(nèi)包含的任何信息。在一種實施例中,可以將對數(shù)據(jù)庫的若干修改組合在一起作為事務(wù)處理,并作為一致的修改集合應(yīng)用于數(shù)據(jù)庫。
例如,事務(wù)處理可以包括數(shù)據(jù)記錄添加、修改或刪除的各種組合。因為不限制對數(shù)據(jù)庫的搜索訪問,所以可以在每個數(shù)據(jù)庫記錄中提供指示符字段(例如“修改位(dirty bit)”),以便向搜索線程通知何時為特定數(shù)據(jù)庫記錄設(shè)置修改位、與事務(wù)處理相關(guān)的數(shù)據(jù)庫修改正在進(jìn)行中和需要該特定數(shù)據(jù)庫記錄的隨后的查詢重試。一旦已經(jīng)應(yīng)用事務(wù)處理并完成修改,則可以對于受該事務(wù)處理影響的所有新數(shù)據(jù)庫元素清除這些修改位。在某種意義上,可以認(rèn)為新信息被“提交”。因而,數(shù)據(jù)庫可以從一種有效狀態(tài)轉(zhuǎn)換到另一種有效狀態(tài)而不限制對數(shù)據(jù)庫的搜索訪問。
有利地,不需要操作系統(tǒng)或數(shù)據(jù)庫表格鎖來防止搜索查詢在這些更新周期內(nèi)訪問數(shù)據(jù)庫。導(dǎo)致輕微的性能惡化,因為在確定將為任何特定數(shù)據(jù)庫記錄設(shè)置修改位時可能需要重復(fù)搜索查詢。修改位可以定位在數(shù)據(jù)庫記錄的最高有效字內(nèi),所以只要例如將該字從存儲器104傳送給處理器102-1,則可以檢查該比特。因而,如果確定要設(shè)置修改位,則可以避免與數(shù)據(jù)庫記錄的其余部分相關(guān)的其它存儲器傳輸。對于參見圖1討論的示例性系統(tǒng)實施例來說,查詢重試周期可以在納秒的量級上。典型地,可以在查詢重試再次訪問特定數(shù)據(jù)庫記錄之前清除修改位。
可選擇地,或者當(dāng)在正在進(jìn)行事務(wù)處理的過程中設(shè)置修改位時,可以根據(jù)重新執(zhí)行工作記錄(redo log)或工作記錄管理器的內(nèi)容重新構(gòu)建時間點一致的查詢結(jié)果,例如,如在事務(wù)處理數(shù)據(jù)庫系統(tǒng)內(nèi)通常的做法。對于由于并非正在進(jìn)行的事務(wù)處理一部分的單個進(jìn)行中修改而可能遇到修改位的搜索查詢來說,重復(fù)查詢通??赡軐?dǎo)致比從工作記錄管理器重新構(gòu)建查詢結(jié)果更低的性能二話。當(dāng)修改位是由于帶有在擴(kuò)展時間周期上接收到的修改擴(kuò)展集的正在進(jìn)行事務(wù)處理而引起時,可能最好從工作記錄管理器重新構(gòu)建查詢結(jié)果,以便可以不過度延遲查詢結(jié)果。
當(dāng)單個事務(wù)處理內(nèi)的數(shù)據(jù)庫記錄修改的數(shù)量通常是不受限制的時候,通常,事務(wù)處理包括足夠的信息來維持?jǐn)?shù)據(jù)庫的可分性、一致性、隔離性和持久性。可以為圖4和圖6至圖8中圖示的每個數(shù)據(jù)庫實施例預(yù)見多種不同的事務(wù)處理。參見圖4,例如,事務(wù)處理可以包括修改數(shù)據(jù)庫記錄410和420、修改數(shù)據(jù)庫記錄420和添加新數(shù)據(jù)庫記錄(例如數(shù)據(jù)庫記錄430)、修改數(shù)據(jù)庫記錄420和刪除數(shù)據(jù)庫記錄(例如數(shù)據(jù)庫記錄410)、等等。參見圖6,例如事務(wù)處理可以包括修改域名記錄620和名稱服務(wù)器記錄640、刪除域名記錄620和添加域名記錄615、等等。參見圖7,例如,事務(wù)處理可以包括修改密鑰數(shù)據(jù)記錄750和終端數(shù)據(jù)記錄760,并刪除終端數(shù)據(jù)記錄770、添加密鑰數(shù)據(jù)記錄780和刪除密鑰數(shù)據(jù)記錄740、等等。類似地,參見圖8,例如,事務(wù)處理可以包括修改密鑰數(shù)據(jù)記錄850和終端數(shù)據(jù)記錄860并刪除終端數(shù)據(jù)記錄870、添加密鑰數(shù)據(jù)記錄880和刪除密鑰數(shù)據(jù)記錄840、等等。
更新線程可以根據(jù)新信息創(chuàng)建多個新元素(970)。典型地,通過根據(jù)現(xiàn)有元素創(chuàng)建新元素并隨后修改新元素以包括新信息,可以合并對數(shù)據(jù)庫的現(xiàn)有元素內(nèi)包括的信息的修改。在這個處理過程期間,新元素對于當(dāng)前在系統(tǒng)100上執(zhí)行的搜索線程或處理來說是不可見的,直至已經(jīng)將指向新元素的指針寫入數(shù)據(jù)庫。通常,可以以類似的方式完成對數(shù)據(jù)庫的添加,而不需要使用在現(xiàn)有元素內(nèi)包含的信息。在一種實施例中,可以通過向數(shù)據(jù)庫中添加新的明確的“刪除”元素來完成從數(shù)據(jù)庫中刪除現(xiàn)有的元素。在另一種實施例中,可以通過利用合適指示符(例如空指針等)改寫到現(xiàn)有元素的指針來實現(xiàn)從數(shù)據(jù)庫中刪除現(xiàn)有元素。在這個實施例中,更新線程并不在包含新信息的數(shù)據(jù)庫中創(chuàng)建新元素。
參見圖4,例如,可以從與數(shù)據(jù)庫記錄401相關(guān)的存儲庫(pool)中分配用于新數(shù)據(jù)記錄(例如數(shù)據(jù)記錄430)的存儲空間??梢詫⑿滦畔⒖截惖綌?shù)據(jù)記錄430的數(shù)據(jù)432,并且可以計算其它信息,并添加給數(shù)據(jù)記錄430,例如鏈指針434、數(shù)據(jù)指針435、等等。修改位408也可以包括在新數(shù)據(jù)記錄430內(nèi)。參見圖6至圖8所示的數(shù)據(jù)庫實施例,例如,新信息可以包括將要添加給數(shù)據(jù)庫的新域名和/或域名服務(wù)器。
參見圖6,例如,可以從與域名記錄611相關(guān)的存儲庫或者可選擇地從與域名數(shù)據(jù)610相關(guān)的通用存儲庫中分配用于新域名記錄615的存儲空間。新域名可以被標(biāo)準(zhǔn)化并被拷貝到新域名記錄615,到現(xiàn)有名稱服務(wù)器的指針(例如名稱服務(wù)器記錄655)可以被確定并被拷貝到新域名記錄615。修改位618可以包括在新域名記錄615內(nèi)??捎嬎闫渌畔⒉⑻砑拥叫掠蛎涗?15,例如名稱服務(wù)器的數(shù)量、鏈指針、等等。在更復(fù)雜的例子中,新信息可以包含帶有相應(yīng)資源數(shù)據(jù)的新搜索密鑰。
參見圖7,在更復(fù)雜的例子中,可以創(chuàng)建新搜索節(jié)點705以及新密鑰數(shù)據(jù)記錄780。在這個例子中,新搜索節(jié)點705可以包括第一位置內(nèi)的比較字符(“m”),它大于現(xiàn)有搜索節(jié)點710的第一位置內(nèi)的比較字符(“1”)。因此,可以在與搜索節(jié)點710相同的“級別”(即第一字符位置)上將搜索節(jié)點705插入TST中。在將搜索節(jié)點705提交給數(shù)據(jù)庫之前,搜索節(jié)點710的4字節(jié)“大于”指針715可以包含“空”指針。搜索節(jié)點705還可以包括4字節(jié)密鑰指針706,它可以包含指向新密鑰數(shù)據(jù)記錄780的40比特指針。密鑰數(shù)據(jù)記錄780可以包括密鑰長度781(例如“5”)和類型782(例如表示嵌入的源數(shù)據(jù))、可變長度密鑰783(例如“m.com”)、嵌入源的數(shù)量784(例如“1”)、源長度785(例如“9”)、可變長度源串786或字節(jié)序列(例如“180.1.1.1”)和修改位707。可以從與TST節(jié)點701相關(guān)的存儲庫分配用于搜索節(jié)點705的存儲空間,而從與多個密鑰數(shù)據(jù)記錄702相關(guān)的存儲庫中分配用于密鑰數(shù)據(jù)記錄770的存儲空間。
參見圖8,例如,可以創(chuàng)建新搜索節(jié)點890以及新密鑰數(shù)據(jù)記錄880。在這個例子中,新搜索節(jié)點890可以是水平節(jié)點,包括例如兩比特節(jié)點類型891(例如“01”)、38比特第一地址892、八比特地址計數(shù)893(例如2)、八比特第一字符894(“例如“1”)、八比特最后字符895(例如“m”)、可變長度位圖896和38比特第二地址897。第一地址892可以指向垂直節(jié)點820,即在“1<...>”搜索串路徑內(nèi)的下一垂直節(jié)點,而第二地址897可以指向與搜索密鑰片段“m”相關(guān)的密鑰數(shù)據(jù)記錄880。密鑰數(shù)據(jù)記錄880可以包括密鑰長度881(例如“5”)和類型882(例如表示嵌入的源數(shù)據(jù))、可變長度密鑰883(例如“m.com”)、嵌入源數(shù)量884(例如“1”)、源長度885(例如“9”)、可變長度源串886或字節(jié)序列(例如“180.1.1.1”)和修改位807。可以從與多個搜索節(jié)點801相關(guān)的存儲庫分配用于搜索節(jié)點890的存儲空間,而從與多個密鑰數(shù)據(jù)記錄702相關(guān)的存儲庫中分配用于密鑰數(shù)據(jù)記錄880的存儲空間。
新信息還可以包括對數(shù)據(jù)庫內(nèi)現(xiàn)有記錄的若干修改。參見圖4,新信息可以包括對數(shù)據(jù)記錄410的修改。在這個例子中,可以創(chuàng)建新數(shù)據(jù)記錄420,并向其拷貝來自數(shù)據(jù)記錄410的信息。如上所述,可以從與數(shù)據(jù)庫記錄401相關(guān)的存儲庫中分配用于數(shù)據(jù)記錄420的存儲空間。隨后,可以將這些修改應(yīng)用于數(shù)據(jù)422。數(shù)據(jù)記錄410和420還可以分別包括修改位406和407。
參見圖6,新信息可以包括對名稱服務(wù)器記錄640的修改,例如新IP地址(例如“180.2.1.2”)。在這個例子中,可以創(chuàng)建新名稱服務(wù)器記錄660,并向其拷貝來自舊名稱服務(wù)器記錄640的信息。如上所述,可以從與名稱服務(wù)器記錄631相關(guān)的存儲庫中分配用于名稱服務(wù)器記錄660的存儲空間,或者可選擇地,從與名稱服務(wù)器數(shù)據(jù)630相關(guān)的通用存儲庫中分配存儲空間。隨后,可以將新名稱服務(wù)器IP地址拷貝到名稱服務(wù)器記錄660即例如名稱服務(wù)器IP地址667中的合適字段。修改位668可以包括在新的名稱服務(wù)器記錄660內(nèi)。類似的對參考圖7和圖8描述的數(shù)據(jù)庫實施例內(nèi)各種元素的修改也被預(yù)料。
新信息還可以包括刪除數(shù)據(jù)庫內(nèi)的至少一個現(xiàn)有元素。在一種實施例中,可以不創(chuàng)建新的元素,但是可以由更新線程設(shè)置將要刪除的元素的修改位。在另一種實施例中,可以創(chuàng)建新的明確的“刪除”元素,帶有設(shè)置的修改位,表示已經(jīng)從數(shù)據(jù)庫中刪除先前的元素。參見圖4,例如,新信息可以包括刪除數(shù)據(jù)記錄410,其可以包括修改位407。參見圖6,例如,新信息可以包括刪除域名記錄670,其可以包括修改位678。類似的對上面參考圖7和圖8描述的數(shù)據(jù)庫實施例內(nèi)的各種元素的刪除也被預(yù)料。
更新線程可以設(shè)置(975)多個新元素中每個元素內(nèi)的修改位。如上面所指出的,修改位可以向搜索線程通知特定數(shù)據(jù)庫記錄與當(dāng)前事務(wù)處理相關(guān),以及應(yīng)當(dāng)執(zhí)行隨后的數(shù)據(jù)庫的查詢重試。因而,可以識別出受事務(wù)處理影響的每個數(shù)據(jù)庫記錄。參見圖4和圖6至圖8,例如,更新線程可以設(shè)置受事務(wù)處理影響的每個數(shù)據(jù)庫記錄內(nèi)的修改位。分別地,可以為新數(shù)據(jù)記錄430將修改位408設(shè)置為“1”,并且可以為已修改的數(shù)據(jù)記錄410和420將修改位407和406設(shè)置為“1”。分別地,可以為新域名記錄615將修改位618設(shè)置為“1”,并且可以為已修改的名稱服務(wù)器記錄640和660將修改位606和668設(shè)置為“1”。分別地,可以為新的密鑰數(shù)據(jù)記錄780和880將修改位707和807設(shè)置為“1”。
為了清楚起見,通過流程圖連接符號“A”將在圖9中圖示的頂級流程圖擴(kuò)展到圖10。參見圖10,對于將要刪除的數(shù)據(jù)庫記錄,更新線程也可以設(shè)置(1075)合適數(shù)據(jù)庫記錄內(nèi)的修改位。例如,可以為刪除的數(shù)據(jù)記錄410將修改位407設(shè)置為“1”,并且可以為刪除的域名記錄670將修改位678設(shè)置為“1”??梢詫?shù)據(jù)記錄420和430、域名記錄615、名稱服務(wù)器記錄660和密鑰數(shù)據(jù)記錄780與880視為數(shù)據(jù)庫內(nèi)的“新”元素,而將已修改的數(shù)據(jù)記錄410、已修改的名稱服務(wù)器記錄640、已刪除的數(shù)據(jù)記錄410和已刪除的域名記錄670視為數(shù)據(jù)庫內(nèi)的“舊”元素。在這些例子中,將數(shù)據(jù)記錄410用作“已修改”數(shù)據(jù)記錄和用作“已刪除”數(shù)據(jù)記錄。
更新線程可以使用單個不可中斷操作將指針寫入(980)數(shù)據(jù)庫。通常,通過將指向新元素的指針寫入數(shù)據(jù)庫內(nèi)的合適位置,可以將新元素提交給數(shù)據(jù)庫,(即變成對于搜索線程或處理來說是立即可見的)。如上面所討論的,這個合適的位置可以在存儲器內(nèi)被對準(zhǔn),以便單個操作包括合適長度的單個存儲指令。即使在指針寫入之后新元素對于搜索線程可以是可見的,“設(shè)置”修改位向搜索線程通知每個新數(shù)據(jù)庫元素可以是當(dāng)前事務(wù)處理的一部分,并且根據(jù)重新執(zhí)行工作記錄的隨后的查詢重試或重新構(gòu)建可以是必需的。對于包含多個索引的數(shù)據(jù)庫實施例來說,對于一個索引可能包含指向“舊”元素的指針,而另一個索引包含指向“新”元素的指針。因此,在DNS解析實施例中,例如,帶有相同域名或原始密鑰的兩個域名記錄可以同時存在于搜索空間內(nèi),但是在事務(wù)處理過程期間僅涉及用于唯一索引的那個記錄。
參見圖4,可以將對應(yīng)于新數(shù)據(jù)記錄430的8字節(jié)指針寫入散列表403。參見圖6,可以將對應(yīng)于新域名記錄615的8字節(jié)指針寫入散列表612。重要的是,這些散列表表目可以在存儲器104內(nèi)的8字節(jié)邊界上被對準(zhǔn),以確保使用單個8字節(jié)存儲指令來更新這個值。參見圖7,可以將對應(yīng)于新搜索節(jié)點705的4字節(jié)指針寫入搜索節(jié)點710內(nèi)的4字節(jié)“大于”節(jié)點指針715。重要的是,節(jié)點指針715可以在存儲器104內(nèi)的4字節(jié)邊界上被對準(zhǔn),以確保可以使用單個4字節(jié)存儲指令來更新這個值。參見圖8,多個搜索節(jié)點801也可以包括樹頂(top-of-tree)地址899,它可以在存儲器104內(nèi)的8字節(jié)字邊界上被對準(zhǔn),并可以參考多個搜索節(jié)點801(即例如垂直節(jié)點810)內(nèi)的第一節(jié)點??梢允褂脝蝹€存儲指令將對應(yīng)于新搜索節(jié)點890的8字節(jié)指針寫入樹頂?shù)刂?99。在這每一個實施例中,恰好在存儲指令之前,新數(shù)據(jù)對于搜索線程是不可見的,而恰好在存儲指令之后,新數(shù)據(jù)對于搜索線程是可見的。因而,使用單個不可中斷的操作,可以在不使用操作系統(tǒng)或數(shù)據(jù)庫表格鎖的情況下將新數(shù)據(jù)提交給數(shù)據(jù)庫。
參見圖10,對于將要從數(shù)據(jù)庫刪除的數(shù)據(jù)庫記錄來說,在一種實施例中,可以使用單個不可中斷的操作利用空指針寫入指向現(xiàn)有記錄的一個或多個指針??罩羔樋梢越獬齾⒖?de-reference)現(xiàn)有記錄,并表示已經(jīng)從數(shù)據(jù)庫中刪除現(xiàn)有記錄。參見圖4,例如,通過使用8字節(jié)空指針改寫散列表403內(nèi)的合適表目,可以從數(shù)據(jù)庫400中刪除數(shù)據(jù)記錄410。參見圖6,例如,通過使用8字節(jié)空指針改寫散列表612內(nèi)的合適表目,可以從數(shù)據(jù)庫600中刪除域名記錄670。在可選實施例中,可以將對應(yīng)于“已刪除”域名記錄670的指向新的“明確”刪除記錄的8字節(jié)指針寫入散列表613。在這個實施例中,可以類似地完成對數(shù)據(jù)的修改、添加和刪除。
更新線程可以清除(985)多個新元素之中每個元素內(nèi)的修改位。在一種實施例中,可以通過將修改位設(shè)置為“0”,從每個新元素中清除修改位。例如,并且如參考圖4和圖6至圖8所討論的,修改位406和408對于數(shù)據(jù)記錄420和430可以分別設(shè)置為“0”。修改位618對于域名記錄615可以設(shè)置為“0”,修改位606和668對于名稱服務(wù)器記錄640和660可以分別地設(shè)置為“0”。修改位707和807對于密鑰數(shù)據(jù)記錄780和880可以分別地設(shè)置為“0”。在一種實施例,修改位以任意順序?qū)τ诿總€新元素可以設(shè)置為“0”。在已經(jīng)清除(985)每個新元素內(nèi)的修改位之后,“舊的”或現(xiàn)有的數(shù)據(jù)庫元素不再有效,即在數(shù)據(jù)庫內(nèi)被參考。在一種實施例中,隨后可以通過將修改位設(shè)置為“0”來清除這些元素內(nèi)的修改位,而在可選的實施例中,可以完全不清除這些修改位。
在一種實施例中,更新線程可以物理地刪除(990)在從每個新元素清除(985)修改位之后已被修改的現(xiàn)有數(shù)據(jù)庫元素。有利地,可以延遲從存儲器104中物理刪除這些已修改元素,從而保持正在進(jìn)行的搜索的一致性。例如,在已修改現(xiàn)有的元素并將相應(yīng)新元素提交給數(shù)據(jù)庫之后,可以延遲從存儲器104中物理地刪除現(xiàn)有元素,以便具有恰在新元素被提交給數(shù)據(jù)庫之前獲得的結(jié)果的現(xiàn)有搜索線程可以繼續(xù)使用數(shù)據(jù)的先前狀態(tài)。在已經(jīng)完成在修改現(xiàn)有元素之前開始的所有搜索線程之后,更新線程可以物理地刪除(990)現(xiàn)有元素。
類似地,在已經(jīng)從數(shù)據(jù)庫刪除現(xiàn)有元素之后,可以延遲從存儲器104物理刪除現(xiàn)有元素,以便具有恰在從數(shù)據(jù)庫刪除現(xiàn)有元素之前獲得的結(jié)果的現(xiàn)有搜索線程可以繼續(xù)使用數(shù)據(jù)的先前狀態(tài)。參見圖10,在已經(jīng)完成在刪除現(xiàn)有元素之前開始的所有搜索線程之后,更新線程可以物理地刪除(1090)現(xiàn)有元素。
潛在的復(fù)雜性可能因為與本發(fā)明實施例相關(guān)的方法以及系統(tǒng)100的各種結(jié)構(gòu)特性的相互作用而產(chǎn)生。例如,在其上執(zhí)行更新線程的處理器(例如處理器102-1、102-2、等等)可以包括硬件以支持無序的指令執(zhí)行。在另一個例子中,系統(tǒng)100可以包括最佳化編譯器,其可以生成與本發(fā)明的實施例相關(guān)的一系列指令,這些指令已經(jīng)被優(yōu)化地重新安排,以利用處理器內(nèi)部結(jié)構(gòu)的并行性(例如處理器102-1、102-2、等等)。本領(lǐng)域的技術(shù)人員可以容易地允許多種其它的復(fù)雜性。例如,通過創(chuàng)建新元素的創(chuàng)建(970)和指針寫入(980)數(shù)據(jù)庫之間的依賴性,可以消除由于無序指令執(zhí)行而導(dǎo)致的數(shù)據(jù)危險。
在一種實施例中,通過將諸如異或(XOR)指令的附加算術(shù)操作插入由處理器102-1執(zhí)行的指令序列,以強制執(zhí)行與新元素的創(chuàng)建(970)有關(guān)的指令,從而在執(zhí)行將指針寫入(980)數(shù)據(jù)庫之前發(fā)出或完成,可以創(chuàng)建這些依賴性。例如,對應(yīng)于新元素并包括修改位的存儲器104內(nèi)位置的內(nèi)容可以與對應(yīng)于指向新元素的指針的存儲器104內(nèi)位置的內(nèi)容進(jìn)行XOR(異或)。隨后,可以將新元素的地址寫入(980)存儲器,以便將新元素提交給數(shù)據(jù)庫??朔@些復(fù)雜性的許多方法對于本領(lǐng)域的技術(shù)人員來說是顯而易見的。
在此具體圖示和描述了本發(fā)明的若干實施例。然而,將認(rèn)識到,在不脫離本發(fā)明的精神和預(yù)期范圍的情況下,本發(fā)明的修改和變化被上述教導(dǎo)所覆蓋,并在所附的權(quán)利要求書的范圍之內(nèi)。
權(quán)利要求
1.一種多線程化網(wǎng)絡(luò)數(shù)據(jù)庫系統(tǒng),包括耦合到網(wǎng)絡(luò)的至少一個處理器;和耦合到處理器的存儲器,該存儲器包括數(shù)據(jù)庫和適合于由處理器執(zhí)行的指令,以便創(chuàng)建更新線程和多個搜索線程;將在網(wǎng)絡(luò)上接收到的多個搜索查詢中的每個搜索查詢分配給多個搜索線程之一;對于每個搜索線程根據(jù)所分配的搜索查詢來搜索數(shù)據(jù)庫,創(chuàng)建對應(yīng)于所分配的搜索查詢的多個搜索應(yīng)答,和在網(wǎng)絡(luò)上發(fā)送多個搜索應(yīng)答;和對于更新線程根據(jù)在網(wǎng)絡(luò)上接收到的新信息創(chuàng)建多個新元素,在多個新元素之中的每個新元素內(nèi)設(shè)置修改位,在對于多個搜索線程不限制對數(shù)據(jù)庫訪問的情況下,使用單個不可中斷操作將指向多個新元素之中的每個新元素的指針寫入數(shù)據(jù)庫,和清除多個新元素之中的每個新元素的修改位。
2.權(quán)利要求1的系統(tǒng),其中所述指令還包括對于更新線程設(shè)置將從數(shù)據(jù)庫中刪除的至少一個現(xiàn)有元素內(nèi)的修改位;和在對于多個搜索線程不限制對數(shù)據(jù)庫訪問的情況下,使用單個不可中斷操作解除參考將要被刪除的現(xiàn)有元素。
3.權(quán)利要求1的系統(tǒng),其中所述指令還包括對于更新線程在將指針寫入相應(yīng)的新元素之前,設(shè)置在數(shù)據(jù)庫內(nèi)將要修改的至少一個現(xiàn)有元素內(nèi)的修改位;和在將指針寫入相應(yīng)的新元素之后,清除現(xiàn)有元素內(nèi)的修改位。
4.權(quán)利要求1的系統(tǒng),其中單個不可中斷操作是存儲指令。
5.權(quán)利要求4的系統(tǒng),其中存儲指令將四個字節(jié)寫入位于四字節(jié)邊界上的存儲地址。
6.權(quán)利要求4的系統(tǒng),其中存儲指令將八個字節(jié)寫入位于八字節(jié)邊界上的存儲地址。
7.權(quán)利要求4的系統(tǒng),其中處理器具有至少n字節(jié)的字大小,存儲器具有至少n字節(jié)的寬度,并且存儲指令將n字節(jié)寫入位于n字節(jié)邊界上的存儲地址。
8.權(quán)利要求1的系統(tǒng),其中在單個網(wǎng)絡(luò)分組內(nèi)接收多個搜索查詢。
9.權(quán)利要求1的系統(tǒng),其中在單個網(wǎng)絡(luò)分組內(nèi)發(fā)送多個搜索應(yīng)答。
10.權(quán)利要求1的系統(tǒng),其中所述限制訪問包括數(shù)據(jù)庫鎖定。
11.權(quán)利要求1的系統(tǒng),其中所述限制訪問包括自旋鎖定。
12.權(quán)利要求11的系統(tǒng),其中所述自旋鎖定包括至少一個信號量的使用。
13.權(quán)利要求12的系統(tǒng),其中所述信號量是互斥信號量。
14.權(quán)利要求1的系統(tǒng),還包括多個處理器和對稱的多處理操作系統(tǒng)。
15.權(quán)利要求14的系統(tǒng),其中多個搜索線程每秒執(zhí)行至少100000個搜索。
16.權(quán)利要求15的系統(tǒng),其中更新線程每秒執(zhí)行至少10000個更新。
17.權(quán)利要求16的系統(tǒng),其中更新線程每秒執(zhí)行在50000和130000之間個更新。
18.權(quán)利要求1的系統(tǒng),其中將至新元素的指針寫入搜索索引。
19.權(quán)利要求18的系統(tǒng),其中搜索索引是TST。
20.權(quán)利要求1的系統(tǒng),其中將至新元素的指針寫入數(shù)據(jù)庫內(nèi)的數(shù)據(jù)記錄。
21.一種用于搜索和同時更新數(shù)據(jù)庫的方法,包括創(chuàng)建更新線程和多個搜索線程;將在附絡(luò)上接收到的多個搜索查詢之中的每個搜索查詢分配給多個搜索線程之一;對于每個搜索線程根據(jù)所分配的搜索查詢來搜索數(shù)據(jù)庫,創(chuàng)建對應(yīng)于所分配的搜索查詢的多個搜索應(yīng)答,和在網(wǎng)絡(luò)上發(fā)送多個搜索應(yīng)答;和對于更新線程根據(jù)在網(wǎng)絡(luò)上接收到的新信息創(chuàng)建多個新元素;在多個新元素之中的每個新元素內(nèi)設(shè)置修改位;在對于多個搜索線程不限制對數(shù)據(jù)庫訪問的情況下,使用單個不可中斷操作將指向多個新元素之中的每個新元素的指針寫入數(shù)據(jù)庫,和清除多個新元素之中的每個新元素內(nèi)的修改位。
22.權(quán)利要求21的方法,其中所述指令還包括對于更新線程設(shè)置將要從數(shù)據(jù)庫中刪除的至少一個現(xiàn)有元素內(nèi)的修改位,和在對于多個搜索線程不限制對數(shù)據(jù)庫訪問的情況下,使用單個不可中斷操作解除參考將要刪除的現(xiàn)有元素。
23.權(quán)利要求21的方法,還包括對于更新線程在將指針寫入相應(yīng)的新元素之前,設(shè)置在數(shù)據(jù)庫內(nèi)將要修改的至少一個現(xiàn)有元素內(nèi)的修改位;和在將指針寫入相應(yīng)的新元素之后,清除現(xiàn)有元素內(nèi)的修改位。
24.權(quán)利要求21的方法,其中單個不可中斷操作是存儲指令。
25.權(quán)利要求23的方法,其中存儲指令將四個字節(jié)寫入位于四字節(jié)邊界上的存儲地址。
26.權(quán)利要求23的方法,其中存儲指令將八個字節(jié)寫入位于八字節(jié)邊界上的存儲地址。
27.權(quán)利要求21的方法,其中在單個網(wǎng)絡(luò)分組內(nèi)接收多個搜索查詢。
28.權(quán)利要求21的方法,其中在單個網(wǎng)絡(luò)分組內(nèi)發(fā)送多個搜索應(yīng)答。
29.權(quán)利要求21的方法,其中所述限制訪問包括數(shù)據(jù)庫鎖定。
30.權(quán)利要求21的方法,其中所述限制訪問包括自旋鎖定。
31.權(quán)利要求30的方法,其中所述自旋鎖定包括至少一個信號量的使用。
32.權(quán)利要求31的方法,其中所述信號量是互斥信號量。
33.權(quán)利要求21的方法,其中多個搜索線程每秒執(zhí)行至少100000個搜索。
34.權(quán)利要求21的方法,其中更新線程每秒執(zhí)行至少10000個更新。
35.權(quán)利要求34的方法,其中更新線程每秒執(zhí)行在50000和130000之間個更新。
36.權(quán)利要求21的方法,其中將至新元素的指針寫入搜索索引。
37.權(quán)利要求21的方法,其中將至新元素的指針寫入數(shù)據(jù)庫內(nèi)的數(shù)據(jù)記錄。
38.一種計算機(jī)可讀媒體,包括適合于由至少一個處理器執(zhí)行以實現(xiàn)一種用于搜索和同時更新數(shù)據(jù)庫的方法的指令,該方法包括創(chuàng)建更新線程和多個搜索線程;將在網(wǎng)絡(luò)上接收到的多個搜索查詢之中的每個搜索查詢分配給多個搜索線程之一;對于每個搜索線程根據(jù)所分配的搜索查詢來搜索數(shù)據(jù)庫,創(chuàng)建對應(yīng)于所分配的搜索查詢的多個搜索應(yīng)答,和在網(wǎng)絡(luò)上發(fā)送多個搜索應(yīng)答;和對于更新線程根據(jù)在網(wǎng)絡(luò)上接收到的新信息創(chuàng)建多個新元素;在多個新元素之中的每個新元素內(nèi)設(shè)置修改位;在對于多個搜索線程不限制對數(shù)據(jù)庫訪問的情況下,使用單個不可中斷操作將至多個新元素之中的每個新元素的指針寫入數(shù)據(jù)庫,和清除多個新元素之中的每個新元素內(nèi)的修改位。
39.權(quán)利要求38的計算機(jī)可讀媒體,其中該方法還包括對于更新線程設(shè)置將要從數(shù)據(jù)庫中刪除的至少一個元素的修改位;和在對于多個搜索線程不限制對數(shù)據(jù)庫訪問的情況下,使用單個不可中斷操作解除參考將要刪除的現(xiàn)有元素。
40.權(quán)利要求38的計算機(jī)可讀媒體,其中該方法還包括對于更新線程在將指針寫入相應(yīng)的新元素之前,設(shè)置在數(shù)據(jù)庫內(nèi)將要修改的至少一個現(xiàn)有元素內(nèi)的修改位;和在將指針寫入相應(yīng)的新元素之后,清除現(xiàn)有元素內(nèi)的修改位。
41.權(quán)利要求38的計算機(jī)可讀媒體,其中單個不可中斷操作是存儲指令。
42.權(quán)利要求41的計算機(jī)可讀媒體,其中存儲指令將四個字節(jié)寫入位于四字節(jié)邊界上的存儲地址。
43.權(quán)利要求41的計算機(jī)可讀媒體,其中存儲指令將八個字節(jié)寫入位于八字節(jié)邊界上的存儲地址。
44.權(quán)利要求38的計算機(jī)可讀媒體,其中在單個網(wǎng)絡(luò)分組內(nèi)接收多個搜索查詢。
45.權(quán)利要求38的計算機(jī)可讀媒體,其中在單個網(wǎng)絡(luò)分組內(nèi)發(fā)送多個搜索應(yīng)答。
46.權(quán)利要求38的計算機(jī)可讀媒體,其中所述限制訪問包括數(shù)據(jù)庫鎖定。
47.權(quán)利要求38的計算機(jī)可讀媒體,其中所述限制訪問包括自旋鎖定。
48.權(quán)利要求47的計算機(jī)可讀媒體,其中所述自旋鎖定包括至少一個信號量的使用。
49.權(quán)利要求48的計算機(jī)可讀媒體,其中所述信號量是互斥信號量。
50.權(quán)利要求38的計算機(jī)可讀媒體,其中將至新元素的指針寫入搜索索引。
51.權(quán)利要求38的計算機(jī)可讀媒體,其中將至新元素的指針寫入數(shù)據(jù)庫內(nèi)的數(shù)據(jù)記錄。
52.權(quán)利要求8的系統(tǒng),其中在單個網(wǎng)絡(luò)分組內(nèi)接收新信息。
53.權(quán)利要求27的方法,其中在單個網(wǎng)絡(luò)分組內(nèi)接收新信息。
54.權(quán)利要求44的計算機(jī)可讀媒體,其中在單個網(wǎng)絡(luò)分組內(nèi)接收新信息。
全文摘要
本發(fā)明的實施例提供一種用于大型數(shù)據(jù)庫系統(tǒng)的高速數(shù)據(jù)庫搜索和同時的基于事務(wù)處理的更新的方法和系統(tǒng)。具體而言,可以在網(wǎng)絡(luò)上接收多個搜索查詢(910),可以搜索該數(shù)據(jù)庫(930),并可以在網(wǎng)絡(luò)上發(fā)送多個搜索應(yīng)答(940)(950)。在搜索數(shù)據(jù)庫(930)的同時,可以在網(wǎng)絡(luò)上接收新信息(960),可以根據(jù)新信息創(chuàng)建多個新的數(shù)據(jù)庫元素(970),可以在每個新的數(shù)據(jù)庫元素內(nèi)設(shè)置修改位(975),可以使用單個不可中斷操作將至每個新的數(shù)據(jù)庫元素的指針寫入數(shù)據(jù)庫(980),并可以清除在每個新的數(shù)據(jù)庫元素內(nèi)的修改位(985)。
文檔編號G06F17/00GK1610906SQ02826509
公開日2005年4月27日 申請日期2002年11月1日 優(yōu)先權(quán)日2001年11月1日
發(fā)明者A·N·巴洛, W·F·小哈沃斯 申請人:弗里塞恩公司