一種基于連續(xù)內(nèi)存的數(shù)據(jù)庫索引系統(tǒng)及處理方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及一種數(shù)據(jù)庫索引技術(shù),尤其是涉及一種操作快速的基于連續(xù)內(nèi)存的數(shù)據(jù)庫索引系統(tǒng)以及處理方法。
【背景技術(shù)】
[0002]傳統(tǒng)的數(shù)據(jù)庫中,使用的是基于離散內(nèi)存的索引。存在多個問題。首先,不能多個進程共享訪問同一個索引。所有需要查詢或更新數(shù)據(jù)的進程需要將查詢或更新的數(shù)據(jù)交給數(shù)據(jù)庫查詢進程進行排隊操作。索引速度慢且不能充分利用計算資源。其次,離散的內(nèi)存不方便內(nèi)存管理,容易引起內(nèi)存碎片。最后,基于離散內(nèi)存的索引,想要持久化到文件比較復(fù)雜,速度也較慢。
【發(fā)明內(nèi)容】
[0003]本發(fā)明主要是解決現(xiàn)有技術(shù)中基于離散內(nèi)存的索引存在速度慢、效率低、不方便管理的問題,提供了一種操作快速的基于連續(xù)內(nèi)存的數(shù)據(jù)庫索引系統(tǒng)。
[0004]本發(fā)明還提供了一種操作快速的基于連續(xù)內(nèi)存的數(shù)據(jù)庫索引處理方法。
[0005]本發(fā)明的上述技術(shù)問題主要是通過下述技術(shù)方案得以解決的:一種基于連續(xù)內(nèi)存的數(shù)據(jù)庫索引系統(tǒng),括連續(xù)內(nèi)存,所述內(nèi)存內(nèi)形成有索引管理區(qū)、哈希區(qū)、沖突區(qū)和剩余計數(shù)區(qū),
索引管理區(qū):用于管理整個索引內(nèi)存,記錄索引的基本信息的內(nèi)存區(qū)域;
哈希區(qū):用于保存節(jié)點信息,能對節(jié)點信息進行插入、查詢和刪除;
沖突區(qū):用于保存與哈希區(qū)沖突的節(jié)點信息,能對節(jié)點信息進行插入、查詢和刪除;沖突是指插入節(jié)點與哈希區(qū)節(jié)點的鍵值不同但哈希值相同。
[0006]剩余計數(shù)區(qū):用來保存沖突區(qū)內(nèi)沒有被使用的節(jié)點統(tǒng)計信息。統(tǒng)計沖突區(qū)內(nèi)未被使用的節(jié)點位置及數(shù)量信息。
[0007]本發(fā)明中采用連續(xù)內(nèi)存,并將連續(xù)內(nèi)存分成四個區(qū)。由于采用連續(xù)內(nèi)存,便于在多個進程之間共享,在主流通用操作系統(tǒng)上共享內(nèi)存必須是連續(xù)內(nèi)存,通過共享內(nèi)存的方式可以多個進程共享同一個數(shù)據(jù)庫索引。并且避免了所有需要查詢或更新數(shù)據(jù)的進程需要將查詢或更新的數(shù)據(jù)交給數(shù)據(jù)庫查詢進程進行排隊操作的問題。共享索引可以并發(fā)操作,充分利用了計算資源,索引速度快。而且連續(xù)的內(nèi)存方便內(nèi)存管理,在主流操作系統(tǒng)上一次申請內(nèi)存均為連續(xù)內(nèi)存,連續(xù)內(nèi)存不會引起內(nèi)存碎片,方便管理且速度快。最后連續(xù)的內(nèi)存可以方便的持久化到文件,持久化的速度也較快。通過本發(fā)明的結(jié)構(gòu),使得能協(xié)助數(shù)據(jù)庫進行插入、查詢、刪除等操作時更加快速。
[0008]作為一種優(yōu)選方案,所述索引管理區(qū)內(nèi)基本信息包括鍵值類型、鍵值長度、節(jié)點內(nèi)容長度、最大節(jié)點數(shù)目、節(jié)點數(shù)目、哈希區(qū)首地址、沖突區(qū)首地址、剩余計數(shù)區(qū)首地址、剩余計數(shù)區(qū)棧頂,索引控制區(qū)對基本信息進行初始化,確定基本信息的值。構(gòu)建索引控制區(qū)的初始化,首先確定鍵值類型、鍵值長度、節(jié)點內(nèi)容長度、最大節(jié)點數(shù)目的值,在確定了鍵值長度,節(jié)點長度為鍵值長度加上節(jié)點內(nèi)容長度再加上8,哈希區(qū)長度為節(jié)點長度乘以最大節(jié)點數(shù)目,沖突區(qū)與哈希區(qū)長度線共同個,剩余計數(shù)區(qū)的長度為最大節(jié)點數(shù)目乘以8。然后根據(jù)調(diào)用者給出的連續(xù)內(nèi)存的首地址可對索引管理區(qū)進行初始化。
[0009]一種基于連續(xù)內(nèi)存的數(shù)據(jù)庫索引處理方法,包括有插入步驟、查詢步驟和刪除步驟,
插入步驟:對插入的節(jié)點信息鍵值進行哈希,與哈希區(qū)的節(jié)點進行哈希值和鍵值的比較,將未沖突的節(jié)點信息放入哈希區(qū),將沖突的節(jié)點信息按照拉鏈法處理放入沖突區(qū),并更新剩余計數(shù)區(qū);沖突是指插入節(jié)點與哈希區(qū)節(jié)點的鍵值不同但哈希值相同。
[0010]查詢步驟:對查詢的節(jié)點信息鍵值進行哈希,根據(jù)哈希值和鍵值從哈希區(qū)到?jīng)_突區(qū)查詢是否存在該節(jié)點信息;
刪除步驟:對刪除的節(jié)點信息鍵值進行哈希,根據(jù)哈希值和鍵值找到該節(jié)點信息,刪除該節(jié)點信息,并根據(jù)該節(jié)點信息存放位置對應(yīng)更新沖突區(qū)節(jié)點信息。
[0011]本發(fā)明基于連續(xù)內(nèi)存的數(shù)據(jù)庫索引處理方法,使得插入、查詢和刪除相比傳統(tǒng)基于離散內(nèi)存索引更加快速。
[0012]作為一種優(yōu)選方案,所述插入步驟具體為:
步驟11:對插入的節(jié)點信息鍵值進行哈希,得到哈希值;
步驟12:哈希區(qū)內(nèi)是否存在該哈希值的節(jié)點,若否則將插入的節(jié)點信息放入到哈希區(qū)內(nèi),插入成功,若是則進入下步驟;
步驟13:插入的節(jié)點鍵值與哈希區(qū)節(jié)點鍵值是否相同,若是則插入失敗,若否進入下步驟;
步驟14:沖突區(qū)中是否存在該鍵值的節(jié)點,若是則插入失敗,若否則進入下步驟;
步驟15:在剩余計數(shù)區(qū)查找沖突區(qū)的下一個空閑位置,并通過拉鏈法將插入節(jié)點信息放入沖突區(qū),更新剩余計數(shù)區(qū),插入成功。
[0013]作為一種優(yōu)選方案,所述查詢步驟具體為:
步驟21:對查詢的節(jié)點信息鍵值進行哈希,得到哈希值;
步驟22:根據(jù)哈希值在哈希區(qū)查找是否存在有節(jié)點,若否則表示不存在查詢的節(jié)點,若是則進入下步驟;
步驟23:查詢節(jié)點和哈希區(qū)節(jié)點的鍵值是否相同,若是則存在查詢的節(jié)點,查詢成功,若否則進入下步驟;
步驟24:存在沖突,按照沖突區(qū)鏈表查找沖突節(jié)點;
步驟25:沖突區(qū)鏈表是否存在該鍵值節(jié)點,若否則表示不存在查詢的節(jié)點,若是則表示存在查詢的節(jié)點,查詢成功。
[0014]作為一種優(yōu)選方案,所述刪除步驟具體為:
步驟31:對要刪除節(jié)點信息鍵值進行哈希,得到哈希值;
步驟32:根據(jù)哈希值在哈希區(qū)查找是否存在該節(jié)點,若否則刪除失敗,不存在該節(jié)點,若是則進入下步驟;
步驟33:根據(jù)鍵值判斷是否為該節(jié)點,若是則刪除該節(jié)點,同時將沖突區(qū)鏈表頭節(jié)點移入到哈希區(qū),更新剩余計數(shù)區(qū);若否則進入下步驟;
步驟34:在沖突區(qū)根據(jù)鍵值順序查找是否存在該節(jié)點,若是則刪除該節(jié)點,更新沖突區(qū)鏈表和剩余計數(shù)區(qū),若否則刪除失敗,不存在該節(jié)點。
[0015]作為一種優(yōu)選方案,所述拉鏈法處理過程為:在每個節(jié)點內(nèi)設(shè)置指向下一個節(jié)點的字段,哈希區(qū)內(nèi)節(jié)點的字段指向一個與其沖突的沖突區(qū)節(jié)點,若沖突區(qū)內(nèi)存在有多個哈希值相同的沖突節(jié)點,則以哈希區(qū)節(jié)點指向的沖突區(qū)節(jié)點為首,各節(jié)點字段依次指向下一個節(jié)點,位于最后的沖突區(qū)節(jié)點字段指向為空,形成沖突區(qū)節(jié)點鏈表。指向為串聯(lián)形式,即一個沖突節(jié)點指向第二個沖突節(jié)點,第二個沖突節(jié)點指向第三個沖突節(jié)點,直到最后一個沖突節(jié)點指向為空。
[0016]因此,本發(fā)明的優(yōu)點是:采用連續(xù)內(nèi)存,并將連續(xù)內(nèi)存分成四個區(qū),相比傳統(tǒng)基于離散內(nèi)存的索引操縱速度更快速。
【附圖說明】
[0017]附圖1是本發(fā)明中連續(xù)內(nèi)存的一種分區(qū)結(jié)構(gòu)示意圖;
附圖2是本發(fā)明中插入節(jié)點的一種流程示意圖;
附圖3是本發(fā)明中查詢節(jié)點的一種流程示意圖;
附圖4是本發(fā)明中刪除節(jié)點的一種流程示意圖;
附圖5是本發(fā)明中拉鏈法的一種處理示意圖。
【具體實施方式】
[0018]下面通過實施例,并結(jié)合附圖,對本發(fā)明的技術(shù)方案作進一步具體的說明。
[0019]實施例:
本實施例一種基于連續(xù)內(nèi)存的數(shù)據(jù)庫索引系統(tǒng),包括連續(xù)內(nèi)存,內(nèi)存內(nèi)形成有索引管理區(qū)、哈希區(qū)、沖突區(qū)和剩余計數(shù)區(qū),
索引管理區(qū):用于管理整個索引內(nèi)存,記錄索引的基本信息的內(nèi)存區(qū)域;基本信息包括鍵值類型、鍵值長度、節(jié)點內(nèi)容長度、最大節(jié)點數(shù)目、節(jié)點數(shù)目、哈希區(qū)首地址、沖突區(qū)首地址、剩余計數(shù)區(qū)首地址、剩余計數(shù)區(qū)棧頂,索引控制區(qū)對基本信息進行初始化,確定基本信息的值。
[0020]哈希區(qū):用于保存節(jié)點信息,能對節(jié)點信息進行插入、查詢和刪除;
沖突區(qū):用于保存與哈希區(qū)沖突的節(jié)點信息,能對節(jié)點信息進行插入、查詢和刪除; 剩余計數(shù)區(qū):用來保存沖突區(qū)內(nèi)沒有被使用的節(jié)點統(tǒng)計信息。
[0021]該基于連續(xù)內(nèi)存的數(shù)據(jù)庫索引處理方法包括有插入步驟、查詢步驟和刪除步驟,其中插入步驟:對插入的節(jié)點信息鍵值進行哈希,與哈希區(qū)的節(jié)點進行哈希值和鍵值的比較,將未沖突的節(jié)點信息放入哈希區(qū),將沖突的節(jié)點信息按照拉鏈法處理放入沖突區(qū),并更新剩余計數(shù)區(qū)