專利名稱:一種利用位圖對內(nèi)存數(shù)據(jù)庫空間進行管理的方法
技術(shù)領(lǐng)域:
本發(fā)明涉及內(nèi)存數(shù)據(jù)庫系統(tǒng)的管理方法,尤其涉及 一 種利用位圖對內(nèi) 存數(shù)據(jù)庫空間進行高效管理的方法。
背景技術(shù):
傳統(tǒng)的數(shù)據(jù)庫管理系統(tǒng)把所有數(shù)據(jù)都放在磁盤上進行管理,所以稱做 磁盤數(shù)據(jù)庫。磁盤數(shù)據(jù)庫需要頻繁地訪問磁盤來進行數(shù)據(jù)的操作,由于對 磁盤讀寫數(shù)據(jù)的操作一方面要進行磁頭的機械移動,另 一方面受到系統(tǒng)調(diào) 用時間的影響,當數(shù)據(jù)量很大,操作頻繁且復雜時,就會暴露出很多問題。
近年來,內(nèi)存容量不斷提高,價格不斷下跌,計算機進入了64位時代 后,操作系統(tǒng)已經(jīng)可以支持更大的地址空間,同時業(yè)界對數(shù)據(jù)庫系統(tǒng)實時 響應(yīng)能力要求日益提高,充分利用內(nèi)存技術(shù)提升數(shù)據(jù)庫性能成為數(shù)據(jù)庫領(lǐng) 域一個重要的發(fā)展方向。
在數(shù)據(jù)庫技術(shù)中,目前主要有兩種方法來使用大量的內(nèi)存。 一種是在 傳統(tǒng)的數(shù)據(jù)庫中,增大緩沖池,將一個事務(wù)所涉及的數(shù)據(jù)都放在緩沖池中, 組織成相應(yīng)的數(shù)據(jù)結(jié)構(gòu)來進行查詢和更新處理,也就是常說的共享內(nèi)存技 術(shù),這種方法優(yōu)化的主要目標是最小化磁盤訪問。另一種就是內(nèi)存數(shù)據(jù)庫 技術(shù),就是重新設(shè)計一種新的數(shù)據(jù)庫管理系統(tǒng),對查詢處理、并發(fā)控制與 恢復的算法和數(shù)據(jù)結(jié)構(gòu)進行重新設(shè)計,以更有效地使用CPU和內(nèi)存,這種 技術(shù)把整個數(shù)據(jù)庫放進內(nèi)存中,因而會產(chǎn)生一些根本性的變化。
內(nèi)存數(shù)據(jù)庫系統(tǒng)帶來的優(yōu)越性能不僅僅在于對內(nèi)存讀寫比對磁盤讀寫 快上,更重要的是,從根本上拋棄了磁盤數(shù)據(jù)管理的許多傳統(tǒng)方式,基于全部數(shù)據(jù)都在內(nèi)存中管理進行了新的體系結(jié)構(gòu)的設(shè)計,并且在數(shù)據(jù)緩存、 索引算法、并行操作方面也進行了相應(yīng)的改進,從而使數(shù)據(jù)處理速度比傳 統(tǒng)數(shù)據(jù)庫的數(shù)據(jù)處理速度快若干數(shù)量級。
通過以上介紹可以了解到,內(nèi)存數(shù)據(jù)庫完全工作于內(nèi)存中,如何充分 而高效地管理龐大的內(nèi)存空間就成為內(nèi)存數(shù)據(jù)庫設(shè)計中 一個極其重要的問 題。
在一個性能良好的數(shù)據(jù)庫系統(tǒng)中,內(nèi)存一定是分頁(即page;有些系 統(tǒng)稱之為塊,block)使用的,頁的大小可以是4k,8k,16k,32k......等等。使
用分頁管理的好處是可以取得一個比較適中的度量單位,在兼顧靈活性和 易管理性的前提下同時滿足極少量或者海量的內(nèi)存需求,既不浪費空間又 不增加管理上的負擔。
傳統(tǒng)的頁管理模式是完全基于鏈表的,按照頁的當前狀態(tài)(空閑、已 占用等)劃分成若干鏈表。類似地,在頁內(nèi)按照記錄的不同狀態(tài)也劃分成 若干鏈表。頁和記錄的分配與回收都依靠鏈表操作。
這種完全依賴于鏈表的管理方式有^^艮大的缺陷
1、 鏈表本身的性質(zhì)決定了對鏈表的讀寫操作都需要加鎖,多個線程不 能同時讀寫鏈表,這將導致線程等待。在多任務(wù)數(shù)據(jù)庫系統(tǒng)中,鏈表鎖的 爭用將成為系統(tǒng)的重要瓶頸。并且管理的空間越大,鏈表就越長,爭用越 嚴重,整體空間管理效率就越低。
2、 大量的鏈表結(jié)構(gòu)耗費了很大內(nèi)存空間,降低了內(nèi)存空間的利用率, 并且空間越大,浪費越多。
3、 對大量鏈表進行管理的邏輯非常復雜,大大降低了整個系統(tǒng)的可靠 性與可維護性。
因而,現(xiàn)有技術(shù)還有待于改進和提高。
發(fā)明內(nèi)容
7本發(fā)明的目的在于解決以上全鏈表式管理中存在的問題,提出一種新 的對內(nèi)存數(shù)據(jù)庫空間進行管理的方法,實現(xiàn)控制數(shù)據(jù)頁和記錄的分配和回 收。
本發(fā)明的技術(shù)方案包括
一種利用位圖對內(nèi)存數(shù)據(jù)庫空間進行管理的方法,其中,包括在系統(tǒng) 內(nèi)存區(qū)內(nèi)的以下操作步驟
A、 建立一級位圖區(qū);
B、 建立一級位圖區(qū)輔助鏈表;
C、 建立二級位圖區(qū);
D、 分配數(shù)據(jù)頁;
E、 分配記錄;
F、 釋放記錄;
G、 釋放數(shù)據(jù)頁。
所述的方法,其中,所述的步驟A包括
按照系統(tǒng)需要管理的總內(nèi)存區(qū)大小開辟所述一級位圖區(qū)并全部初始化 為未分配狀態(tài)。
所述的方法,其中,所述步驟A還包括以下步驟
Al、在數(shù)據(jù)庫系統(tǒng)配置中設(shè)定將使用m MB的內(nèi)存,其中,m為正整 數(shù);并由主機支持分配此容量的內(nèi)存;同時設(shè)定每頁的大小為pKB,其中, p為正整數(shù);
A2、數(shù)據(jù)庫系統(tǒng)啟動后通過開辟共享內(nèi)存分配出m MB內(nèi)存;假設(shè)該 內(nèi)存段首地址為g,其中,g為自然數(shù);
A3、計算所需要的一級位圖區(qū)大小為bl=(m*1024)/(p*8)字節(jié);
A4、在總內(nèi)存段的開頭保留bl字節(jié)的空間,作為一級位圖區(qū),對位圖 區(qū)初始化為全0。
所述的方法,其中,'所述的步驟B包括
8建立所述一級位圖輔助鏈表并初始化,將所述一級位圖區(qū)中所有空閑
bit域都記錄進來。
所述的方法,其中,所述的步驟C包括
Cl、根據(jù)數(shù)據(jù)頁偏移地址對該頁進行初始化,記錄頁頭控制信息,并 按照該頁需要存放的記錄的長度等信息估算所需要的二級位圖區(qū)長度;
C2、初始化該頁的二級位圖區(qū),將所有bit域標記為未使用。
所述的方法,其中,所述的步驟D包括以下步驟
Dl、訪問所述一級位圖輔助鏈表的首節(jié)點,從中獲取第一個空閑的bit 域,并標記為已分配;
D2、檢測步驟D1中找到的bit域所在的輔助鏈表的節(jié)點,如果該節(jié)點 對應(yīng)的所有bit域都為已分配狀態(tài),則將該節(jié)點移出鏈表;
D3、根據(jù)步驟D1中找到的空閑bit域的位置,計算出相應(yīng)數(shù)據(jù)頁在整 個數(shù)據(jù)區(qū)中的位置偏移地址。
所述的方法,其中,所述的步驟D1包括以下步驟
Dll、上層業(yè)務(wù)發(fā)來請求,申請數(shù)據(jù)頁,并指明該頁中每條記錄長度< r字節(jié);其中,r為正整數(shù);
D12:定位到輔助鏈表首節(jié)點,若發(fā)現(xiàn)鏈表為空,則向調(diào)用者返回無空 閑數(shù)據(jù)頁錯誤,否則轉(zhuǎn)下一步驟;
D13:搜索首節(jié)點的第一個空閑bit,搜索到則設(shè)該bit為1,表示已占 用;假設(shè)該bit是g開始的第n個bit, n為從1開始的計數(shù)自然數(shù);檢查此 節(jié)點對應(yīng)的一級位圖區(qū)是否已經(jīng)為全1,是則從鏈表摘除此節(jié)點。
所述的方法,其中,所述的步驟D3包括以下步驟
D31:在數(shù)據(jù)區(qū)中定位到第n個bit對應(yīng)的數(shù)據(jù)頁首地址h, h=g+bl字 節(jié)偏移+ (n-l) * 字節(jié)偏移;
D32:對h偏移處的頁進行頁頭初始化,記錄必要管理信息;并計算二 級位圖區(qū)長度b2;々i設(shè)頁頭的長度為q字節(jié),則b2= (p*1024-q ) /(>*8)字節(jié);其中,q為正整數(shù);
D33:定位到h+q字節(jié)偏移處,對此后b2字節(jié)的區(qū)域初始化為全0;D34:向調(diào)用者返回成功結(jié)果和頁偏移n。所述的方法,其中,所述步驟E包括
El、定位到需要分配記錄的數(shù)據(jù)頁內(nèi)二級位圖區(qū),使用一定的算法搜索到該位圖區(qū)第一個空閑的bit域,將該bit域狀態(tài)修改為已分配;
E2、通過一定的算法定位到步驟E1分配的bit域所對應(yīng)的記錄地址,對該記錄進行初始化。
所述的方法,其中,所述步驟E1包括
Ell、上層業(yè)務(wù)發(fā)來請求,要求在第n個數(shù)據(jù)頁中申請一條記錄空間;
E12、按照D31和D32步驟的算法定位到該數(shù)據(jù)頁的二級位圖區(qū)首地址;尋找此區(qū)域第一個可用的bit,若找到即設(shè)定為1,表示已分配,并返回成功;若沒找到轉(zhuǎn)到下一步驟;
E13、向調(diào)用者返回本頁無剩余空間的^l晉誤信息。
所述的方法,其中,所述步驟F包括
定位到該記錄所在的數(shù)據(jù)頁內(nèi)二級位圖區(qū),搜索到該記錄對應(yīng)的bit域,將該bit域狀態(tài)修改為空閑。
所述的方法,其中,所述步驟F還包括如下步驟
Fl、上層業(yè)務(wù)發(fā)來請求,要求釋放第m個數(shù)據(jù)頁中的第n條記錄空間;其中,m為自然數(shù);
F2、定位到該數(shù)據(jù)頁的二級位圖區(qū)首地址,定位到第n個bit,并設(shè)定為O,表示已回收,并返回成功;若沒找到轉(zhuǎn)到下一步驟;
F3、向調(diào)用者返回頁號或者記錄號非法的錯誤信息。
所述的方法,其中,所述步驟G包括
Gl、根據(jù)待釋放頁的偏移地址,通過一定算法定位到該頁在一級位圖區(qū)中的對應(yīng)bit域,將該域-沒置為空閑;G2、檢查bit域所在的一級位圖輔助鏈表節(jié)點,如果該節(jié)點不在鏈表中,則加入鏈表。
所述的方法,其中,所述步驟G1包括以下步驟
Gll、上層業(yè)務(wù)發(fā)來請求,要求釋放第m個數(shù)據(jù)頁;其中,m為自然數(shù);
G12、從一級位圖首地址g開始計算其中,g為自然數(shù),定位到第m個bit處,若未找到,則向調(diào)用者返回頁號非法的錯誤信息;否則將此bit設(shè)定為0,表示已回收。
本發(fā)明所提供的 一種利用位圖對內(nèi)存數(shù)據(jù)庫空間進行管理的方法,由于利用二級位圖結(jié)構(gòu),同時結(jié)合一個輔助鏈表來控制數(shù)據(jù)頁和記錄的分配和回收的管理方法,克服了全鏈表結(jié)構(gòu)管理的結(jié)構(gòu)復雜,鏈表鎖瓶頸、內(nèi)存空間利用率低等問題;提高了多任務(wù)性能,運行速度快,內(nèi)存空間利用率高,管理內(nèi)存量大,采用位運算效率高,性能恒定,并使數(shù)據(jù)庫具備良好的擴展性。
圖1為本發(fā)明一級位圖及其輔助鏈表結(jié)構(gòu)示意圖2為本發(fā)明二級位圖結(jié)構(gòu)示意圖3為本發(fā)明初始化和數(shù)據(jù)頁分配流程示意圖4為本發(fā)明記錄區(qū)分配流程示意圖5為本發(fā)明記錄區(qū)回收流程示意圖6為本發(fā)明數(shù)據(jù)頁回收流程示意圖。
具體實施例方式
以下結(jié)合附圖介紹本發(fā)明的若千實施例。
本發(fā)明提出的 一種利用二級位圖結(jié)構(gòu)對內(nèi)存數(shù)據(jù)庫空間進行管理的方法,利用二級位圖結(jié)構(gòu),結(jié)合一個輔助鏈表來實現(xiàn)控制數(shù)據(jù)頁和記錄的分
ii配和回收。
首先,劃定一塊特定的位圖區(qū)域來控制所有數(shù)據(jù)頁的使用,該位圖區(qū)為每個數(shù)據(jù)頁保留若干bit,用于記錄此頁的狀態(tài)。數(shù)據(jù)頁的分配和回收只需
要修改相應(yīng)bit位的值即可。這樣的位圖區(qū)稱之為"一級位圖",詳見圖1。
然后,在每一個數(shù)據(jù)頁中劃定一塊特定的位圖區(qū)域來控制該頁所有記錄的使用,該位圖區(qū)為每條記錄保留若干bit,用于保存該記錄的狀態(tài)。 一條記錄的分配和回收只需要修改相應(yīng)bit位的值即可。這樣的位圖區(qū)稱之為"二
級位圖",詳見圖2。
為一級位圖區(qū)建立一個輔助鏈表,鏈表的每一個節(jié)點對應(yīng)于一級位圖區(qū)的若干bit,如果這若干.bit都已經(jīng)被占用,則將相應(yīng)節(jié)點移出鏈表,否則就加入鏈表。當需要在一級位圖區(qū)中分配空閑bit時,只要訪問該鏈表的第一個節(jié)點即可。體現(xiàn)了 "空間換時間"的概念,詳見圖1。
本方法具體步驟如下
1、 系統(tǒng)初始化
(a) 按照系統(tǒng)需要管理的總內(nèi)存區(qū)大小開辟一級位圖區(qū)并全部初始化為"未分配"狀態(tài);
(b) 建立一級位圖輔助鏈表并初始化,將一級位圖區(qū)中所有空閑bit域都記錄進來。
2、 分配數(shù)據(jù)頁
(c) 訪問一級位圖輔助鏈表的首節(jié)點,通過一定的算法從中獲取第一個空閑的bit域,并標記為"已分配"。
(d) 檢測(c)中找到的bit域所在的輔助鏈表的節(jié)點,如果該節(jié)點對應(yīng)的所有bit域都為"已分配"狀態(tài),則將該節(jié)點移出鏈表。
(e) 根據(jù)(c)中找到的空閑bit域的位置,通過一定的算法計算出相應(yīng)數(shù)據(jù)頁在整個數(shù)據(jù)區(qū)中的位置偏移地址。
(f) 根據(jù)(e)中得到的數(shù)據(jù)頁偏移地址對該頁進行初始化,記錄頁頭
12控制信息,并按照該頁需要存放的記錄的長度等信息估算所需要的二級位圖區(qū)長度。
(g) 初始化該頁的二級位圖區(qū),將所有bit域標記為"未使用,,
3、 分配記錄
(h) 定位到需要分配記錄的數(shù)據(jù)頁內(nèi)二級位圖區(qū),使用一定的算法搜索到該位圖區(qū)第一個空閑的bit域,將該bit域狀態(tài)修改為"已分配"
(i) 通過一定的算法定位到(h)步驟分配的bit域所對應(yīng)的記錄地址,對該記錄進4于初始^:。
4、 釋》t記錄
(j)定位到該記錄所在的數(shù)據(jù)頁內(nèi)二級位圖區(qū),使用一定的算法搜索到該記錄對應(yīng)的bit域,將該bit域狀態(tài)修改為"空閑"
5、 釋放數(shù)據(jù)頁
(k)根據(jù)待釋^:頁的偏移地址,通過一定算法定位到該頁在一級位圖區(qū)中的對應(yīng)bit域,將該域設(shè)置為"空閑"
(1 )檢查bit域所在的一級位圖輔助鏈表節(jié)點,如果該節(jié)點不在鏈表中,則加入^i^。
請注意以上(a)到(1)步驟并非一定是連續(xù)地順序地執(zhí)行,而應(yīng)當按照實際情況的需要執(zhí)行。
這樣,通過對以上兩種位圖區(qū)以及一個鏈表的組合操作,就實現(xiàn)了對所有數(shù)據(jù)頁以及頁內(nèi)記錄區(qū)的高速分配和回收。
實施例l,如圖3所示,在一個典型的應(yīng)用場景中,初始化并分配一個數(shù)據(jù)頁的完整過程包括以下步驟
步驟A1:數(shù)據(jù)庫系統(tǒng)配置中設(shè)定了將使用mMB的內(nèi)存,其中,m為正整數(shù);并且主機支持分配此容量的內(nèi)存。同時設(shè)定每頁的大小為pKB;其中,p為正整數(shù)。
步驟B1:數(shù)據(jù)庫系統(tǒng)啟動后通過開辟共享內(nèi)存或者類似方式分配出mMB內(nèi)存。假設(shè)該內(nèi)存段首地址為g,其中,g為自然數(shù)。
步驟C1: 計算所需要的一級位圖區(qū)大小bl = (m*1024)/(p*8),單位 字節(jié)。
步驟D1:在總內(nèi)存段的開頭保留M字節(jié)的空間,作為一級位圖區(qū),對 位圖區(qū)初始化為全0。
步驟E1:為一級位圖輔助鏈表分配空間,鏈表含有M個節(jié)點,頭尾 相連初始化。
步驟Fl:上層業(yè)務(wù)發(fā)來請求,申請數(shù)據(jù)頁,并指明該頁中每條記錄長 度《r字節(jié)。其中,r為正整數(shù)。
步驟G1:定位到輔助鏈表.首節(jié)點,若發(fā)現(xiàn)鏈表為空,則向調(diào)用者返回 "無空閑數(shù)據(jù)頁"錯誤,否則轉(zhuǎn)H1步驟。
步驟H1:搜索首節(jié)點的第一個空閑bit,搜索到則設(shè)該bit為1,表示 已占用。假設(shè)該bit是g開始的第n個bit, n是從1開始的計數(shù)自然數(shù)。檢 查此節(jié)點對應(yīng)的一級位圖區(qū)是否已經(jīng)為全1,是則從鏈表摘除此節(jié)點。
步驟II:在數(shù)據(jù)區(qū)中定位到第n個bit對應(yīng)的數(shù)據(jù)頁首地址h, h=g+bl 字節(jié)偏移+ (n-l) fp字節(jié)偏移。
步驟J1:對h偏移處的頁進行頁頭初始化,記錄必要管理信息。并計 算二級位圖區(qū)長度b2,單位.byte。假設(shè)頁頭的長度為q字節(jié),則b2= (p*1024-q) /(r*8),其中,q為正整數(shù)。
步驟Kl:定位到h+q字節(jié)偏移處,對此后b2字節(jié)的區(qū)域初始化為全0。
步驟L1:向調(diào)用者返回成功結(jié)果和頁偏移n。
實施例2,如圖4所示,在一個典型的應(yīng)用場景中,申請一條記錄空間 的完整過程包括以下步驟
步驟A2:上層業(yè)務(wù)發(fā)來請求,要求在第n個數(shù)據(jù)頁中申請一條記錄空間。
步驟B2:按照II和Jl步驟的算法定位到該數(shù)據(jù)頁的二級位圖區(qū)首地址,按照一定算法尋找此區(qū)域第一個可用的bit,若找到即設(shè)定為1,表示 已分配,并返回成功;若沒找到轉(zhuǎn)到C2步驟。
步驟C2:向調(diào)用者返回"本頁無剩余空間"的錯誤信息
實施例3,如圖5所示,在一個典型的應(yīng)用場景中,釋放一條記錄空間 的完整過程包括以下步驟
步驟A3:上層業(yè)務(wù)發(fā)來請求,要求釋放第m個數(shù)據(jù)頁中的第n條記錄 空間。其中,m、 n為自然數(shù)。
步驟B3:按照II和Jl步驟的算法定位到該數(shù)據(jù)頁的二級位圖區(qū)首地 址,定位到第n個bit,并設(shè)定為0,表示已回收,并返回成功;若沒找到 轉(zhuǎn)到C3步驟。
步驟C3:向調(diào)用者返回"頁號或者記錄號非法"的確t誤信息。 實施例4,如圖6所示,在一個典型的應(yīng)用場景中,釋放一個數(shù)據(jù)頁的
完整過程包括以下步驟
步驟A4:上層業(yè)務(wù)發(fā)來請求,要求釋放第m個數(shù)據(jù)頁。其中,m為自然數(shù)。
步驟B4:從一級位圖首地址g開始計算,其中,g為自然數(shù),定位到 第m個bit處,若未找到,則向調(diào)用者返回"頁號非法"的錯誤信息;否則 將此biti殳定為O,表示已回收。
步驟C4:檢查第m個bit所在的一級位圖輔助鏈表節(jié)點,如果該節(jié)點 不在鏈表中,則加入鏈表。
以上附圖及實施例詳細介紹了本發(fā)明利用二級位圖結(jié)構(gòu)對內(nèi)存數(shù)據(jù)庫 空間進行管理的方法,說明了利用二級位圖結(jié)構(gòu),結(jié)合一個輔助鏈表來控 制數(shù)據(jù)頁和記錄的分配和回收的過程和步驟。
本發(fā)明利用二級位圖結(jié)構(gòu),同時結(jié)合一個輔助鏈表來控制數(shù)據(jù)頁和記錄 的分配和回收的管理方法,其重要特點在于
1、位圖區(qū)是一塊物理存在的區(qū)域,該區(qū)城各部分之間沒有關(guān)聯(lián),多個
15byte可以同時被修改,因此該機制能夠很好地支持多線程并發(fā)操作,任一 時刻均可以有多個凝:據(jù)頁和記錄區(qū)被并發(fā)地分配和釋放,這樣就徹底避免 了全鏈表架構(gòu)中同時只能有一個線程操作的問題,極大地提高了多任務(wù)性 能,這一點對于以超高性能為主要目標的內(nèi)存型數(shù)據(jù)庫來說是至關(guān)重要的。
2、 位圖機制可以用若干bit控制一個頁或者一條記錄,因此管理部分 所耗費的內(nèi)存空間極小,幾乎可以忽略不計。在一個典型的應(yīng)用場景中, 管理20GB總內(nèi)存4又需耗費12.66MB空間,即真正用于存儲數(shù)據(jù)的空間占 總空間的99.938%以上,內(nèi)存空間利用率極高。
3、 本方法可以管理的內(nèi)存空間僅僅受制于主機的內(nèi)存大小,主機支持 多大的內(nèi)存,本方法就可以管理多大內(nèi)存,而且用于控制部分的內(nèi)存占總 內(nèi)存的比例隨著總內(nèi)存的增大而降低。
4、 位運算對于任何架構(gòu)的cpu來說都是極高效的運算,而位圖管理方 式主要依靠位運算,只有極少量的鏈表操作,因此位圖管理方式的效率是 遠遠超過全鏈表方式的。
5、 本方法使用了兩級位圖,將數(shù)據(jù)頁和頁中記錄同時納入位圖管理, 在頁面層和記錄層同時避免了性能瓶頸。
6、 本方法的性能是恒定的,不管管理的空間有多大,分配和回收一個 頁或者記錄的運算次數(shù)是固定的。這意味著數(shù)據(jù)庫將具備良好的擴展性。
以上所述僅為本發(fā)明的較佳實施例而已,并不用以限制本發(fā)明,凡在本 發(fā)明的精神和原則之內(nèi),所作的任何修改,等同替換,改進等,均應(yīng)包含 在本發(fā)明的保護范圍之內(nèi)。本發(fā)明的專利保護范圍應(yīng)以所附權(quán)利要求為準。
權(quán)利要求
1、一種利用位圖對內(nèi)存數(shù)據(jù)庫空間進行管理的方法,其特征在于,包括在系統(tǒng)內(nèi)存區(qū)內(nèi)的以下操作步驟A、建立一級位圖區(qū);B、建立一級位圖區(qū)輔助鏈表;C、建立二級位圖區(qū);D、分配數(shù)據(jù)頁;E、分配記錄;F、釋放記錄;G、釋放數(shù)據(jù)頁。
2、 如權(quán)利要求l所述的方法,其特征在于,所述的步驟A包括按照系統(tǒng)需要管理的總內(nèi)存區(qū)大小開辟所述一級位圖區(qū)并全部初始化為未分配狀態(tài)。
3、 如權(quán)利要求2所述的方法,其特征在于,所述步驟A還包括以下步驟Al、在數(shù)據(jù)庫系統(tǒng)配置中設(shè)定將使用m MB的內(nèi)存,其中,m為正整數(shù);并由主機支持分配此容量的內(nèi)存;同時設(shè)定每頁的大小為pKB,其中,p為正整數(shù);A2、數(shù)據(jù)庫系統(tǒng)啟動后通過開辟共享內(nèi)存分配出m MB內(nèi)存;,I設(shè)該內(nèi)存段首地址為g,其中,g為自然數(shù);A3、計算所需要的一級位圖區(qū)大小為bl =(m*1024)/(p*8)字節(jié);A4、在總內(nèi)存段的開頭保留bl字節(jié)的空間,作為一級位圖區(qū),對位圖區(qū)初始化為全0。
4.如權(quán)利要求1的方法,其特征在于,所述的步驟B包括建立所述一級位圖輔助鏈表并初始化,將所述一級位圖區(qū)中所有空閑bit域都記錄進來。
5、 如權(quán)利要求l所述的方法,其特征在于,所述的步驟C包括Cl、根據(jù)數(shù)據(jù)頁偏移地址對該頁進行初始化,記錄頁頭控制信息,并按照該頁需要存放的記錄的長度等信息估算所需要的二級位圖區(qū)長度;C2、初始化該頁的二級位圖區(qū),將所有bit域標記為未使用。
6、 如權(quán)利要求l所述的方法,其特征在于,所述的步驟D包括以下步驟Dl、訪問所述一級位圖輔助鏈表的首節(jié)點,從中獲取第一個空閑的bit域,并標記為已分配;D2、檢測步驟D1中找到的bit域所在的輔助鏈表的節(jié)點,如果該節(jié)點對應(yīng)的所有bit域都為已分配狀態(tài),則將該節(jié)點移出鏈表;D3、根據(jù)步驟D1中找到的空閑bit域的位置,計算出相應(yīng)數(shù)據(jù)頁在整個數(shù)據(jù)區(qū)中的位置偏移地址。
7、 如權(quán)利要求6所述的方法,其特征在于,所述的步驟D1包括以下步驟Dll、上層業(yè)務(wù)發(fā)來請求,申請數(shù)據(jù)頁,并指明該頁中每條記錄長度《r字節(jié);其中,r為正整數(shù);D12:定位到輔助鏈表首節(jié)點,若發(fā)現(xiàn)鏈表為空,則向調(diào)用者返回無空閑數(shù)據(jù)頁錯誤,否則轉(zhuǎn)下一步驟;D13:搜索首節(jié)點的第一個空閑bit,搜索到則設(shè)該bit為l,表示已占用;假設(shè)該bit是g開始的第n個bit, n為從1開始的計數(shù)自然數(shù);檢查此節(jié)點對應(yīng)的一級位圖區(qū)是否已經(jīng)為全1,是則從鏈表摘除此節(jié)點。
8、 如權(quán)利要求7所述的方法,其特征在于,所述的步驟D3包括以下步驟D31:在數(shù)據(jù)區(qū)中定位到第n個bit對應(yīng)的數(shù)據(jù)頁首地址h, h=g+bl字節(jié)偏移+ (n-l) fp字節(jié)偏移;D32:對h偏移處的頁進行頁頭初始化,記錄必要管理信息;并計算二級位圖區(qū)長度b2;假設(shè)頁頭的長度為q字節(jié),則b2= (p*1024-q) /(產(chǎn)8)字節(jié);其中,q為正整數(shù);D33:定位到h+q字節(jié)偏移處,對此后b2字節(jié)的區(qū)域初始化為全0;D34:向調(diào)用者返回成功結(jié)果和頁偏移n。
9、 如權(quán)利要求l所述的方法,其特征在于,所述步驟E包括El、定位到需要分配記錄的數(shù)據(jù)頁內(nèi)二級位圖區(qū),使用一定的算法搜索到該位圖區(qū)第一個空閑的bit域,將該bit域狀態(tài)修改為已分配;E2、通過一定的算法定位到步驟El分配的bit域所對應(yīng)的記錄地址,對該i己錄進行初始4匕。
10、 如權(quán)利要求9所述的方法,其特征在于,所述步驟E1包括Ell、上層業(yè)務(wù)發(fā)來請求,要求在第n個數(shù)據(jù)頁中申請一條記錄空間;E12、按照D31和D32步驟的算法定位到該數(shù)據(jù)頁的二級位圖區(qū)首地址;尋找此區(qū)域第一個可用的bit,若找到即設(shè)定為1,表示已分配,并返回成功;若沒找到轉(zhuǎn)到下一步驟;E13、向調(diào)用者返回本頁無剩余空間的錯誤信息。
11、 如權(quán)利要求l所述的方法,其特征在于,所述步驟F包括定位到該記錄所在的數(shù)據(jù)頁內(nèi)二級位圖區(qū),搜索到該記錄對應(yīng)的bit域,將該bit域狀態(tài)修改為空閑。
12、 如權(quán)利要求11所述的方法,其特征在于,所述步驟F還包括如下Fl、上層業(yè)務(wù)發(fā)來請求,要求釋放第m個數(shù)據(jù)頁中的第n條記錄空間;其中,m為自然數(shù);F2、定位到該數(shù)據(jù)頁的二級位圖區(qū)首地址,定位到第n個bit,并設(shè)定為0,表示已回收,并返回成功;若沒找到轉(zhuǎn)到下一步驟;F3、向調(diào)用者返回頁號或者記錄號非法的錯誤信息。
13、 如權(quán)利要求l所述的方法,其特征在于,所述步驟G包括Gl、根據(jù)待釋放頁的偏移地址,通過一定算法定位到該頁在一級位圖區(qū)中的對應(yīng)bit域,將該域設(shè)置為空閑;G2、檢查bit域所在的一級位圖輔助鏈表節(jié)點,如果該節(jié)點不在鏈表中,則加入鏈表。
14、 如權(quán)利要求13所述的方法,其特征在于,所述步驟G1包括以下步驟Gll、上層業(yè)務(wù)發(fā)來請求,要求釋放第m個數(shù)據(jù)頁;其中,m為自然數(shù);G12、從一級位圖首地址g開始計算其中,g為自然l丈,定位到第m個bit處,若未找到,則向調(diào)用者返回頁號非法的錯誤信息;否則將此bit設(shè)定為0,表示已回收。
全文摘要
本發(fā)明公開了一種利用位圖對內(nèi)存數(shù)據(jù)庫空間進行高效管理的方法,包括在系統(tǒng)內(nèi)存區(qū)內(nèi)的以下操作步驟建立一級位圖區(qū);建立一級位圖區(qū)輔助鏈表;建立二級位圖區(qū);分配數(shù)據(jù)頁;分配記錄;釋放記錄;釋放數(shù)據(jù)頁。本發(fā)明方法利用二級位圖結(jié)構(gòu),同時結(jié)合一個輔助鏈表來實現(xiàn)控制數(shù)據(jù)頁和記錄的分配和回收管理。本發(fā)明徹底克服了全鏈表架構(gòu)中同時段只能有一個線程操作的問題,提高了多任務(wù)性能,內(nèi)存空間利用率高,管理內(nèi)存量大,采用位運算效率高,在頁面層和記錄層同時避免了性能瓶頸,性能恒定,數(shù)據(jù)庫具備良好的擴展性,適于在本領(lǐng)域廣泛推廣應(yīng)用。
文檔編號G06F12/02GK101676906SQ20081021619
公開日2010年3月24日 申請日期2008年9月18日 優(yōu)先權(quán)日2008年9月18日
發(fā)明者丁奇鵬, 盧勤元, 印和平, 常二鵬 申請人:中興通訊股份有限公司