本發(fā)明涉及嵌入式數(shù)據(jù)庫(kù)領(lǐng)域,具體涉及一種異構(gòu)存儲(chǔ)介質(zhì)下嵌入式數(shù)據(jù)庫(kù)的管理方法。
背景技術(shù):嵌入式數(shù)據(jù)庫(kù)系統(tǒng)在運(yùn)行環(huán)境和運(yùn)行方式上與常見(jiàn)的企業(yè)級(jí)數(shù)據(jù)庫(kù)管理系統(tǒng)有很大差別,主要表現(xiàn)在傳統(tǒng)的企業(yè)級(jí)數(shù)據(jù)庫(kù)如Oracle、DB2過(guò)于龐大,對(duì)cpu主頻和磁盤容量有很高的要求,無(wú)法在硬件資源有限的嵌入式系統(tǒng)上面安裝和使用;除此之外,傳統(tǒng)數(shù)據(jù)庫(kù)缺乏實(shí)時(shí)響應(yīng)的機(jī)制,并且受限于硬盤讀寫速度,無(wú)法滿足高實(shí)時(shí)性的要求。在嵌入式數(shù)據(jù)庫(kù)領(lǐng)域,存儲(chǔ)管理的研究目的是運(yùn)用嵌入式、數(shù)據(jù)庫(kù)等多種技術(shù)實(shí)現(xiàn)數(shù)據(jù)在存儲(chǔ)器上的高效存儲(chǔ)與快速存取。目前,常見(jiàn)的嵌入式數(shù)據(jù)庫(kù)有兩種,內(nèi)存數(shù)據(jù)庫(kù)和外存數(shù)據(jù)庫(kù)。但無(wú)論哪種,都只是基于單一存儲(chǔ)介質(zhì)。內(nèi)存數(shù)據(jù)庫(kù)存在于嵌入式處理器的內(nèi)存中,其優(yōu)勢(shì)是I/O操作少、訪問(wèn)速度快,但存在的問(wèn)題是存儲(chǔ)空間有限,稍微大一些的數(shù)據(jù)量就無(wú)法使用;而外存數(shù)據(jù)庫(kù)的所有數(shù)據(jù)及索引存儲(chǔ)在外存中,其優(yōu)勢(shì)是存儲(chǔ)容量大,但問(wèn)題是外存讀寫速度慢,頻繁的外存訪問(wèn)導(dǎo)致數(shù)據(jù)庫(kù)效能低下。
技術(shù)實(shí)現(xiàn)要素:針對(duì)現(xiàn)有的單一存儲(chǔ)介質(zhì)下嵌入式數(shù)據(jù)庫(kù)存在的問(wèn)題,本發(fā)明提出一種異構(gòu)存儲(chǔ)介質(zhì)下的嵌入式數(shù)據(jù)庫(kù)管理方法,其目的在于綜合兩種存儲(chǔ)介質(zhì)的優(yōu)勢(shì),提高數(shù)據(jù)庫(kù)反應(yīng)速度,擴(kuò)大數(shù)據(jù)庫(kù)存儲(chǔ)容量,充分利用了嵌入式處理器的內(nèi)存,由此解決單一存儲(chǔ)介質(zhì)所帶來(lái)的數(shù)據(jù)庫(kù)性能瓶頸的技術(shù)問(wèn)題。一種異構(gòu)存儲(chǔ)介質(zhì)下嵌入式數(shù)據(jù)庫(kù)的管理方法,具體為:構(gòu)建數(shù)據(jù)庫(kù)的準(zhǔn)備步驟:將數(shù)據(jù)文件分為小數(shù)據(jù)塊和大數(shù)據(jù)塊,并為各數(shù)據(jù)塊分配ID、地址和優(yōu)先級(jí),大數(shù)據(jù)塊的優(yōu)先級(jí)低于小數(shù)據(jù)塊,地址初始賦值為數(shù)據(jù)塊待存入的外存地址;為每個(gè)數(shù)據(jù)塊建立包含數(shù)據(jù)塊ID、地址和優(yōu)先級(jí)信息的索引塊;構(gòu)建包含所有索引塊信息的信息塊;將數(shù)據(jù)庫(kù)存入外存的步驟:將信息塊、索引塊和數(shù)據(jù)塊存入外存;將數(shù)據(jù)庫(kù)加載到嵌入式處理器內(nèi)存的步驟:將信息塊加載到內(nèi)存,依據(jù)信息塊攜帶的索引塊信息將索引塊加載到內(nèi)存,依據(jù)索引塊攜帶的數(shù)據(jù)塊信息將小數(shù)據(jù)塊中優(yōu)先級(jí)高的加載到內(nèi)存,并將被加載小數(shù)據(jù)塊的索引塊內(nèi)的地址更新為所在內(nèi)存地址;訪問(wèn)數(shù)據(jù)庫(kù)的步驟:嵌入式處理器查詢到待訪問(wèn)數(shù)據(jù)的索引塊,若該數(shù)據(jù)塊存在于內(nèi)存,則根據(jù)索引塊攜帶的內(nèi)存地址訪問(wèn)數(shù)據(jù),若該數(shù)據(jù)塊存在于外存,則根據(jù)索引塊攜帶的外存地址訪問(wèn)數(shù)據(jù)。進(jìn)一步地,還包括數(shù)據(jù)塊在內(nèi)存的動(dòng)態(tài)調(diào)度步驟:對(duì)于已經(jīng)完成訪問(wèn)的內(nèi)存數(shù)據(jù)塊,將其優(yōu)先級(jí)降到最低級(jí);對(duì)于訪問(wèn)時(shí)延要求降低的內(nèi)存數(shù)據(jù)文件,將其優(yōu)先級(jí)降低;將上述兩種降低優(yōu)先級(jí)的內(nèi)存數(shù)據(jù)塊釋放到外存,并將其索引塊內(nèi)的地址更新為所在外存地址;根據(jù)內(nèi)存使用情況,綜合考慮將訪問(wèn)時(shí)延要求和優(yōu)先級(jí)相對(duì)較高的外存數(shù)據(jù)塊補(bǔ)充加載到內(nèi)存,并將該數(shù)據(jù)塊的索引塊內(nèi)的地址更新為其所在內(nèi)存地址。進(jìn)一步地,在所述構(gòu)建數(shù)據(jù)庫(kù)的準(zhǔn)備步驟中,還根據(jù)邏輯形式將所述大數(shù)據(jù)塊劃分為一維大數(shù)據(jù)塊和二維大數(shù)據(jù)塊;二維大數(shù)據(jù)塊被劃分為多個(gè)子塊;所述二維大數(shù)據(jù)塊對(duì)應(yīng)的索引塊包括一級(jí)索引塊和二級(jí)索引塊,一級(jí)索引塊包含二級(jí)索引塊待存入的外存地址信息,二級(jí)索引塊包含各子塊待存入的外存地址信息;在所述將數(shù)據(jù)庫(kù)加載到嵌入式處理器內(nèi)存的步驟中,將二維大數(shù)據(jù)塊的一級(jí)索引塊和二級(jí)索引塊加載到內(nèi)存,并將一級(jí)索引塊內(nèi)的地址更新為二級(jí)索引塊在內(nèi)存中的地址;在所述訪問(wèn)數(shù)據(jù)庫(kù)的步驟中,嵌入式處理器查詢到待訪問(wèn)數(shù)據(jù)的一級(jí)索引塊,進(jìn)而找到對(duì)應(yīng)的二級(jí)索引塊,再根據(jù)二級(jí)索引塊攜帶的子塊地址信息訪問(wèn)外存中的子塊。進(jìn)一步地,在所述構(gòu)建數(shù)據(jù)庫(kù)的準(zhǔn)備步驟中,對(duì)于小數(shù)據(jù)塊按照被訪問(wèn)緊急程度和訪問(wèn)頻率綜合考慮越高則優(yōu)先級(jí)別越高的原則分配優(yōu)先級(jí),大數(shù)據(jù)塊的優(yōu)先級(jí)設(shè)置為最低級(jí)。進(jìn)一步地,所述信息塊、索引塊存儲(chǔ)于數(shù)據(jù)庫(kù)的第一個(gè)頁(yè)面,小數(shù)據(jù)量文件以多個(gè)文件合并方式從數(shù)據(jù)庫(kù)第二個(gè)頁(yè)面開(kāi)始的位置起存儲(chǔ),接著存儲(chǔ)二維大數(shù)據(jù)塊的各子塊,最后存儲(chǔ)一維大數(shù)據(jù)塊。本發(fā)明的技術(shù)效果體現(xiàn)在:本發(fā)明組合使用內(nèi)存和外存兩種存儲(chǔ)介質(zhì),將大數(shù)據(jù)文件存儲(chǔ)在外部大容量存儲(chǔ)器,小數(shù)據(jù)文件根據(jù)嵌入式處理器內(nèi)存使用情況及文件的優(yōu)先級(jí)決定其存儲(chǔ)在內(nèi)存還是外部大容量存儲(chǔ)器,綜合兩種存儲(chǔ)介質(zhì)的優(yōu)勢(shì),提高數(shù)據(jù)庫(kù)反應(yīng)速度,擴(kuò)大數(shù)據(jù)庫(kù)存儲(chǔ)容量。采用優(yōu)先級(jí)機(jī)制,使用戶能以最快的速度訪問(wèn)到最需要訪問(wèn)的數(shù)據(jù),滿足了用戶的數(shù)據(jù)使用需求。進(jìn)一步地,對(duì)內(nèi)存進(jìn)行動(dòng)態(tài)調(diào)度,將訪問(wèn)幾率低和時(shí)延要求降低的數(shù)據(jù)塊釋放于外存,而訪問(wèn)時(shí)延要求和訪問(wèn)幾率高的數(shù)據(jù)塊補(bǔ)充加載到內(nèi)存中,提高數(shù)據(jù)訪問(wèn)效率,彌補(bǔ)嵌入式處理器內(nèi)存容量小的客觀短板。進(jìn)一步地,在數(shù)據(jù)庫(kù)加載和動(dòng)態(tài)調(diào)度的過(guò)程中使用了自適應(yīng)內(nèi)存分配技術(shù),有效地利用了寶貴的內(nèi)存資源,提高了數(shù)據(jù)庫(kù)反應(yīng)速度。進(jìn)一步地,對(duì)數(shù)據(jù)塊的尋址采用差別化的策略,小數(shù)據(jù)文件和一維大數(shù)據(jù)文件一級(jí)索引尋址,二維大數(shù)據(jù)文件二級(jí)索引尋址,拓展了數(shù)據(jù)庫(kù)的存儲(chǔ)容量。進(jìn)一步地,數(shù)據(jù)在外存采取不同的存儲(chǔ)方法,二維大數(shù)據(jù)文件切割后分塊存儲(chǔ),提高了二維大數(shù)據(jù)文件的訪問(wèn)速度;小數(shù)據(jù)文件可以連續(xù)存儲(chǔ),可以充分利用存儲(chǔ)資源。總體而言,通過(guò)本發(fā)明所構(gòu)思的以上技術(shù)方案與現(xiàn)有技術(shù)相比,由于異構(gòu)存儲(chǔ)、優(yōu)先級(jí)機(jī)制、動(dòng)態(tài)調(diào)度、自適應(yīng)內(nèi)存分配技術(shù)的使用,能夠取得反應(yīng)速度通常在1us以內(nèi),存儲(chǔ)容量達(dá)到GB級(jí)別、內(nèi)存利用率高的有益效果。附圖說(shuō)明圖1為存儲(chǔ)結(jié)構(gòu)及尋址方式;圖2為數(shù)據(jù)庫(kù)構(gòu)建流程;圖3為索引編號(hào)示例;圖4為動(dòng)態(tài)調(diào)度中內(nèi)存數(shù)據(jù)文件搬移到外存示意圖;圖5為動(dòng)態(tài)調(diào)度中外存數(shù)據(jù)文件搬移到內(nèi)存示意圖。具體實(shí)施方式為了使本發(fā)明的目的、技術(shù)方案及優(yōu)點(diǎn)更加清楚明白,以下結(jié)合附圖及實(shí)施例,對(duì)本發(fā)明進(jìn)行進(jìn)一步詳細(xì)說(shuō)明。應(yīng)當(dāng)理解,此處所描述的具體實(shí)施例僅僅用以解釋本發(fā)明,并不用于限定本發(fā)明。此外,下面所描述的本發(fā)明各個(gè)實(shí)施方式中所涉及到的技術(shù)特征只要彼此之間未構(gòu)成沖突就可以相互組合。參見(jiàn)圖1,本發(fā)明提出嵌入式數(shù)據(jù)庫(kù)異構(gòu)存儲(chǔ)介質(zhì)存儲(chǔ),數(shù)據(jù)庫(kù)的內(nèi)存選擇性存儲(chǔ)于嵌入式處理器內(nèi)存和外部存儲(chǔ)器,基本原則是將大數(shù)據(jù)文件存儲(chǔ)在外部大容量存儲(chǔ)器,小數(shù)據(jù)文件根據(jù)嵌入式處理器內(nèi)存使用情況及文件的優(yōu)先級(jí)決定其存儲(chǔ)在內(nèi)存還是外部大容量存儲(chǔ)器。本發(fā)明數(shù)據(jù)庫(kù)包含信息塊、索引塊、數(shù)據(jù)塊三級(jí)結(jié)構(gòu)。數(shù)據(jù)庫(kù)適用于常見(jiàn)的嵌入式處理器+FLASH存儲(chǔ)芯片環(huán)境。首先,對(duì)本發(fā)明涉及的術(shù)語(yǔ)即信息塊、索引塊、數(shù)據(jù)塊的定義如下:信息塊,描述數(shù)據(jù)庫(kù)的基本信息,起到標(biāo)識(shí)數(shù)據(jù)庫(kù)、指導(dǎo)應(yīng)用程序分配內(nèi)存空間、輔助尋址的作用,其屬性如表1所示。序號(hào)符號(hào)數(shù)據(jù)類型屬性1DbId無(wú)符號(hào)16位整型數(shù)據(jù)庫(kù)的標(biāo)記2IdxSize無(wú)符號(hào)16位整型單個(gè)索引塊的大小,以字節(jié)為單位3IdxNum無(wú)符號(hào)16位整型索引塊個(gè)數(shù)4IdxAddr無(wú)符號(hào)32位整型索引塊的起始地址5IntSize無(wú)符號(hào)32位整型適合內(nèi)存的數(shù)據(jù)塊大小6ExtSize無(wú)符號(hào)32位整型適合外存的數(shù)據(jù)塊大小表1信息塊屬性表索引塊,描述數(shù)據(jù)塊的優(yōu)先級(jí)、地址信息,起到?jīng)Q定調(diào)度策略及尋址的作用。索引塊分為一級(jí)索引塊和二級(jí)索引塊,其屬性如表2和3所示。一級(jí)索引塊表2一級(jí)索引塊屬性表二級(jí)索引塊表3二級(jí)索引塊屬性表數(shù)據(jù)塊,包含具體的數(shù)據(jù),其屬性如表4所示。序號(hào)符號(hào)數(shù)據(jù)類型屬性1ChkId無(wú)符號(hào)16位整型數(shù)據(jù)塊的標(biāo)記2Data具體數(shù)據(jù)表4數(shù)據(jù)塊屬性表基于上述數(shù)據(jù)庫(kù)結(jié)構(gòu),本發(fā)明提供了一種異構(gòu)存儲(chǔ)介質(zhì)下的嵌入式數(shù)據(jù)庫(kù)管理方法的實(shí)例,詳細(xì)流程參見(jiàn)圖2,本實(shí)例方法具體為:一、數(shù)據(jù)庫(kù)的準(zhǔn)備工作1.1文件定義將數(shù)據(jù)文件劃分為小數(shù)據(jù)塊(下文稱小數(shù)據(jù)量文件)和大數(shù)據(jù)塊(下文稱大數(shù)據(jù)量文件),劃分的依據(jù)是文件大小相對(duì)于嵌入式處理器內(nèi)存容量的比例,可根據(jù)經(jīng)驗(yàn)調(diào)整。本實(shí)例中,規(guī)定當(dāng)比例大于20%時(shí)定義為大數(shù)量文件,小于此值時(shí)為小數(shù)據(jù)量文件。根據(jù)文件的邏輯形式,將大數(shù)據(jù)量文件進(jìn)一步劃分為一維大數(shù)據(jù)量文件(如程序)和二維大數(shù)據(jù)量文件(如圖像)。1.2存儲(chǔ)定義一維大數(shù)據(jù)量文件在外部存儲(chǔ)器中連續(xù)存儲(chǔ),其可能涉及跨頁(yè)存儲(chǔ)。二維大數(shù)據(jù)量文件分解為若干個(gè)子塊,每個(gè)子塊不能大于一個(gè)存儲(chǔ)頁(yè)面的大小,其具體大小由用戶根據(jù)使用需要自行指定,每個(gè)子塊存儲(chǔ)到一個(gè)頁(yè)面。對(duì)于小數(shù)據(jù)量文件,則可以多個(gè)文件存儲(chǔ)到同一個(gè)頁(yè)面。1.3分配ID一個(gè)一維大數(shù)據(jù)量文件分配一個(gè)數(shù)據(jù)塊ID,二維大數(shù)據(jù)量文件的每個(gè)分塊分配一個(gè)數(shù)據(jù)塊ID,一個(gè)小數(shù)據(jù)量文件分配一個(gè)數(shù)據(jù)塊ID。ID編號(hào)規(guī)則為從小數(shù)據(jù)量文件開(kāi)始,接著是一維大數(shù)據(jù)量文件,最后是二維大數(shù)據(jù)量文件的分塊,從低到高連續(xù)編號(hào)。二、將信息塊、索引塊和數(shù)據(jù)塊存入外存。2.1存儲(chǔ)規(guī)劃信息塊、索引塊存儲(chǔ)在數(shù)據(jù)庫(kù)最開(kāi)始的一個(gè)頁(yè)面,小數(shù)據(jù)量文件存儲(chǔ)在從數(shù)據(jù)庫(kù)第2個(gè)頁(yè)面開(kāi)始的位置,接著是二維大數(shù)據(jù)量文件的分塊,最后是一維大數(shù)據(jù)量文件。小數(shù)據(jù)量文件可以多個(gè)文件合并存儲(chǔ)到一個(gè)頁(yè)面,遵循的原則是盡可能提高外部存儲(chǔ)器的利用率。二維大數(shù)據(jù)量文件是每個(gè)分塊存儲(chǔ)到一個(gè)頁(yè)面。一維大數(shù)據(jù)量文件連續(xù)存儲(chǔ),可能跨越多個(gè)頁(yè)面存儲(chǔ)。2.2統(tǒng)計(jì)數(shù)據(jù)塊的地址與長(zhǎng)度信息按照2.1中所描述的存儲(chǔ)方法,統(tǒng)計(jì)各數(shù)據(jù)塊的地址與長(zhǎng)度。2.3填充索引塊的內(nèi)容對(duì)于小數(shù)據(jù)量文件,給每個(gè)文件創(chuàng)建一個(gè)索引塊,將IdxId置為ChkId,IdxH2nd設(shè)置為不含二級(jí)索引,IdxFlg置為在外存,IdxChkAddr設(shè)置為小數(shù)據(jù)量文件在外存的地址,IdxChkLen設(shè)置為小數(shù)據(jù)量文件的長(zhǎng)度;依據(jù)訪問(wèn)頻繁程度、調(diào)用的緊急程度設(shè)置其優(yōu)先級(jí),如果數(shù)據(jù)文件被頻繁訪問(wèn)或調(diào)用時(shí)要求時(shí)延很小,在內(nèi)存許可的情況下,將其IdxPri置為優(yōu)先級(jí)1,其他要求低一些的則設(shè)置為優(yōu)先級(jí)2,不要求直接加載到內(nèi)存的設(shè)置為優(yōu)先級(jí)3。對(duì)于二維大數(shù)據(jù)量文件,首先創(chuàng)建一個(gè)一級(jí)索引,將IdxId置為文件起始分塊的ChkId,IdxH2nd設(shè)置為包含二級(jí)索引,IdxFlg設(shè)置為在外存,將其IdxPri置為優(yōu)先級(jí)1;IdxChkId設(shè)置為文件起始分塊的ChkId,IdxChkAddr設(shè)置為二級(jí)索引塊的地址,IdxChkLen設(shè)置為二級(jí)索引塊的長(zhǎng)度。創(chuàng)建二級(jí)索引塊,Idx2Id設(shè)置為文件起始分塊的ChkId,Idx2Flg設(shè)置為在外存,Idx2Pri置為優(yōu)先級(jí)4,Idx2ChkId[n]按照數(shù)據(jù)塊編號(hào)順序設(shè)置為每個(gè)分塊的ChkId,具體編號(hào)示例可以參見(jiàn)圖3,Idx2ChkAddr[n]按照數(shù)據(jù)塊編號(hào)順序設(shè)置為每個(gè)分塊的地址,Idx2ChkLen[n]按照數(shù)據(jù)塊編號(hào)順序設(shè)置為每個(gè)分塊的長(zhǎng)度。對(duì)于一維大數(shù)據(jù)量文件,給每個(gè)文件創(chuàng)建一個(gè)索引塊,將IdxId置為ChkId,IdxH2nd設(shè)置為不含二級(jí)索引,IdxFlg設(shè)置為在外存,將其IdxPri置為優(yōu)先級(jí)4,IdxChkAddr設(shè)置為一維大數(shù)據(jù)量文件在外存的地址,IdxChkLen設(shè)置為一維大數(shù)據(jù)量文件的長(zhǎng)度。2.4填充信息塊的內(nèi)容給數(shù)據(jù)庫(kù)分配唯一的DbId,IdxSize設(shè)置為一級(jí)索引塊的大小,IdxNum設(shè)置為2.3中所創(chuàng)建的一級(jí)索引塊的個(gè)數(shù),IdxAddr設(shè)置為第一個(gè)一級(jí)索引塊的地址,IntSize設(shè)置為優(yōu)先級(jí)為1的數(shù)據(jù)塊的總的大小,ExtSize設(shè)置為其余優(yōu)先級(jí)的數(shù)據(jù)塊的總的大小。當(dāng)上述信息準(zhǔn)備好后,將數(shù)據(jù)庫(kù)存入外部存儲(chǔ)器中。三、將數(shù)據(jù)庫(kù)加載到嵌入式處理器內(nèi)存中加載的基本思路是:將信息塊加載到內(nèi)存,依據(jù)信息塊攜帶的索引塊信息將索引塊加載到內(nèi)存,依據(jù)索引塊攜帶的數(shù)據(jù)塊信息將小數(shù)據(jù)塊中優(yōu)先級(jí)高的加載到內(nèi)存,并將被加載小數(shù)據(jù)塊的索引塊內(nèi)的地址更新為所在內(nèi)存地址。特別的針對(duì)二維大數(shù)據(jù)塊的,將其一級(jí)索引和二級(jí)索引加載到內(nèi)存,并將一級(jí)索引內(nèi)的地址更新為二級(jí)索引在內(nèi)存中的地址。本實(shí)例加載的具體過(guò)程為:3.1嵌入式處理器啟動(dòng)后,將嵌入式數(shù)據(jù)庫(kù)信息塊的起始地址告知程序,程序在內(nèi)存中分配固定長(zhǎng)度的存儲(chǔ)空間,將信息塊從外存加載到該空間。3.2程序依據(jù)信息塊中參數(shù)IdxSize和IdxNum,計(jì)算出索引塊的總長(zhǎng)度,在內(nèi)存中分配所需長(zhǎng)度的存儲(chǔ)空間,依據(jù)參數(shù)IdxAddr將所有一級(jí)索引塊加載到該空間。3.3加載數(shù)據(jù)塊3.3.1計(jì)算所需內(nèi)存空間,將索引塊中參數(shù)IdxH2nd為包含二級(jí)索引的IdxChkLen,加上索引塊中參數(shù)IdxH2nd為不含二級(jí)索引、參數(shù)IdxPri等于優(yōu)先級(jí)1的IdxChkLen,再估算出內(nèi)存所??臻g,如果空間剩余較多,則增加部分優(yōu)先級(jí)2的數(shù)據(jù)塊,計(jì)算出最后的長(zhǎng)度。3.3.2根據(jù)步驟3.3.1計(jì)算出的長(zhǎng)度,分配所需內(nèi)存空間。3.3.3根據(jù)IdxChkAddr加載步驟3.3.1中已判定要加載的數(shù)據(jù)塊。3.3.4將二級(jí)索引塊加載到內(nèi)存空間。數(shù)據(jù)庫(kù)加載的后續(xù)工作:對(duì)于已加載到內(nèi)存的小數(shù)據(jù)量文件,將其索引塊的IdxChkAddr修改為其數(shù)據(jù)塊在內(nèi)存中的地址,將其索引塊的IdxFlg修改為在內(nèi)存。對(duì)于二維大數(shù)據(jù)量文件,將其一級(jí)索引塊的IdxChkAddr修改為其二級(jí)索引塊在內(nèi)存中的地址,將其一級(jí)索引塊的IdxFlg修改為在內(nèi)存。將信息塊的IdxAddr修改為第一個(gè)索引塊在內(nèi)存中的起始地址。四、訪問(wèn)數(shù)據(jù)庫(kù)訪問(wèn)數(shù)據(jù)庫(kù)的策略是:嵌入式處理器查詢到待訪問(wèn)數(shù)據(jù)的索引塊,若該數(shù)據(jù)塊存在于內(nèi)存,則根據(jù)索引塊攜帶的內(nèi)存地址直接訪問(wèn)數(shù)據(jù),若該數(shù)據(jù)塊存在于外存,則根據(jù)索引塊攜帶的外存地址訪問(wèn)數(shù)據(jù)。本實(shí)例訪問(wèn)數(shù)據(jù)庫(kù)的具體實(shí)現(xiàn)過(guò)程為:對(duì)于給定的ChkId,如果一級(jí)索引塊IdxId==ChkId,而且IdxH2nd為不含二級(jí)索引,則可以根據(jù)IdxChkAddr和IdxChkLen直接訪問(wèn)數(shù)據(jù)塊,如果IdxFlg為在內(nèi)存,則IdxChkAddr表示內(nèi)存地址,如果IdxFlg為在外存,則IdxChkAddr表示外存地址。對(duì)于給定的ChkId,如果一級(jí)索引塊IdxId==ChkId,而IdxH2nd為包含二級(jí)索引,則依據(jù)IdxChkAddr訪問(wèn)二級(jí)索引,由于二級(jí)索引中Idx2ChkId[0]==ChkId,所以根據(jù)Idx2ChkAddr[0]和Idx2ChkLen[0]直接訪問(wèn)數(shù)據(jù)塊。對(duì)于給定的ChkId,如果索引塊IdxId?。紺hkId,則需進(jìn)一步判斷:如果(ChkId>當(dāng)前IdxId)且(ChkId<下一個(gè)IdxId),則認(rèn)為所要找的數(shù)據(jù)塊在當(dāng)前一級(jí)索引所指向的二級(jí)索引中可以找到,所以訪問(wèn)二級(jí)索引,找到Idx2ChkId[n]==ChkId,根據(jù)Idx2ChkAddr[n]訪問(wèn)數(shù)據(jù)塊;如果(ChkId>當(dāng)前IdxId),并且下一個(gè)IdxId不存在,則認(rèn)為所要找的數(shù)據(jù)塊在當(dāng)前一級(jí)索引所指向的二級(jí)索引中可以找到,所以訪問(wèn)二級(jí)索引,找到Idx2ChkId[n]==ChkId,根據(jù)Idx2ChkAddr[n]訪問(wèn)數(shù)據(jù)塊。五、數(shù)據(jù)文件在內(nèi)存的動(dòng)態(tài)調(diào)度對(duì)于已經(jīng)完成訪問(wèn)的內(nèi)存數(shù)據(jù)塊,將其優(yōu)先級(jí)降到最低級(jí);對(duì)于訪問(wèn)時(shí)延要求降低的內(nèi)存數(shù)據(jù)文件,將其優(yōu)先級(jí)降低;將上述兩種降低優(yōu)先級(jí)的內(nèi)存數(shù)據(jù)塊釋放到外存,并將其索引塊內(nèi)的地址更新為所在外存地址;根據(jù)內(nèi)存使用情況,綜合考慮將訪問(wèn)時(shí)延要求和優(yōu)先級(jí)相對(duì)較高的外存數(shù)據(jù)塊補(bǔ)充加載到內(nèi)存,并將該數(shù)據(jù)塊的索引塊內(nèi)的地址更新為其所在內(nèi)存地址。在本實(shí)例中,對(duì)于已經(jīng)完成訪問(wèn)的內(nèi)存數(shù)據(jù)文件,將其索引塊中的IdxPri修改為優(yōu)先級(jí)4,對(duì)于訪問(wèn)時(shí)延要求降低的內(nèi)存數(shù)據(jù)文件,將其索引塊中的IdxPri修改為優(yōu)先級(jí)3。當(dāng)系統(tǒng)空閑時(shí),收回優(yōu)先級(jí)4的數(shù)據(jù)文件的內(nèi)存空間,將其在索引塊中的IdxChkAddr修改為數(shù)據(jù)文件在外存的地址,將IdxFlg修改為在外存,示意圖參見(jiàn)圖4。根據(jù)最新的內(nèi)存使用情況,將部分訪問(wèn)時(shí)延要求較高的優(yōu)先級(jí)2數(shù)據(jù)文件加載到內(nèi)存,將其索引塊的IdxChkAddr修改為其數(shù)據(jù)塊在內(nèi)存中的地址,將其索引塊的IdxFlg修改為在內(nèi)存,示意圖參見(jiàn)圖5。本領(lǐng)域的技術(shù)人員容易理解,以上所述僅為本發(fā)明的較佳實(shí)施例而已,并不用以限制本發(fā)明,凡在本發(fā)明的精神和原則之內(nèi)所作的任何修改、等同替換和改進(jìn)等,均應(yīng)包含在本發(fā)明的保護(hù)范圍之內(nèi)。