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