專利名稱::數(shù)據(jù)庫系統(tǒng)及其數(shù)據(jù)存取方法
技術(shù)領(lǐng)域:
:本發(fā)明是關(guān)于一種數(shù)據(jù)庫系統(tǒng)及數(shù)據(jù)存取方法,且特別關(guān)于一種利用索引的數(shù)據(jù)庫系統(tǒng)及數(shù)據(jù)存取方法。
背景技術(shù):
:隨著電子技術(shù)的進(jìn)步,計算機(jī)或各式電子裝置所處理與儲存的數(shù)據(jù)量也越來越大。雖然,儲存裝置的存取速度不斷的提升,然而,如果沒有一套有效的數(shù)據(jù)存取方法,即使有龐大的數(shù)據(jù),也難以有效擷取有用的信息。因應(yīng)此類需求,人們發(fā)展出數(shù)據(jù)庫(database)及相關(guān)技術(shù),使信息擷取(dataretrieval)的效率獲得相當(dāng)程度的改善。數(shù)據(jù)庫通常具有許多數(shù)據(jù)表(table),每個數(shù)據(jù)表由許多數(shù)據(jù)紀(jì)錄(datarecord)組成,而每一數(shù)據(jù)記錄則具有多數(shù)個屬性值(attributevalue)。請參照圖1,此圖例示一數(shù)據(jù)表102與儲存媒體106之間的關(guān)系。在此例中,數(shù)據(jù)表102具有多數(shù)筆數(shù)據(jù)記錄,而每筆數(shù)據(jù)記錄各自具有姓名、公司、年紀(jì)、電子郵件等屬性值。例如,Peter的公司為B&G,年紀(jì)45歲、其電子郵件為Peter@BG.com。為了將數(shù)據(jù)表102儲存于數(shù)字設(shè)備中,數(shù)據(jù)表102的數(shù)據(jù),會先借由ASCII或Unicode等編碼,轉(zhuǎn)換成對應(yīng)的位序列(binarysequence)104。這些位序列104再進(jìn)一步儲存到硬盤、磁帶或光盤等儲存媒體106。假設(shè)在此范例中,數(shù)據(jù)記錄是依數(shù)據(jù)表102所示順序存于存儲媒體106中,當(dāng)我們想要查詢有哪些人是屬于MIDHOST公司時,我們需要從第一筆記錄開始,逐筆記錄檢查各數(shù)據(jù)記錄的公司屬性值,直到找到“公司”屬性值為“MIDHOST”為止。然而,此種方法對于數(shù)據(jù)量龐大的數(shù)據(jù)庫來說,將耗去過多的時間。因此,便有對數(shù)據(jù)記錄建立索引的構(gòu)想,以加速搜尋的過程。所謂索引是針對數(shù)據(jù)的某些字段或字段的組合,對于數(shù)據(jù)紀(jì)錄(datarecord)予以排序,并將其排序結(jié)果存成索引文件,以便搜尋特定信息時之用。舉例來說,圖2a與圖2b即例示對圖1中的數(shù)據(jù)表102,透過不同的排序方法以進(jìn)行索引的編制。在圖2a中,數(shù)據(jù)記錄是以“姓名”的屬性(attribute)作為索引值,并對數(shù)據(jù)表102的數(shù)據(jù)記錄重新排序。并且,利用此排序的結(jié)果,將其索引值,也就是“姓名”的屬性值,與指向數(shù)據(jù)記錄的指針(indicator)共同存成索引文件(indexfile)。此索引文件內(nèi)容為一數(shù)組(array),且此數(shù)組的每一個元素(element)包含兩個子元素(sub-element),第一個子元素為索引值,亦即“姓名”的屬性值,而第二個子元素為對應(yīng)此索引值的數(shù)據(jù)記錄在存儲媒體中的存取地址(accessaddress),例如某磁盤某扇區(qū)(sector)的某偏移地址(offset)。在有了索引文件之后,如果要查詢具有索引值的數(shù)據(jù)記錄,便可將待查索引值與索引文件中的索引值比較,透過各種搜尋方法,以找到所需要的數(shù)據(jù)記錄所存放的地址。雖然在圖2a中是以一屬性作為索引,然而索引也可透過二個以上的屬性或各種組合而構(gòu)成,例如在圖2b中所示以“公司”與“年紀(jì)”作為索引的例子。透過索引確實(shí)能加速數(shù)據(jù)查詢的速度,然而,由于索引本身需要占據(jù)空間,且當(dāng)數(shù)據(jù)變動時,索引必須重新調(diào)整,因而間接影響數(shù)據(jù)庫的整體效能。因此,在實(shí)際的運(yùn)用中,能否建立一個具有彈性與效能的索引架構(gòu),將大幅地決定數(shù)據(jù)存取的效能。此外,由于今日電子應(yīng)用的多元化,電子裝置與計算機(jī)之間的差距已經(jīng)越來越模糊化。雖然,數(shù)據(jù)庫的技術(shù)最初是為計算機(jī)設(shè)計,然而,在今日,許多特制的電子裝置,例如交換器(switch)、網(wǎng)關(guān)器(gateway)、路由器(router)等等,都使用大小不同的數(shù)據(jù)庫,以提供更具威力的服務(wù)。在這些電子裝置中,由于硬件架構(gòu)的特性,往往具有許多設(shè)計上的限制。因此,如何針對計算機(jī)及各種電子裝置,妥善利用索引等概念,以設(shè)計出一種具有彈性,兼具數(shù)據(jù)存取效能的數(shù)據(jù)存取系統(tǒng)及方法,即為一件非常重要的工作。
發(fā)明內(nèi)容因此,本發(fā)明目的的一是提供一種數(shù)據(jù)存取方法,借由此數(shù)據(jù)存取方法,有效率地存取儲存于數(shù)據(jù)庫中的數(shù)據(jù)記錄。本發(fā)明的另一目的是提供一種數(shù)據(jù)庫系統(tǒng),其提供使用者一有效率的數(shù)據(jù)存取架構(gòu)。本發(fā)明的再一目的是提供一種函數(shù)庫,供使用者將此函數(shù)庫整合于數(shù)據(jù)庫系統(tǒng)中,以有效率地存取數(shù)據(jù)。依據(jù)本發(fā)明的較佳實(shí)施例的數(shù)據(jù)存取方法,至少包括下列步驟首先,依據(jù)數(shù)據(jù)存取要求(dataaccessrequest),參照一雜湊表(hashtable)及一紀(jì)錄指針數(shù)組(recordindicatorarray),以存取對應(yīng)存取要求的至少一數(shù)據(jù)記錄。如果無法透過上一步驟找到符合條件的數(shù)據(jù)記錄,則參照至少一索引數(shù)組、至少一連結(jié)數(shù)組及前述的紀(jì)錄指針數(shù)組以存取對應(yīng)存取要求的至少一數(shù)據(jù)記錄。紀(jì)錄指針數(shù)組由紀(jì)錄指針組成,每一紀(jì)錄指針分別指向一筆數(shù)據(jù)記錄。索引數(shù)組及連結(jié)數(shù)組則對應(yīng)排序方法而組成。連結(jié)數(shù)組指出每一紀(jì)錄指針依據(jù)排序方法所對應(yīng)的下一個紀(jì)錄指針,而索引數(shù)組則指出依據(jù)排序方法將數(shù)據(jù)記錄分為一預(yù)定數(shù)目的子集合的起始紀(jì)錄指針、終止紀(jì)錄指針及數(shù)據(jù)個數(shù),此起始紀(jì)錄指針是各子集合的第一筆數(shù)據(jù)記錄所對應(yīng)的紀(jì)錄指針;而終止紀(jì)錄指針是指各子集合的最后一筆數(shù)據(jù)記錄所對應(yīng)的紀(jì)錄指針;數(shù)據(jù)個數(shù)是各子集合的數(shù)據(jù)總數(shù)。本發(fā)明的另一實(shí)施例是將上述存取方法實(shí)作于數(shù)據(jù)庫系統(tǒng)或函數(shù)庫(functionlibrary)中。據(jù)此,本發(fā)明至少具有下列優(yōu)點(diǎn)首先,配合雜湊表可加速數(shù)據(jù)的查詢速度;其次,當(dāng)無法透過雜湊表查詢數(shù)據(jù)時,透過索引數(shù)組可快速縮小查詢的范圍,然后再透過連結(jié)數(shù)組予以循序搜尋;第三,對于不同的索引及相對的排序方法,只要準(zhǔn)備不同的索引數(shù)組及連結(jié)數(shù)組,而無須更動紀(jì)錄指針數(shù)組;第四,此方法兼具效能與空間的考量,使用者能夠依據(jù)需求,調(diào)整索引數(shù)組、雜湊表的大小而達(dá)到各種要求的平衡追求。圖1是例示數(shù)據(jù)庫與儲存媒體的關(guān)系;圖2a是例示索引概念;圖2b是例示索引概念;圖3是例示依據(jù)本發(fā)明的實(shí)施例架構(gòu)圖;圖4是例示實(shí)施例所需使用數(shù)據(jù)間對應(yīng)圖;圖5a是例示數(shù)據(jù)間的連結(jié)關(guān)系圖;圖5b是例示數(shù)據(jù)間的連接關(guān)系圖;圖6是繪示實(shí)施例的流程圖;圖7a是繪示平衡程序狀況;圖7b是繪示平衡程序的另一狀況;圖7c是繪示平衡程序的另一狀況。符號說明102~數(shù)據(jù)表104~位序列106~儲存媒體30~數(shù)據(jù)庫系統(tǒng)322~存取要求324~搜尋模塊326~儲存媒體接口328~第一儲存媒體330~第二儲存媒體332~至少一數(shù)據(jù)記錄402~雜湊表404~索引數(shù)組406~紀(jì)錄指針數(shù)組408~連結(jié)數(shù)組502~紀(jì)錄指針數(shù)組范例504~索引陣范例506~連結(jié)數(shù)組范例具體實(shí)施方式圖3例示依據(jù)本發(fā)明的較佳實(shí)施例的數(shù)據(jù)庫系統(tǒng)30。數(shù)據(jù)庫系統(tǒng)30至少具有第一儲存媒體328、儲存媒體接口326、第二儲存媒體330、及搜尋模塊324。第一儲存媒體(storagemedia)328,例如硬盤、光盤、磁帶機(jī)、閃存(flashmemory)、或是分布式儲存系統(tǒng)(distributedstoragesystem),是用來存放數(shù)據(jù)庫的數(shù)據(jù)記錄(datarecord)。儲存媒體接口(interface)326,是對應(yīng)第一儲存媒體328,當(dāng)接收一紀(jì)錄指針,例如某扇區(qū)的某相對地址,從第一儲存媒體328讀取并回傳對應(yīng)該紀(jì)錄指針的數(shù)據(jù)記錄332。換言之,儲存媒體接口可為驅(qū)動程序等軟件、控制器等硬件,或是各種能夠接收紀(jì)錄指針以回傳對應(yīng)的數(shù)據(jù)記錄的軟件與硬件的組合。第二儲存媒體330,例如存儲器、硬盤等,是用來存放雜湊表(hashtable)、紀(jì)錄指針數(shù)組(recordindicatorarray)、至少一索引數(shù)組(indexarray)與至少一連結(jié)數(shù)組(linkarray)。必須指出的是,在實(shí)作時,第一儲存媒體328與第二儲存媒體330,亦可為同一硬件裝置的不同部分,例如分別位于硬盤機(jī)的不同區(qū)域。搜尋模塊324接收存取要求(accessrequest)322,例如SQL的條件搜尋指令(searchinstruction)。并且,搜尋模塊324依據(jù)存取要求322的內(nèi)容,先讀取存于第二儲存媒體330的雜湊表及紀(jì)錄指針數(shù)組,以找尋是否具有符合該存取要求的數(shù)據(jù)記錄存在。假如找到一筆以上符合存取要求的數(shù)據(jù)記錄時,便透過紀(jì)錄指針數(shù)組中所存的紀(jì)錄指針,利用儲存媒體接口326,以存取第一儲存媒體328中對應(yīng)的數(shù)據(jù)記錄332。相對地,假使無法透過雜湊表及紀(jì)錄指針數(shù)組找到對應(yīng)存取要求的數(shù)據(jù)記錄,則進(jìn)一步透過第二儲存媒體330的索引數(shù)組、連結(jié)數(shù)組及紀(jì)錄指針數(shù)組,以存取對應(yīng)該存取要求的至少一筆數(shù)據(jù)記錄。圖4說明存于第二儲存媒體330中的雜湊表402、索引數(shù)組404、紀(jì)錄指針數(shù)組406、及連結(jié)數(shù)組408間的相對關(guān)系。紀(jì)錄指針數(shù)組406存放由紀(jì)錄指針組成的序列。借由這些紀(jì)錄指針,可利用前述的儲存媒體接口326,以存取第一儲存媒體328對應(yīng)這些紀(jì)錄指針的數(shù)據(jù)記錄(datarecord)。雜湊表402亦為一數(shù)組形式,其數(shù)組元素所存的數(shù)值指向紀(jì)錄指針數(shù)組406的元素。并且,雜湊表402本身是依據(jù)存取需求322,使用雜湊函數(shù)進(jìn)行計算以構(gòu)成。舉例來說,假設(shè)前述的存取要求322為“姓名”/“公司”/“年齡”三個屬性的組合,則雜湊函數(shù)可為此三個屬性的數(shù)值的加總除以雜湊表402的長度后,再取其余數(shù)。例如“A”/“B”/“23”取其對應(yīng)的數(shù)值和(65+66+23),并將的除以雜湊表402長度1024后,取余數(shù)為154,以作為雜湊函數(shù)值。經(jīng)由雜湊函數(shù)算出來的值,即為雜湊表402的數(shù)組的索引(index)。例如前例“A”/“B”/“23”的存取需求322是對應(yīng)雜湊表402的第154個元素,而借由此第154個元素的值可指向紀(jì)錄指針數(shù)組406的特定元素,且借此紀(jì)錄指針數(shù)組406的特定元素可進(jìn)一步指向儲存于第一儲存媒體328中的特定數(shù)據(jù)記錄。因此,使用雜湊表402在理想狀態(tài)下,可于較短時間內(nèi)找到對應(yīng)存取要求的數(shù)據(jù)記錄。如果無法透過雜湊函數(shù)在第一時間,于雜湊表402上找到對應(yīng)存取要求322的元素,則可依預(yù)先設(shè)定規(guī)則,往后一預(yù)定距離尋找是否存在符合條件的元素,如果還是失敗,則再往后一預(yù)定距離尋找所需元素。至于往后尋找的次數(shù)即為雜湊函數(shù)的層數(shù)(layer)。舉例來說,下面為一個雜湊函數(shù)[HashValue[i]=Σj=0,4,5,...j<key_length(Key[i+j])|i=0i<4]]>HashIndex=HashValuemodtotal_hash_nbrHashIndexDepthi=(HashIndex+(17*i))|CollisionHashValue[i]為雜湊函數(shù)值,Key為索引值或?qū)傩灾担瑢ashValue除以雜湊表的大小total_hash_nbr后取余數(shù)即為雜湊表上的索引HashIndex。如果第一次無法在雜湊表上找到對應(yīng)元素,則往相對距離后17個距離再試一次,在此例中,最多共試四次,也就是四層,如果都找不到,則停止使用雜湊表進(jìn)行搜尋工作。由上可知,雜湊表的大小以及雜湊函數(shù),與雜湊函數(shù)中往后尋找的層數(shù),都會影響到是否可在雜湊表中找到所需數(shù)據(jù)的機(jī)會。雖然龐大的雜湊表與復(fù)雜的雜湊函數(shù)似乎較為理想,然而實(shí)際上因?yàn)槌杀疽约斑\(yùn)算復(fù)雜度的考量,并不宜將全部的搜尋工作交由雜湊表進(jìn)行處理。當(dāng)搜尋模塊324無法透過雜湊表402找到所需的數(shù)據(jù)記錄時,搜尋模塊324便開始利用索引數(shù)組404、連結(jié)數(shù)組408、與紀(jì)錄指針數(shù)組406,以繼續(xù)尋找數(shù)據(jù)。索引數(shù)組404及連結(jié)數(shù)組408是針對一特定排序方法制成。并且,連結(jié)數(shù)組408指出紀(jì)錄指針數(shù)組406每一紀(jì)錄指針依據(jù)該特定排序方法所對應(yīng)的下一個紀(jì)錄指針。索引數(shù)組404是依據(jù)所對應(yīng)的排序方法,將數(shù)據(jù)表中的數(shù)據(jù)記錄分為多個子集合(subset),并且在索引數(shù)組404指出多個子集合所涵蓋的紀(jì)錄指針的范圍。此外,索引數(shù)組404亦指出于各子集合中數(shù)據(jù)記錄的個數(shù)。舉例來說,以姓名作為索引,并進(jìn)行排序,可將所有數(shù)據(jù)記錄分為開頭字母為A-C,D-M,N-P,Q-Z四個子集合。在此例中,索引數(shù)組404的每個元素具有起始值、終止值與數(shù)據(jù)記錄總數(shù)值三個數(shù)值,前二者用來界定索引的范圍,而后者則用來指出此子集合的數(shù)據(jù)記錄個數(shù)。圖5a及圖5b例示實(shí)作上述連結(jié)數(shù)組408及索引數(shù)組404的方法。在圖5a中,紀(jì)錄指針數(shù)組406的范例502具有六個元素,分別標(biāo)號0到5,而各元素的內(nèi)容則分別指向儲存于儲存媒體106的不同數(shù)據(jù)紀(jì)錄。圖5b例示索引數(shù)組404的范例504。在此圖中,揭示了索引數(shù)組404中的一個數(shù)組元素,且此數(shù)組元素由三個部分組成,分別為“1”、“5”、“6”。其中“1”為此數(shù)組元素所對應(yīng)的子集合的起始值,“5”為此數(shù)組元素所對應(yīng)的子集合的終止值,而“6”則為此數(shù)組元素所對應(yīng)的子集合的數(shù)據(jù)個數(shù)。此外,連結(jié)數(shù)組408的范例506與紀(jì)錄指針數(shù)組406的范例502為一對一對應(yīng),且連結(jié)數(shù)組408的例子506的元素指出依據(jù)排序方法下一個紀(jì)錄指針的位置。舉例來說,依據(jù)此連結(jié)數(shù)組408的范例506及索引數(shù)組404的范例504,得知此子集合自元素標(biāo)號“1”開始,并且可得知紀(jì)錄指針數(shù)組406的范例502,在上述的排序方法下,其排列為標(biāo)號“1”,“3”,“4”,“0”,“2”,“5”的順序。此是由于紀(jì)錄指針數(shù)組406的范例502標(biāo)號“1”的元素,所對應(yīng)的連結(jié)數(shù)組408的范例506的元素是對應(yīng)到標(biāo)號“3”,而標(biāo)號“3”的元素更進(jìn)一步對應(yīng)到標(biāo)號“4”,故依此類推可得到全部的排列順序。有了索引數(shù)組404,便可以使用二元搜尋(binarysearch)等方法,先找出待查索引值所落在的子集合。接著,再從該子集合的起始紀(jì)錄指針處,配合連結(jié)數(shù)組408依序搜尋,以找出最后符合條件的數(shù)據(jù)記錄。圖6是一流程圖,例示如何使用上述雜湊表402、索引數(shù)組404、紀(jì)錄指針數(shù)組406,及連結(jié)數(shù)組408以達(dá)成數(shù)據(jù)存取及搜尋的工作。首先,依據(jù)數(shù)據(jù)存取要求,找尋雜湊表402(步驟602)。判斷是否能從雜湊表402找到符合條件的數(shù)據(jù)(步驟603)。如果直接找到符合條件的紀(jì)錄指針,就使用紀(jì)錄指針存取相對的數(shù)據(jù)記錄(步驟604)。如果在雜湊表402上未直接找到符合條件的紀(jì)錄指針,也就是發(fā)生碰撞時,判斷是否在預(yù)設(shè)層數(shù)內(nèi)(步驟606),例如之前所述的例子中,往后以預(yù)定距離最多搜尋三次。如果還在預(yù)設(shè)層數(shù)內(nèi),就找尋下一個位置(步驟608),同樣地,如果找到符合條件的紀(jì)錄指針,就透過紀(jì)錄指針存取數(shù)據(jù)(步驟604)。反之,則對索引數(shù)組404進(jìn)行二元搜尋尋找對應(yīng)的數(shù)據(jù)索引(步驟610)。判斷是否能找到符合條件的數(shù)據(jù)(步驟611)。如果透過二元搜尋找不到對應(yīng)數(shù)據(jù),則表示該數(shù)據(jù)庫不存在該筆數(shù)據(jù)(步驟618)。反之,則循序搜尋連結(jié)數(shù)組408(步驟612)。判斷是否能找到符合條件的數(shù)據(jù)(步驟613)。如果循序搜尋找不到對應(yīng)的紀(jì)錄指針,亦表示數(shù)據(jù)庫中無此數(shù)據(jù)(步驟618)。反之,則同樣使用紀(jì)錄指針數(shù)組406存取符合條件的的數(shù)據(jù)記錄(步驟604)。此外,在上述的說明中,僅提到使用一個連結(jié)數(shù)組408與一個索引數(shù)組404。然而,依據(jù)不同的索引及排序方法的選定,我們可以使用一個以上的連結(jié)數(shù)組408與索引數(shù)組404的組合。舉例來說,當(dāng)我們使用兩種不同的索引及排序方法,例如圖2a與圖2b所示的情況,只需要再增加一個連結(jié)數(shù)組408與一個索引數(shù)組404,而不需改變紀(jì)錄指針數(shù)組406與雜湊表402。并且,當(dāng)數(shù)據(jù)庫的數(shù)據(jù)因?yàn)閿?shù)據(jù)的存取而發(fā)生變動,例如新增100筆數(shù)據(jù)。此時,亦只需要調(diào)整連結(jié)數(shù)組及索引數(shù)組,而無須更動雜湊表402。另外,雖然前述索引數(shù)組404能夠大幅縮小搜尋的范圍,然而其帶來的效果與索引數(shù)組404各元素所代表的子集合大小有密切的關(guān)聯(lián)。在較佳的情況下,這些子集合皆具有類似的元素個數(shù),將能夠達(dá)到空間與時間的最佳化。因此,下列的偽碼供說明一平衡程序,使索引數(shù)組所代表的各個子集合的元素個數(shù)差值小于一預(yù)定值。ifindex_element_nbrk>N2,thenwhilei,|(index_element_nbri-average_element_nbr)>N1ifindex_element_nbri<average_element_nbr,and(index_element_nbri+index_element_nbri+1)<=average_element_nbr,thenindexi+1ismergedtoindexi.ifindex_element_nbri<average_element_nbr,and(index_element_nbri+index_element_nbri+1)>average_element_nbr,then(average_element_nbr-index_element_nbri)elementsaremovedfromindexi+1toindexi.ifindex_element_nbri>average_element_nbr,then(index_element_nbri-average_element_nbr)elementsaresplittoindexi+1.在此平衡程序中,先尋找索引數(shù)組404是否有元素標(biāo)號k的數(shù)據(jù)個數(shù)index_element_nbrk大于預(yù)定值N2。假如成立的話,開始進(jìn)行1.1循環(huán)中的步驟(包括1.1.1,1.1.2,1.1.3),直到所有索引數(shù)組404的元素的數(shù)據(jù)個數(shù)index_element_nbri與索引數(shù)組404的元素的數(shù)據(jù)個數(shù)的平均值average_element_nbr相差皆小于N1。在1.1循環(huán)中,依據(jù)三種不同的狀況分別采取不同的平衡程序。圖7a、7b、7c例示此三種不同狀況,其中圈圈的大小代表所對應(yīng)子集合的元素的數(shù)據(jù)個數(shù)。在程序1.1.1,如圖7a所示,索引數(shù)組404的第i個元素的數(shù)據(jù)個數(shù)index_element_nbri小于索引數(shù)組404的元素的數(shù)據(jù)個數(shù)的平均值average_element_nbr,并且索引數(shù)組404的第i個元素與第i+1個元素的數(shù)據(jù)個數(shù)的和小于等于索引數(shù)組404的元素的數(shù)據(jù)個數(shù)的平均值average_element_nbr。在此種狀況中,將索引數(shù)組404的第i+1個元素合并到第i個元素。在程序1.1.2,如圖7b所示,索引數(shù)組404第i個元素的數(shù)據(jù)個數(shù)小于索引數(shù)組404的元素的數(shù)據(jù)個數(shù)的平均值average_element_nbr,并且索引數(shù)組404的第i個元素與第i+1個元素的數(shù)據(jù)個數(shù)的和大于索引數(shù)組404的元素的數(shù)據(jù)個數(shù)的平均值average_element_nbr。在此種狀況中,將(average_element_nbr-index_element_nbri)個數(shù)據(jù)從索引數(shù)組404的第i+1個元素移到第i個元素。在程序1.1.3,如圖7c所示,索引數(shù)組404第i個元素的數(shù)據(jù)個數(shù)大于索引數(shù)組404的元素的數(shù)據(jù)個數(shù)的平均值average_element_nbr,此時將索引數(shù)組404第i個元素中的(index_element_nbri-average_element_nbr)數(shù)據(jù)分割到第i+1個元素。透過此類的平衡程序,即能使索引數(shù)組的元素個數(shù)的差值小于一預(yù)定值。換言之,整個數(shù)據(jù)存取的速度亦能得到最佳化的處理。前述的方法,除可實(shí)作成一個完整的數(shù)據(jù)庫系統(tǒng),亦可實(shí)作為函數(shù)庫的產(chǎn)品。使用者可將函數(shù)庫整合到原先的數(shù)據(jù)庫,例如SQLserver,ORACLE等數(shù)據(jù)庫中。此類函數(shù)庫的實(shí)施例可包含索引建立函數(shù)(indexcreationfunction)、數(shù)據(jù)存取函數(shù)(dataaccessfunction)及索引維護(hù)函數(shù)(indexmaintainfunction)。索引建立函數(shù)接收復(fù)數(shù)筆數(shù)據(jù)及至少一排序方法作為參數(shù),且依據(jù)此復(fù)數(shù)筆數(shù)據(jù)及排序方法產(chǎn)生前述的紀(jì)錄指針數(shù)組、雜湊表、至少一索引數(shù)組,與至少一連結(jié)數(shù)組。數(shù)據(jù)存取函數(shù)接收一存取要求作為為參數(shù),并依據(jù)數(shù)據(jù)存取要求,參照雜湊表及紀(jì)錄指針數(shù)組,以存取對應(yīng)存取要求的至少一數(shù)據(jù)記錄。并且,當(dāng)參照雜湊表及紀(jì)錄指針數(shù)組未找到對應(yīng)存取要求的數(shù)據(jù)記錄時,參照索引數(shù)組、連結(jié)數(shù)組及紀(jì)錄指針數(shù)組,以存取對應(yīng)存取要求的至少一筆數(shù)據(jù)記錄。此外,索引維護(hù)函數(shù),是當(dāng)調(diào)整索引數(shù)組時,進(jìn)行一平衡程序,使索引數(shù)組的各元素保持平衡。權(quán)利要求1.一種數(shù)據(jù)存取方法,因應(yīng)一存取要求,以存取多筆數(shù)據(jù)記錄,該方法包含依據(jù)該存取要求,參照一雜湊表及一紀(jì)錄指針數(shù)組,以存取對應(yīng)該存取要求的至少一該數(shù)據(jù)記錄;當(dāng)參照該雜湊表及該紀(jì)錄指針數(shù)組未找到對應(yīng)該存取要求的該數(shù)據(jù)記錄時,則參照至少一索引數(shù)組、至少一連結(jié)數(shù)組及該紀(jì)錄指針數(shù)組,以存取對應(yīng)該存取要求的至少一該數(shù)據(jù)記錄。2.根據(jù)權(quán)利要求1所述的數(shù)據(jù)存取方法,其中該紀(jì)錄指針數(shù)組包含多個紀(jì)錄指針,每一該紀(jì)錄指針分別指向一筆該數(shù)據(jù)記錄。3.根據(jù)權(quán)利要求1所述的數(shù)據(jù)存取方法,其中該索引數(shù)組及該連結(jié)數(shù)組對應(yīng)不同的一排序方法,且該復(fù)數(shù)筆數(shù)據(jù)記錄依據(jù)該排序方法分為多個子集合。4.根據(jù)權(quán)利要求3所述的數(shù)據(jù)存取方法,其中該連結(jié)數(shù)組指出每一該紀(jì)錄指針依據(jù)該排序方法所對應(yīng)的下一個該紀(jì)錄指針,且該索引數(shù)組指出該多個子集合的起始紀(jì)錄指針、終止紀(jì)錄指針及數(shù)據(jù)個數(shù),該起始紀(jì)錄指針是各該子集合的第一筆數(shù)據(jù)記錄所對應(yīng)的紀(jì)錄指針;終止紀(jì)錄指針是指各該子集合的最后一筆數(shù)據(jù)記錄所對應(yīng)的紀(jì)錄指針;而數(shù)據(jù)個數(shù)是各該子集合的數(shù)據(jù)總數(shù)。5.根據(jù)權(quán)利要求1所述的數(shù)據(jù)存取方法,其中參照該索引數(shù)組、該連結(jié)數(shù)組及該數(shù)據(jù)記錄數(shù)組以存至少一該數(shù)據(jù)記錄的步驟是包含以二元搜尋法搜尋該索引數(shù)組,以取得對應(yīng)該存取要求的該子集合的該起始紀(jì)錄指針;從該起始紀(jì)錄指針開始,利用該連結(jié)數(shù)組循序找尋對應(yīng)該存取要求的至少一該數(shù)據(jù)記錄。6.根據(jù)權(quán)利要求3所述的數(shù)據(jù)存取方法,其中該索引數(shù)組及該連結(jié)數(shù)組是依據(jù)不同的該排序方法而有所不同。7.根據(jù)權(quán)利要求3所述的數(shù)據(jù)存取方法,其中該排序方法是依該存取要求決定。8.根據(jù)權(quán)利要求3所述的數(shù)據(jù)存取方法,其中該排序方法是一編制索引的規(guī)則。9.根據(jù)權(quán)利要求1所述的數(shù)據(jù)存取方法,其中該雜湊表是將具有相同雜湊值的元素,以一預(yù)定相差距離存放。10.根據(jù)權(quán)利要求1所述的數(shù)據(jù)存取方法,其中該連結(jié)數(shù)組及該索引數(shù)組因應(yīng)該多筆數(shù)據(jù)的變動而進(jìn)行調(diào)整。11.根據(jù)權(quán)利要求10所述的數(shù)據(jù)存取方法,其中當(dāng)調(diào)整該索引數(shù)組時,進(jìn)行一平衡程序,使該子集合的元素個數(shù)相差小于一預(yù)定值。12.一種數(shù)據(jù)庫系統(tǒng),其特征在于該數(shù)據(jù)庫系統(tǒng)包含一第一儲存媒體,供存放多筆數(shù)據(jù)紀(jì)錄;一儲存媒體接口,對應(yīng)該第一儲存媒體,供接收一紀(jì)錄指針,并回傳對應(yīng)該紀(jì)錄指針的一筆該數(shù)據(jù)記錄;一第二儲存媒體,該第二儲存媒體供存放一雜湊表、一紀(jì)錄指針數(shù)組、至少一索引數(shù)組、至少一連結(jié)數(shù)組;一搜尋模塊,該搜尋模塊接收一存取要求,并依據(jù)該存取要求,參照存于該第二儲存媒體的該雜湊表及該紀(jì)錄指針數(shù)組,并透過該儲存媒體接口存取對應(yīng)該存取要求的至少一該數(shù)據(jù)記錄;當(dāng)參照該雜湊表及該紀(jì)錄指針數(shù)組未找到對應(yīng)該存取要求的該數(shù)據(jù)記錄時,參照存于該第二儲存媒體的該至少一索引數(shù)組、該至少一連結(jié)數(shù)組及該紀(jì)錄指針數(shù)組,以存取對應(yīng)該存取要求的至少一該數(shù)據(jù)記錄。13.根據(jù)權(quán)利要求12所述的數(shù)據(jù)庫系統(tǒng),其特征在于該紀(jì)錄指針數(shù)組包含多個紀(jì)錄指針,每一該紀(jì)錄指針分別指向一筆該數(shù)據(jù)記錄。14.根據(jù)權(quán)利要求12所述的數(shù)據(jù)庫系統(tǒng),其特征在于該索引數(shù)組及該連結(jié)數(shù)組對應(yīng)不同的一排序方法,且該多筆數(shù)據(jù)記錄依據(jù)該排序方法分為多個子集合。15.根據(jù)權(quán)利要求14所述的數(shù)據(jù)庫系統(tǒng),其特征在于該連結(jié)數(shù)組指出每一該紀(jì)錄指針依據(jù)該排序方法所對應(yīng)的下一個該紀(jì)錄指針,且該索引數(shù)組指出該多個子集合的起始紀(jì)錄指針、終止紀(jì)錄指針及數(shù)據(jù)個數(shù),該起始紀(jì)錄指針是各該子集合的第一筆數(shù)據(jù)記錄所對應(yīng)的紀(jì)錄指針;終止紀(jì)錄指針是指各該子集合的最后一筆數(shù)據(jù)記錄所對應(yīng)的紀(jì)錄指針;而數(shù)據(jù)個數(shù)是各該子集合的數(shù)據(jù)總數(shù)。16.根據(jù)權(quán)利要求15所述的數(shù)據(jù)庫系統(tǒng),其特征在于該搜尋模塊是以二元搜尋法搜尋該索引數(shù)組,以取得對應(yīng)該存取要求的該子集合的該起始紀(jì)錄指針,并且該搜尋模塊從該起始紀(jì)錄指針開始,利用該連結(jié)數(shù)組循序找尋對應(yīng)該存取要求的至少一該數(shù)據(jù)記錄。17.根據(jù)權(quán)利要求14所述的數(shù)據(jù)庫系統(tǒng),其特征在于該索引數(shù)組及該連結(jié)數(shù)組是依據(jù)不同的該排序方法而有所不同。18.根據(jù)權(quán)利要求14所述的數(shù)據(jù)庫系統(tǒng),其特征在于該搜尋模塊依據(jù)該存取要求決定該排序方法,并使用該排序方法所對應(yīng)的該索引數(shù)組及該連結(jié)數(shù)組。19.根據(jù)權(quán)利要求14所述的數(shù)據(jù)庫系統(tǒng),其特征在于該排序方法是一編制索引的規(guī)則。20.根據(jù)權(quán)利要求12所述的數(shù)據(jù)庫系統(tǒng),其特征在于該雜湊表是將具有相同雜湊值的元素,以一預(yù)定相差距離存放。21.根據(jù)權(quán)利要求13所述的數(shù)據(jù)庫系統(tǒng),其特征在于該連結(jié)數(shù)組及該索引數(shù)組因應(yīng)該復(fù)數(shù)筆數(shù)據(jù)的變動而進(jìn)行調(diào)整。22.根據(jù)權(quán)利要求21所述的數(shù)據(jù)庫系統(tǒng),其特征在于當(dāng)調(diào)整該索引數(shù)組時,進(jìn)行一平衡程序,使該子集合的元素個數(shù)相差小于一預(yù)定值。23.根據(jù)權(quán)利要求12所述的數(shù)據(jù)庫系統(tǒng),其特征在于該第一儲存媒體為硬盤而該第二儲存媒體為存儲器。24.一種函數(shù)庫,其特征在于該函數(shù)庫包含一索引建立函數(shù),接收復(fù)數(shù)筆數(shù)據(jù)及至少一排序方法作為參數(shù),該索引建立函數(shù)依據(jù)該復(fù)數(shù)筆數(shù)據(jù)及該至少一排序方法產(chǎn)生一紀(jì)錄指針數(shù)組、一雜湊表、至少一索引數(shù)組,與至少一連結(jié)數(shù)組;一數(shù)據(jù)存取函數(shù),接收一存取要求作為參數(shù),并依據(jù)該數(shù)據(jù)存取要求,參照該雜湊表及該紀(jì)錄指針數(shù)組,以存取對應(yīng)該存取要求的至少一該數(shù)據(jù)記錄,以及,當(dāng)參照該雜湊表及該紀(jì)錄指針數(shù)組未找到對應(yīng)該存取要求的該數(shù)據(jù)記錄時,參照該至少一索引數(shù)組、該至少一連結(jié)數(shù)組及該紀(jì)錄指針數(shù)組,以存取對應(yīng)該存取要求的至少一該數(shù)據(jù)記錄。25.根據(jù)權(quán)利要求24所述的函數(shù)庫,其特征在于該紀(jì)錄指針數(shù)組包含復(fù)數(shù)紀(jì)錄指針,每一該紀(jì)錄指針分別指向一筆該數(shù)據(jù)記錄,并且該索引數(shù)組及該連結(jié)數(shù)組對應(yīng)不同的該排序方法,且該復(fù)數(shù)筆數(shù)據(jù)記錄依據(jù)該排序方法分為多個子集合,其中該連結(jié)數(shù)組指出每一該紀(jì)錄指針依據(jù)該排序方法所對應(yīng)的下一個該紀(jì)錄指針,且該索引數(shù)組指出該多個子集合的起始紀(jì)錄指針、終止紀(jì)錄指針及數(shù)據(jù)個數(shù),該起始紀(jì)錄指針是各該子集合的第一筆數(shù)據(jù)記錄所對應(yīng)的紀(jì)錄指針;終止紀(jì)錄指針是指各該子集合的最后一筆數(shù)據(jù)記錄所對應(yīng)的紀(jì)錄指針;而數(shù)據(jù)個數(shù)是各該子集合的數(shù)據(jù)總數(shù)。26.根據(jù)權(quán)利要求25所述的函數(shù)庫,其特征在于更包含一索引維護(hù)函數(shù),當(dāng)調(diào)整該索引數(shù)組時,進(jìn)行一平衡程序,使該子集合的元素個數(shù)相差小于一預(yù)定值。全文摘要本發(fā)明是一種數(shù)據(jù)庫系統(tǒng)及其數(shù)據(jù)存取方法,所述數(shù)據(jù)存取方法包括下列步驟首先,依據(jù)數(shù)據(jù)存取要求,嘗試參照雜湊表及紀(jì)錄指針數(shù)組,以存取對應(yīng)存取要求的至少一數(shù)據(jù)記錄;如果找不到符合條件的數(shù)據(jù)記錄時,則透過至少一索引數(shù)組及連結(jié)數(shù)組,并配合紀(jì)錄指針數(shù)組,以存取符合存取要求的至少一數(shù)據(jù)記錄。文檔編號G06F17/30GK1704930SQ200410042819公開日2005年12月7日申請日期2004年5月26日優(yōu)先權(quán)日2004年5月26日發(fā)明者王然益,吳新鈞申請人:智邦科技股份有限公司