專利名稱:通過單次寫入索引組織數(shù)據(jù)的系統(tǒng)和方法
技術(shù)領(lǐng)域:
本發(fā)明一般涉及電子數(shù)據(jù)管理,并且尤其是電子數(shù)據(jù)的索引。
背景技術(shù):
由于關(guān)鍵記錄(數(shù)據(jù)對象)越來越多地存儲(chǔ)為電子格式,因此有必要將它們可靠地并且以防篡改的形式存儲(chǔ)。而且,增長中的電子記錄(例如,電子郵件,即時(shí)消息,藥物開發(fā)日志,醫(yī)療記錄等)的子集受到管理它們的長期保持和有效性的規(guī)定的約束。不符合應(yīng)用的規(guī)定,在某些規(guī)則下可能導(dǎo)致嚴(yán)厲的處罰。在許多這樣的規(guī)定中(例如,SEC規(guī)則17a-4)的關(guān)鍵要求是記錄必須可靠地存儲(chǔ)在非可擦除,非可重寫存儲(chǔ)器中,從而記錄一旦被寫入,就不能被改變或覆蓋。這種存儲(chǔ)器通常被稱為WORM(單次寫入多次讀取)存儲(chǔ)器,與能多次寫入的可重寫或WMRM(多次寫入多次讀取)存儲(chǔ)器相對。
由于目前的大量記錄,這些記錄必須進(jìn)一步被編索引(例如,通過文件名,通過內(nèi)容等等),以允許能在日益期望的短響應(yīng)時(shí)間內(nèi)中檢索到與查詢相關(guān)的記錄。該索引典型地存儲(chǔ)在可重寫存儲(chǔ)器中,但是能改變存儲(chǔ)在一個(gè)可重寫存儲(chǔ)器中的索引,以有效地刪除或更改一個(gè)記錄。例如,能夠操作該索引,從而不能利用該索引定位一個(gè)給定的記錄。
有一些在WORM存儲(chǔ)器中存儲(chǔ)索引的現(xiàn)有方法。例如,在一個(gè)大的記錄集合已經(jīng)被編索引(例如,當(dāng)CD-R關(guān)上時(shí))之后,用于傳統(tǒng)WORM存儲(chǔ)器(例如,CD-R和DVD-R)的索引(文件目錄)被一次寫入。在整個(gè)記錄集合被加入之前,不提交該索引。一旦索引被寫入,則新的記錄不能被加入到索引中。因?yàn)橛涗浭窃谝欢螘r(shí)間中被加入的,該系統(tǒng)將創(chuàng)建多個(gè)索引,其使用了很多存儲(chǔ)空間。更重要的是,查找一個(gè)特定的記錄可能需要查找沒有被索引的記錄以及每一個(gè)索引。
其它技術(shù)包括,僅為已經(jīng)改變的索引的部分創(chuàng)建新的更新過的副本。但是在索引已經(jīng)被推測為提交到WORM存儲(chǔ)器之后,如果索引的一部分能夠被更改和重寫,則索引能夠被有效地更改,以隱藏或改變記錄,并且使用WORM存儲(chǔ)器的目的失敗。一些人可能爭辯索引的任何更新部分的較老的版本仍然存儲(chǔ)在WORM存儲(chǔ)器中某個(gè)位置,但是當(dāng)存儲(chǔ)的記錄量巨大并且保持周期長,如通常的情況,驗(yàn)證索引的許多版本是不切實(shí)際的。
所需要的是一種組織大量和增長的記錄集合以便進(jìn)行快速檢索的方式,從而一旦記錄已經(jīng)被插入到一個(gè)索引中,就不能以有效地隱藏或改變記錄的方式更新該索引。
發(fā)明內(nèi)容
根據(jù)本發(fā)明,提供了一種用于快速檢索的用于組織數(shù)據(jù)對象的系統(tǒng)。該系統(tǒng)包括至少一個(gè)定義了數(shù)據(jù)扇區(qū)的數(shù)據(jù)存儲(chǔ)介質(zhì)。此外,該系統(tǒng)還包括至少一個(gè)在數(shù)據(jù)介質(zhì)上的數(shù)據(jù)對象。而且,該系統(tǒng)還包括至少一個(gè)與至少一個(gè)數(shù)據(jù)對象相關(guān)的關(guān)鍵詞(key)。而且,該系統(tǒng)還包括至少一個(gè)在數(shù)據(jù)存儲(chǔ)介質(zhì)上的單次寫入索引,以管理至少一個(gè)數(shù)據(jù)對象。
根據(jù)本發(fā)明,提供了一種用于快速檢索的用于組織數(shù)據(jù)對象的方法。該方法包括接收將存儲(chǔ)在至少一個(gè)存儲(chǔ)設(shè)備上的數(shù)據(jù)對象。此外,該方法還包括識別與接收的數(shù)據(jù)對象相關(guān)的至少一個(gè)關(guān)鍵詞。此外,該方法還包括在存儲(chǔ)設(shè)備中識別至少一個(gè)單次寫入索引,其中單次寫入索引用于管理與存儲(chǔ)在存儲(chǔ)設(shè)備上的數(shù)據(jù)相關(guān)的關(guān)鍵詞。而且,該方法還包括判斷關(guān)鍵詞是否存在于單次寫入索引中。而且,該方法還包括,如果關(guān)鍵詞不在索引中,將關(guān)鍵詞包括在單次寫入索引中。
圖1是以盤驅(qū)動(dòng)器實(shí)現(xiàn)的存儲(chǔ)設(shè)備的非限制性框圖。
圖2是根據(jù)本發(fā)明一個(gè)示范實(shí)施例的涉及單次寫入索引的邏輯流程圖。
圖3是根據(jù)本發(fā)明一個(gè)示范實(shí)施例的涉及將一個(gè)關(guān)鍵詞加入到單次寫入索引中的邏輯流程圖。
圖4是根據(jù)本發(fā)明的示范索引的框圖。
圖5是根據(jù)本發(fā)明一個(gè)示范實(shí)施例的涉及在索引中檢測關(guān)鍵詞的邏輯流程圖。
圖6是根據(jù)本發(fā)明一個(gè)示范實(shí)施例的涉及將一個(gè)關(guān)鍵詞加入索引的邏輯流程圖。
圖7是根據(jù)本發(fā)明一個(gè)示范實(shí)施例的表示用于通過一個(gè)索引定位對象y的路徑的框圖。
具體實(shí)施例方式
本發(fā)明將主要描述用于快速檢索的用于組織數(shù)據(jù)對象的系統(tǒng)和方法。在下面的描述中,為了解釋說明的目的,闡述了大量具體細(xì)節(jié)來提供一個(gè)對本發(fā)明的整體理解。但是顯然,對于熟知本技術(shù)的人員將可以脫離這些特定細(xì)節(jié)而實(shí)現(xiàn)本發(fā)明。
那些熟知本技術(shù)的人員將認(rèn)識到例如數(shù)據(jù)處理系統(tǒng)的設(shè)備,包括CPU,存儲(chǔ)器,I/O,程序存儲(chǔ)器,互聯(lián)總線和其它適當(dāng)?shù)脑?,可以被編程或者設(shè)計(jì)用來實(shí)現(xiàn)本發(fā)明。這樣的系統(tǒng)將包括用于執(zhí)行本發(fā)明的操作的適當(dāng)程序裝置。
一種制造物品,例如預(yù)記錄的盤或者其它類似的計(jì)算機(jī)程序產(chǎn)品,用于與數(shù)據(jù)處理系統(tǒng)一起使用,將包括存儲(chǔ)介質(zhì)和其中記錄的程序裝置,用于指示數(shù)據(jù)處理系統(tǒng)方便地實(shí)現(xiàn)本發(fā)明的方法。這樣的設(shè)備和制造物品也將落入本發(fā)明的范圍和精神實(shí)質(zhì)。
首先參見圖1,非限制性的數(shù)據(jù)存儲(chǔ)設(shè)備被表示為以盤驅(qū)動(dòng)器10實(shí)現(xiàn)。在圖2中表示的該非限制性設(shè)備10具有外殼11,保持盤驅(qū)動(dòng)控制器12,其能夠包括和/或由微控制器實(shí)現(xiàn)。控制器12可以訪問在計(jì)算機(jī)程序設(shè)備或產(chǎn)品中的電子數(shù)據(jù)存儲(chǔ),例如但是不限于微代碼存儲(chǔ)器14,其可以由固態(tài)存儲(chǔ)設(shè)備實(shí)現(xiàn)。微代碼存儲(chǔ)器14能夠存儲(chǔ)實(shí)現(xiàn)邏輯的微代碼。
控制器12控制讀/寫機(jī)制16,其包括一個(gè)或多個(gè)用于將數(shù)據(jù)寫入到一個(gè)或多個(gè)盤18上的頭。驅(qū)動(dòng)器10的非限制性實(shí)施方式包括多個(gè)頭和多個(gè)盤18,并且每一個(gè)頭與一個(gè)相應(yīng)的讀元件和一個(gè)相應(yīng)的寫元件相關(guān),讀元件用于讀取盤18上的數(shù)據(jù),寫元件用于將數(shù)據(jù)寫入到盤18中。盤18可以包括多個(gè)數(shù)據(jù)扇區(qū)。更一般地,如下面所使用的,術(shù)語“扇區(qū)”指數(shù)據(jù)單元,其被寫入存儲(chǔ)設(shè)備,其可以是固定大小。存儲(chǔ)設(shè)備能夠允許隨機(jī)訪問任何扇區(qū)。
如果要求,控制器12也可以通過內(nèi)部總線22與一個(gè)或多個(gè)固態(tài)存儲(chǔ)器20通信,例如,動(dòng)態(tài)隨機(jī)存取存儲(chǔ)器(DRAM)設(shè)備或閃存設(shè)備。根據(jù)本領(lǐng)域中公知的原理,控制器12也能通過主機(jī)接口模塊26與外部主計(jì)算機(jī)24通信。
圖2是根據(jù)本發(fā)明一個(gè)示范實(shí)施例的涉及單次寫入索引的邏輯流程圖28。方法28在塊30開始。
在塊32中,識別將被存儲(chǔ)在數(shù)據(jù)存儲(chǔ)設(shè)備10中的數(shù)據(jù)對象(例如,文件,對象,數(shù)據(jù)庫記錄)。
在塊34中,與數(shù)據(jù)對象相關(guān)的關(guān)鍵詞(例如,名稱)被識別。為了清楚地描述本發(fā)明,我們假設(shè)存儲(chǔ)在該存儲(chǔ)設(shè)備10中的每一個(gè)數(shù)據(jù)對象都將被索引。我們進(jìn)一步假設(shè)每一個(gè)被索引的數(shù)據(jù)對象在索引中具有一個(gè)條目,并且該索引條目包括識別數(shù)據(jù)對象的關(guān)鍵詞和指向數(shù)據(jù)對象的指針。
在塊36中,存儲(chǔ)設(shè)備10中的單次寫入索引被識別,用以組織數(shù)據(jù)對象用于快速檢索。
在塊38中,單次寫入索引被檢測,以判斷關(guān)鍵詞是否已經(jīng)存在于索引中。如果存在,在塊40返回一個(gè)關(guān)鍵詞已經(jīng)存在于索引中的指示。否則,在塊42將該關(guān)鍵詞加入到索引中,并且在塊44返回成功。
方法28在塊46結(jié)束。
單次寫入索引(塊36)可以從小的數(shù)據(jù)對象集合(例如,包括幾千個(gè)對象)擴(kuò)展到非常大的數(shù)據(jù)對象集合(例如,包括數(shù)十億的對象甚至更多)。將被索引的對象集合的最大或優(yōu)選最大大小預(yù)先沒有指定。索引簡單地增加以適應(yīng)增加的對象。
圖3是根據(jù)本發(fā)明一個(gè)示范實(shí)施例的涉及將一個(gè)關(guān)鍵詞加入到這樣的索引中的邏輯流程圖。在塊50方法48開始。
在塊52,索引的元數(shù)據(jù)條目被讀取,并且在塊54被使用以判斷要加入的關(guān)鍵詞應(yīng)當(dāng)存儲(chǔ)在哪里。
在塊56,創(chuàng)建將被加入的關(guān)鍵詞的索引條目。
在塊58,所創(chuàng)建的索引條目永久地存儲(chǔ)在塊54所判斷的位置。該索引條目在下述意義上被永久地存儲(chǔ),至少對于相應(yīng)的數(shù)據(jù)對象的生存周期,索引條目的內(nèi)容不更新,并且索引條目不重新定位至另一個(gè)存儲(chǔ)位置。
在塊60,創(chuàng)建元數(shù)據(jù)條目,以允許順序定位創(chuàng)建的索引條目。
在塊62,所創(chuàng)建的元數(shù)據(jù)條目在下述的意義上永久地存儲(chǔ),至少對于相應(yīng)的索引條目的生存周期,所創(chuàng)建的元數(shù)據(jù)條目內(nèi)容不更新,并且元數(shù)據(jù)條目不重新定位至另一個(gè)存儲(chǔ)位置。
方法48在塊64結(jié)束。
如上所述,通過創(chuàng)建索引和元數(shù)據(jù)條目,從而它們的內(nèi)容以及存儲(chǔ)位置為固定的,在關(guān)鍵詞插入到索引中之后,在其中能夠找到包括一個(gè)給定的關(guān)鍵詞的索引條目的可能的存儲(chǔ)位置的集合是固定的。該索引不能以索引中的對象能夠被隱藏或者有效改變的方式被更新。
為了在索引中查找一個(gè)關(guān)鍵詞,元數(shù)據(jù)條目首先被讀出,以判斷包括被識別的關(guān)鍵詞的索引條目可能的存儲(chǔ)位置。然后,搜索可能的存儲(chǔ)位置,以查找包括該關(guān)鍵詞的索引條目。如果沒有找到這樣的索引條目,將返回一條指示該關(guān)鍵詞不在索引中的消息。否則,返回成功。
圖4是根據(jù)本發(fā)明的單次寫入索引66的示范實(shí)施例的框圖。具有i個(gè)哈希表(HT)76,每一個(gè)具有大小Si72,以及每一個(gè)通過哈希函數(shù)hi74索引。關(guān)鍵詞存儲(chǔ)在哈希表76中。元數(shù)據(jù)68記錄用于每一個(gè)哈希表的哈希函數(shù),以及每一個(gè)哈希表存儲(chǔ)的位置。
在一個(gè)實(shí)施例中,一系列的哈希表通常在大小上增加,意思就是,對于多數(shù)部分,Si>=Si-1。在一個(gè)優(yōu)選實(shí)施例中,哈希表的大小指數(shù)增加,從而對于i的多數(shù)數(shù)值,對于一些常數(shù)k>1,Si約等于k×Si-1。而在其它實(shí)施例中,hi74為相當(dāng)獨(dú)立的,意思就是,如果hj(x)=hj(y),對于j≠i以及x≠y,不太可能hi(x)=hi(y)。
圖5是根據(jù)本發(fā)明一個(gè)示范實(shí)施例的涉及在索引66中檢測關(guān)鍵詞的邏輯流程圖。方法78在塊80開始。
在塊82,選擇在索引66中的第一哈希表76。
在塊84,進(jìn)行一個(gè)判斷,判斷識別的關(guān)鍵詞是否存在于所選擇的哈希表76中。每一個(gè)哈希表76由多個(gè)哈希桶(bucket)70構(gòu)成。利如,為了判斷關(guān)鍵詞k是否存在于第j個(gè)哈希表HTj中,計(jì)算hj(k),并且作出一個(gè)判斷,判斷k是否存在于HTj的第hj(k)個(gè)哈希桶中。
在塊84中,如果判斷出關(guān)鍵詞存在于所選擇的哈希表76中,則返回指示該關(guān)鍵詞存在于該索引中的一條消息。
在塊84中,如果判斷出關(guān)鍵詞不存在于所選擇的哈希表76中,在塊88所作出一個(gè)判斷,判斷是否存在額外的哈希表76。如果存在,則在塊90,識別和選擇下一個(gè)哈希表76。該處理重復(fù)進(jìn)行,直到到達(dá)最后一個(gè)哈希表76。
返回到塊88,如果作出判斷,判斷出沒有額外的哈希表76,則關(guān)鍵詞不存在于索引66中,并且在塊92返回指示該關(guān)鍵詞不存在于索引中的一條消息。
方法78在塊94結(jié)束。
在一個(gè)實(shí)施例中,在塊82中選擇一系列哈希表中的第一個(gè)哈希表,即HT0,并且在塊90中選擇一系列哈希表中的下一個(gè)哈希表。在另一個(gè)實(shí)施例中,在塊82中選擇一系列哈希表中的最后一個(gè)哈希表,即HTi,并且在塊90中選擇一系列哈希表中的前一個(gè)哈希表。
而在另一個(gè)實(shí)施例中,在塊88進(jìn)行一個(gè)判斷,判斷在所選擇的哈希表中是否有足夠的空間來存儲(chǔ)識別的關(guān)鍵詞。如果判斷為存在足夠的空間,則關(guān)鍵詞在索引66中不存在于索引66中,并且在塊92返回一條指示關(guān)鍵詞不存在于索引中的消息。如果判斷為不存在足夠的空間,則作出判斷,判斷是否存在額外的哈希表76。
圖6是根據(jù)本發(fā)明一個(gè)示范實(shí)施例的涉及將一個(gè)關(guān)鍵詞加入索引66的邏輯流程圖。方法96在塊98開始。
在塊100中,選擇在索引66中的第一哈希表76。
在塊102中,進(jìn)行一個(gè)判斷,判斷在選擇的哈希表76中是否存在足夠的空間,以加入識別的關(guān)鍵詞。例如,為了判斷在第j個(gè)哈希表HTj中是否存在足夠的空間以加入一個(gè)關(guān)鍵詞k,計(jì)算hj(k)并且進(jìn)行一個(gè)判斷,判斷在HTj的第hj(k)個(gè)哈希桶中是否存在足夠的空間,以包含k。
在塊104,如果在所選擇的哈希表中存在足夠的空間以加入該關(guān)鍵詞,該關(guān)鍵詞被加入。
如果在所選擇的哈希表中沒有足夠的空間來加入該關(guān)鍵詞,則在塊106進(jìn)行一個(gè)判斷,判斷是否有額外的哈希表76。如果有,則在塊108識別并選擇下一個(gè)哈希表76。重復(fù)進(jìn)行該處理,直到到達(dá)最后一個(gè)哈希表76。
返回到塊106,如果作出一個(gè)判斷,判斷出沒有額外的哈希表76,則在塊110創(chuàng)建一個(gè)新的哈希表HTi+1,并且在塊112將關(guān)鍵詞加入新的哈希表。例如,為了將關(guān)鍵詞k加入第j個(gè)哈希表HTj,計(jì)算hj(k)并且將k插入到HTj的第hj(k)個(gè)哈希桶中。創(chuàng)建新的哈希表包括將新的信息加入到索引66的元數(shù)據(jù)68中。
方法96在塊114結(jié)束。
通過按存儲(chǔ)的對象的數(shù)目的需要增加哈希表,單次寫入索引66自動(dòng)擴(kuò)展。當(dāng)系統(tǒng)創(chuàng)建哈希表時(shí),最好的是該哈希表比上一個(gè)創(chuàng)建的表大恒定的倍數(shù)。這保證了查找以及插入操作的復(fù)雜度在索引中的對象的數(shù)目方面是對數(shù)的。
在一個(gè)實(shí)施例中,索引66存儲(chǔ)在與數(shù)據(jù)對象不同的存儲(chǔ)設(shè)備中。在另一個(gè)實(shí)施例中,索引66存儲(chǔ)在WORM設(shè)備中,以保證當(dāng)該部分被存儲(chǔ)時(shí),沒有索引部分能夠被改變。在優(yōu)選實(shí)施例中,索引66和數(shù)據(jù)對象都被存儲(chǔ)在WORM存儲(chǔ)設(shè)備中。
注意到,一旦數(shù)據(jù)對象已經(jīng)被索引,本發(fā)明提供的通過索引以定位數(shù)據(jù)對象的路徑是不變的。例如,圖7為表示對于對象y118的路徑122的框圖116。沿著該路徑檢查的哈希桶120通過與請求的數(shù)據(jù)對象相關(guān)的關(guān)鍵詞ky以及不同級別上的哈希函數(shù)判斷。在表被創(chuàng)建的時(shí)刻,哈希表的哈希函數(shù)是固定的。因此,總是檢查相同的哈希桶以獲得該對象。一旦與存儲(chǔ)的數(shù)據(jù)相關(guān)的條目已經(jīng)被寫入,該索引條目也是不變的。這保證了一旦對象已經(jīng)被索引,通過索引以定位該對象的路徑是不可變的。換句話說,該索引不能以這樣的方式被更新索引中的一個(gè)對象能夠被隱藏或有效地改變。
哈希函數(shù)在優(yōu)選實(shí)施例中,哈希函數(shù),h1,h2,...,hi,74在很大程度上是獨(dú)立的,從而如果關(guān)鍵詞中的一些在一個(gè)級別上聚集,在下一個(gè)級別中它們將被分散。有多種方式可以選擇這樣的哈希函數(shù)74。在一個(gè)優(yōu)選實(shí)施例中,使用通用的哈希法。
通用的哈希法包括從一個(gè)精心設(shè)計(jì)的函數(shù)類中隨機(jī)選擇一個(gè)哈希函數(shù)74。例如,令Φ為一個(gè)有限的哈希函數(shù)的集合,其映射一個(gè)給定的關(guān)鍵詞域U到一個(gè)范圍{0,1,2,...,m-1}。如果對于每一對不同的關(guān)鍵詞x,y∈U,h(x)=h(y)的哈希函數(shù)h的數(shù)目正好等于|Φ|/m,則Φ被稱為通用的。利用從Φ中隨機(jī)選擇的函數(shù),x和y之間沖突(即,h(x)=h(y))的幾率為1/m,其中x≠y。
例如,令m為大于255的質(zhì)數(shù)。假設(shè)我們將關(guān)鍵詞x分解為r字節(jié),從而x=(x1,x2,...,xr)。令a=(a1,a2,...,ar)表示從集合{0,1,...,m-1}隨機(jī)選擇的r個(gè)元素的一個(gè)序列。哈希函數(shù)ha(x)=Σrk=1akxk模m的集合形成一個(gè)哈希函數(shù)的通用集合。
當(dāng)系統(tǒng)創(chuàng)建在j級別上的大小為sj>255的新哈希表時(shí),其通過從集合{0,1,...,sj}中隨機(jī)選擇a1,a2,...,ar從集合{ha(x)=Σrk=1akxk模sj}中隨機(jī)選擇哈希函數(shù)hj。其中ak是與哈希表永久相關(guān)聯(lián)的,并且被存儲(chǔ)為索引66的元數(shù)據(jù)68的一部分。在一個(gè)優(yōu)選實(shí)施例中,元數(shù)據(jù)存儲(chǔ)在WORM存儲(chǔ)器中,從而元數(shù)據(jù)不能被修改。
哈希表優(yōu)化有很多對于哈希表的已知的優(yōu)化,例如開放尋址,雙重哈希法等等。在本發(fā)明中,通過使用一個(gè)或多個(gè)這些方法,能夠分別優(yōu)化每一級別的哈希表。在一個(gè)優(yōu)選實(shí)施例中,每一級別的哈希表使用線性尋址,從而關(guān)鍵詞能夠在哈希桶或者任何預(yù)定數(shù)目的隨后的桶中找到。當(dāng)哈希表被檢測時(shí),哈希桶以及預(yù)定數(shù)目的隨后的桶從存儲(chǔ)器系統(tǒng)中被順序讀取。這利用了這樣一個(gè)事實(shí)順序I/O遠(yuǎn)比隨機(jī)I/O更加有效。在其它的實(shí)施例中,每一個(gè)哈希表被雙重哈希。兩個(gè)哈希函數(shù)中的每一個(gè)從哈希函數(shù)的通用集合隨機(jī)選擇。
復(fù)制關(guān)鍵詞注意,到目前為止的說明書中,假設(shè)復(fù)制關(guān)鍵詞是在索引中不允許的。顯而易見地,在可選的實(shí)施例中允許復(fù)制關(guān)鍵詞。在可選的實(shí)施例中,當(dāng)向索引中插入一個(gè)關(guān)鍵詞時(shí),不需要進(jìn)行該關(guān)鍵詞是否已經(jīng)存在的判斷。取而代之的是,定位插入該關(guān)鍵詞的空間,然后該關(guān)鍵詞被插入。為了找到所有的可能發(fā)生的關(guān)鍵詞,系統(tǒng)檢測所有的哈希表尋找該關(guān)鍵詞。在其它實(shí)施例中,系統(tǒng)檢測一系列哈希表,直到達(dá)到具有足夠的令關(guān)鍵詞插入的空間的哈希表。
關(guān)鍵詞的刪除在一個(gè)優(yōu)選實(shí)施例中,不允許從索引中刪除關(guān)鍵詞。但是,在可選的實(shí)施例中,在預(yù)定的時(shí)間段之后,能夠刪除對象,并且在對象已經(jīng)被刪除之后,相應(yīng)的關(guān)鍵詞能夠從索引中刪除。
在一個(gè)實(shí)施例中,索引存儲(chǔ)在存儲(chǔ)器中,該存儲(chǔ)器確保數(shù)據(jù)不可改變,直到終止時(shí)間(日期),該終止時(shí)間通常在數(shù)據(jù)被寫入時(shí)指定。在這樣的系統(tǒng)中,對于包含索引條目的存儲(chǔ)單元(例如,扇區(qū),塊,對象,文件)的該終止時(shí)間被設(shè)置為相應(yīng)對象的最近的終止日期。
在對象已經(jīng)被刪除之后,該系統(tǒng)檢查索引以查看相應(yīng)的關(guān)鍵詞是否存儲(chǔ)在包含生存對象的至少一個(gè)關(guān)鍵詞的存儲(chǔ)單元中。如果是這樣,對應(yīng)于該被刪除對象的關(guān)鍵詞現(xiàn)在還不能被刪除。否則,例如通過利用標(biāo)準(zhǔn)模式覆蓋的方式,系統(tǒng)刪除存儲(chǔ)單元中所有的關(guān)鍵詞。
這樣的系統(tǒng)的一種優(yōu)化是避免在一個(gè)包含具有很不相同的剩余生存期的對象的關(guān)鍵詞的存儲(chǔ)單元中加入一個(gè)關(guān)鍵詞。例如,僅當(dāng)相應(yīng)的對象具有在存儲(chǔ)單元中具有關(guān)鍵詞的其它對象的剩余生存期的一個(gè)月內(nèi)的剩余生存期時(shí),系統(tǒng)可以向給定的存儲(chǔ)單元加入一個(gè)關(guān)鍵詞。換句話說,一個(gè)對象的索引條目被存儲(chǔ)在由對象的關(guān)鍵詞以及對象的終止日期確定的位置。
注意到根據(jù)下面的存儲(chǔ)器,存儲(chǔ)單元可以在其終止日期之后使用。如果包含哈希表刪除部分的存儲(chǔ)單元能夠被重新使用,則系統(tǒng)將不能使用上述的優(yōu)化方法。例如,一旦系統(tǒng)到達(dá)一個(gè)哈希表,其不包含k并且具有足夠的包含k的空間,將不能推斷關(guān)鍵詞k不存在于索引中。該系統(tǒng)將必須檢查所有的哈希表。
明顯地,所公開的本發(fā)明能夠用于組織各種對象,通過各種關(guān)鍵詞用于快速檢索。實(shí)例包括文件系統(tǒng)目錄,其允許通過文件名定位文件,允許根據(jù)一些特定字段或字段組合的數(shù)值檢索記錄的數(shù)據(jù)庫索引,以及整個(gè)文本索引,其允許找到包含一些特定詞語或短語的文檔。
因此,已經(jīng)公開了用于組織數(shù)據(jù)對象以便快速檢索的系統(tǒng)和方法。盡管已經(jīng)參照了特定具體實(shí)施例描述了本發(fā)明,顯然,可以對這些實(shí)施例進(jìn)行各種更改和改變,而不脫離本發(fā)明的精神實(shí)質(zhì)和范圍。因此,說明書和附圖用于說明的目的而不是限制。
權(quán)利要求
1.一種用于組織數(shù)據(jù)對象以便進(jìn)行快速檢索的系統(tǒng),包括至少一個(gè)定義了數(shù)據(jù)扇區(qū)的數(shù)據(jù)存儲(chǔ)介質(zhì);在數(shù)據(jù)存儲(chǔ)介質(zhì)上的至少一個(gè)數(shù)據(jù)對象;與所述至少一個(gè)數(shù)據(jù)對象相關(guān)聯(lián)的至少一個(gè)關(guān)鍵詞;以及在數(shù)據(jù)存儲(chǔ)介質(zhì)上的至少一個(gè)單次寫入索引,用來管理所述至少一個(gè)數(shù)據(jù)對象。
2.如權(quán)利要求1的系統(tǒng),其中,其上存儲(chǔ)了單次寫入索引的數(shù)據(jù)存儲(chǔ)介質(zhì)是WORM存儲(chǔ)介質(zhì)。
3.如權(quán)利要求1的系統(tǒng),其中所述索引包括至少一個(gè)哈希表,其中所述至少一個(gè)哈希表用于存儲(chǔ)所述至少一個(gè)關(guān)鍵詞。
4.如權(quán)利要求3的系統(tǒng),其中所述至少一個(gè)哈希表包括一系列哈希表,該一系列哈希表在大小上一般是增加的。
5.如權(quán)利要求4的系統(tǒng),其中所述的一系列哈希表的大小基本上以指數(shù)的方式增加。
6.如權(quán)利要求3的系統(tǒng),其中在至少一個(gè)哈希表中存儲(chǔ)關(guān)鍵詞的操作包括判斷在第一個(gè)哈希表中是否存在足夠的空間,以及如果存在,則在第一個(gè)哈希表中存儲(chǔ)該關(guān)鍵詞,否則在第二個(gè)哈希表中存儲(chǔ)該關(guān)鍵詞,以及如果不存在第二個(gè)哈希表,則創(chuàng)建一個(gè)新的哈希表并在其中存儲(chǔ)該關(guān)鍵詞。
7.如權(quán)利要求4的系統(tǒng),其中在至少一個(gè)哈希表中存儲(chǔ)關(guān)鍵詞的操作包括判斷在所述一系列哈希表的第一個(gè)哈希表中是否存在足夠的空間,以及如果存在,則在該哈希表中存儲(chǔ)該關(guān)鍵詞,否則在所述一系列哈希表中的下一個(gè)哈希表中存儲(chǔ)該關(guān)鍵詞,以及如果在所述一系列哈希表中不存在下一個(gè)哈希表,則創(chuàng)建一個(gè)新的哈希表作為所述的一系列哈希表中的下一個(gè)哈希表并在其中存儲(chǔ)該關(guān)鍵詞。
8.如權(quán)利要求3的系統(tǒng),其中檢索數(shù)據(jù)對象的操作包括,檢測第一個(gè)哈希表,以判斷數(shù)據(jù)對象的關(guān)鍵詞是否存在于第一個(gè)哈希表中,并且如果不存在,則檢測第二個(gè)哈希表,以判斷數(shù)據(jù)對象的關(guān)鍵詞是否存在于第二個(gè)哈希表中,并且如果不存在第二個(gè)哈希表,則返回?cái)?shù)據(jù)對象不存在于系統(tǒng)中的指示。
9.如權(quán)利要求8的系統(tǒng),其中檢測哈希表以判斷數(shù)據(jù)對象的關(guān)鍵詞是否存在于哈希表中的操作進(jìn)一步包括,判斷在該哈希表中是否具有足夠的空間用于存儲(chǔ)該關(guān)鍵詞,以及如果數(shù)據(jù)對象的關(guān)鍵詞不存在于哈希表中,并且哈希表中具有足夠的空間用于存儲(chǔ)該關(guān)鍵詞,則返回?cái)?shù)據(jù)對象不存在于系統(tǒng)中的指示。
10.如權(quán)利要求4的系統(tǒng),其中檢索數(shù)據(jù)對象的操作包括,檢測所述一系列哈希表中的第一個(gè)哈希表以判斷數(shù)據(jù)對象的關(guān)鍵詞是否存在于所述一系列哈希表的第一個(gè)哈希表中,并且如果不存在,則檢測所述一系列哈希表中的下一個(gè)哈希表,以判斷數(shù)據(jù)對象的關(guān)鍵詞是否存在于所述一系列哈希表中的下一個(gè)哈希表中,并且如果所述一系列哈希表中不存在下一個(gè)哈希表,則返回?cái)?shù)據(jù)對象不存在于系統(tǒng)中的指示。
11.如權(quán)利要求10的系統(tǒng),其中檢測哈希表以判斷數(shù)據(jù)對象的關(guān)鍵詞是否存在于哈希表中的操作進(jìn)一步包括,判斷在哈希表中是否具有足夠的空間用于存儲(chǔ)該關(guān)鍵詞,以及如果數(shù)據(jù)對象的關(guān)鍵詞不存在于哈希表中,并且哈希表中具有足夠的空間用于存儲(chǔ)該關(guān)鍵詞,則返回?cái)?shù)據(jù)對象不存在于系統(tǒng)中的指示。
12.如權(quán)利要求4的系統(tǒng),其中檢索數(shù)據(jù)對象的操作包括檢測所述一系列哈希表中的最后一個(gè)哈希表以判斷數(shù)據(jù)對象的關(guān)鍵詞是否存在于所述一系列哈希表的最后一個(gè)哈希表中,并且如果不存在,則檢測所述一系列哈希表中的前一個(gè)哈希表,以判斷數(shù)據(jù)對象的關(guān)鍵詞是否存在于所述一系列哈希表中的前一個(gè)哈希表中,并且如果所述一系列哈希表中不存在前一個(gè)哈希表,則返回?cái)?shù)據(jù)對象不存在于系統(tǒng)中的指示。
13.如權(quán)利要求3的系統(tǒng),其中單次寫入索引可以從小的數(shù)據(jù)對象集合擴(kuò)展為非常大的數(shù)據(jù)對象的集合,并且其中單次寫入索引包括索引條目,所述索引條目包含固定內(nèi)容并且具有永久的存儲(chǔ)位置。
14.如權(quán)利要求13的系統(tǒng),其中單次寫入索引進(jìn)一步包括元數(shù)據(jù)條目,其包含固定的內(nèi)容并且具有永久的存儲(chǔ)位置,這樣的元數(shù)據(jù)條目被用于定位索引條目。
15.如權(quán)利要求13的系統(tǒng),其中,在關(guān)鍵詞已經(jīng)在索引中存儲(chǔ)之后,在索引中能夠找到包含給定關(guān)鍵詞的索引條目的可能的存儲(chǔ)位置是固定的。
16.如權(quán)利要求13的系統(tǒng),其中用于存儲(chǔ)索引條目的可能的位置依賴于相應(yīng)的數(shù)據(jù)對象的終止日期。
17.一種用于組織數(shù)據(jù)對象以便進(jìn)行快速檢索的方法,包括接收將被存儲(chǔ)在至少一個(gè)存儲(chǔ)設(shè)備中的數(shù)據(jù)對象;識別至少一個(gè)與所接收的數(shù)據(jù)對象相關(guān)的關(guān)鍵詞;在存儲(chǔ)器設(shè)備中識別至少一個(gè)單次寫入索引,其中單次寫入索引用于管理與存儲(chǔ)在存儲(chǔ)設(shè)備中的數(shù)據(jù)對象相關(guān)的關(guān)鍵詞;判斷關(guān)鍵詞是否存在于單次寫入索引中;以及如果關(guān)鍵詞不存在于索引中,則將該關(guān)鍵詞包括在單次寫入索引中。
18.如權(quán)利要求17的方法,其中存儲(chǔ)單次寫入索引的存儲(chǔ)設(shè)備是WORM存儲(chǔ)介質(zhì)。
19.如權(quán)利要求17的方法,其中索引包括至少一個(gè)哈希表,其中所述至少一個(gè)哈希表用于存儲(chǔ)至少一個(gè)關(guān)鍵詞。
20.如權(quán)利要求19的方法,其中所述至少一個(gè)哈希表包括一系列哈希表,該一系列哈希表在大小上一般是增加的。
21.如權(quán)利要求20的方法,其中所述一系列哈希表的大小基本上以指數(shù)的方式增加。
22.如權(quán)利要求19的方法,其中在所述至少一個(gè)哈希表中存儲(chǔ)關(guān)鍵詞的步驟包括判斷在第一個(gè)哈希表中是否存在足夠的空間,以及如果存在,則在第一個(gè)哈希表中存儲(chǔ)該關(guān)鍵詞,否則在第二個(gè)哈希表中存儲(chǔ)該關(guān)鍵詞,以及如果不存在第二個(gè)哈希表,則創(chuàng)建一個(gè)新的哈希表并在其中存儲(chǔ)該關(guān)鍵詞。
23.如權(quán)利要求20的方法,其中在所述至少一個(gè)哈希表中存儲(chǔ)關(guān)鍵詞的步驟包括判斷在所述一系列哈希表的第一個(gè)哈希表中是否存在足夠的空間,以及如果存在,則在該哈希表中存儲(chǔ)該關(guān)鍵詞,否則在所述一系列哈希表中的下一個(gè)哈希表中存儲(chǔ)該關(guān)鍵詞,以及如果在所述一系列哈希表中不存在下一個(gè)哈希表,則創(chuàng)建一個(gè)新的哈希表作為所述一系列哈希表中的下一個(gè)哈希表并在其中存儲(chǔ)該關(guān)鍵詞。
24.如權(quán)利要求19的方法,其中檢索數(shù)據(jù)對象的步驟包括,檢測第一個(gè)哈希表,以判斷數(shù)據(jù)對象的關(guān)鍵詞是否存在于第一個(gè)哈希表中,并且如果不存在,則檢測第二個(gè)哈希表,以判斷數(shù)據(jù)對象的關(guān)鍵詞是否存在于第二個(gè)哈希表中,并且如果不存在第二個(gè)哈希表,則返回?cái)?shù)據(jù)對象不存在于系統(tǒng)中的指示。
25.如權(quán)利要求24的方法,其中檢測哈希表以判斷數(shù)據(jù)對象的關(guān)鍵詞是否存在于哈希表中的步驟進(jìn)一步包括,判斷在哈希表中是否具有足夠的空間用于存儲(chǔ)該關(guān)鍵詞,以及如果數(shù)據(jù)對象的關(guān)鍵詞不存在于哈希表中,并且哈希表中具有足夠的空間用于存儲(chǔ)該關(guān)鍵詞,則返回?cái)?shù)據(jù)對象不存在于系統(tǒng)中的指示。
26.如權(quán)利要求20的方法,其中檢索數(shù)據(jù)對象的步驟包括,檢測所述一系列哈希表中的第一個(gè)哈希表以判斷數(shù)據(jù)對象的關(guān)鍵詞是否存在于所述一系列哈希表的第一個(gè)哈希表中,并且如果不存在,則檢測所述一系列哈希表中的下一個(gè)哈希表,以判斷數(shù)據(jù)對象的關(guān)鍵詞是否存在于所述一系列哈希表中的下一個(gè)哈希表中,并且如果所述一系列哈希表中不存在下一個(gè)哈希表,則返回?cái)?shù)據(jù)對象不存在于系統(tǒng)中的指示。
27.如權(quán)利要求26的方法,其中檢測哈希表以判斷數(shù)據(jù)對象的關(guān)鍵詞是否存在于哈希表中的步驟進(jìn)一步包括,判斷在哈希表中是否具有足夠的空間用于存儲(chǔ)該關(guān)鍵詞,以及如果數(shù)據(jù)對象的關(guān)鍵詞不存在于哈希表中,并且哈希表中具有足夠的空間用于存儲(chǔ)該關(guān)鍵詞,則返回?cái)?shù)據(jù)對象不存在于系統(tǒng)中的指示。
28.如權(quán)利要求20的方法,其中檢索數(shù)據(jù)對象的步驟包括,檢測所述一系列哈希表中的最后一個(gè)哈希表以判斷數(shù)據(jù)對象的關(guān)鍵詞是否存在于所述一系列哈希表的最后一個(gè)哈希表中,如果不存在,則檢測所述一系列哈希表中的前一個(gè)哈希表,以判斷數(shù)據(jù)對象的一個(gè)關(guān)鍵詞是否存在于所述一系列哈希表的前一個(gè)哈希表中,并且如果在所述一系列哈希表中不存在前一個(gè)哈希表,則返回?cái)?shù)據(jù)對象不存在于系統(tǒng)中的指示。
29.如權(quán)利要求19的方法,其中單次寫入索引可以從小的數(shù)據(jù)對象集合擴(kuò)展為非常大的數(shù)據(jù)對象的集合,并且其中將關(guān)鍵詞包括在單次寫入索引中的步驟包括創(chuàng)建包含固定內(nèi)容的索引條目,并且將該索引條目存儲(chǔ)在永久的存儲(chǔ)位置。
30.如權(quán)利要求29的方法,其中將關(guān)鍵詞包括在單次寫入索引中的步驟進(jìn)一步包括創(chuàng)建包含固定內(nèi)容的元數(shù)據(jù)條目,并且將該元數(shù)據(jù)條目存儲(chǔ)在永久的存儲(chǔ)位置,這樣的元數(shù)據(jù)條目被用于定位索引條目。
31.如權(quán)利要求29的方法,其中將關(guān)鍵詞包括在單次寫入索引中的步驟永久地建立能夠找到包含該關(guān)鍵詞的索引條目的可能的存儲(chǔ)位置。
32.如權(quán)利要求29的方法,其中在永久存儲(chǔ)位置存儲(chǔ)索引條目的步驟包括,在由相應(yīng)的數(shù)據(jù)對象的終止日期確定的永久存儲(chǔ)位置存儲(chǔ)索引條目。
全文摘要
根據(jù)本發(fā)明,提供了用于組織數(shù)據(jù)對象以便進(jìn)行快速檢索的系統(tǒng)。該系統(tǒng)包括至少一個(gè)定義了數(shù)據(jù)扇區(qū)的數(shù)據(jù)存儲(chǔ)介質(zhì)。此外,該系統(tǒng)還包括至少一個(gè)在數(shù)據(jù)存儲(chǔ)介質(zhì)上的數(shù)據(jù)對象。而且,該系統(tǒng)還包括與至少一個(gè)數(shù)據(jù)對象相關(guān)的至少一個(gè)關(guān)鍵詞。而且,該系統(tǒng)還包括至少一個(gè)在數(shù)據(jù)存儲(chǔ)介質(zhì)上的單次寫入索引,以管理至少一個(gè)數(shù)據(jù)對象。
文檔編號G06F17/30GK1790330SQ20051012879
公開日2006年6月21日 申請日期2005年12月2日 優(yōu)先權(quán)日2004年12月15日
發(fā)明者許為善, 翁紹基 申請人:國際商業(yè)機(jī)器公司