專(zhuān)利名稱(chēng):一種提升嵌入式數(shù)據(jù)庫(kù)實(shí)時(shí)性的數(shù)據(jù)存儲(chǔ)方法
技術(shù)領(lǐng)域:
本發(fā)明涉及一種數(shù)據(jù)庫(kù)數(shù)據(jù)存儲(chǔ)方法,尤其涉及一種提升嵌入式數(shù)據(jù)庫(kù)實(shí)時(shí)性的數(shù)據(jù)存儲(chǔ)方法,屬于嵌入式實(shí)時(shí)數(shù)據(jù)庫(kù)技術(shù)領(lǐng)域。
背景技術(shù):
隨著嵌入式系統(tǒng)的廣泛應(yīng)用及嵌入式實(shí)時(shí)操作系統(tǒng)的不斷普及,嵌入式環(huán)境下的數(shù)據(jù)管理問(wèn)題成為系統(tǒng)中的重要環(huán)節(jié),構(gòu)建嵌入式實(shí)時(shí)數(shù)據(jù)庫(kù)系統(tǒng)成為嵌入式開(kāi)發(fā)中必須解決的問(wèn)題。這里所說(shuō)的嵌入式是指可在嵌入式設(shè)備中獨(dú)立運(yùn)行的一種數(shù)據(jù)庫(kù)系統(tǒng),用以處理大量的、時(shí)效性強(qiáng)且有嚴(yán)格時(shí)序的數(shù)據(jù),它以高可靠性、高實(shí)時(shí)性和高信息吞吐量為目標(biāo),其數(shù)據(jù)的正確性不僅依賴(lài)于邏輯結(jié)果,而且依賴(lài)于邏輯結(jié)果產(chǎn)生的時(shí)間。目前嵌入式環(huán)境下的數(shù)據(jù)庫(kù)系統(tǒng)多數(shù)采用了關(guān)系模型結(jié)構(gòu),這也是商用數(shù)據(jù)庫(kù)系統(tǒng)的數(shù)據(jù)模型,該模型結(jié)構(gòu)是利用二維關(guān)系表來(lái)實(shí)現(xiàn)數(shù)據(jù)存儲(chǔ),利用索引訪問(wèn)和查詢(xún)數(shù)據(jù), 這種模型結(jié)構(gòu)是建立在嚴(yán)格的數(shù)學(xué)基礎(chǔ)上的,結(jié)構(gòu)簡(jiǎn)單靈活,獨(dú)立性好,但在嵌入式環(huán)境下的內(nèi)存開(kāi)銷(xiāo)和數(shù)據(jù)冗余較大,用戶(hù)必須對(duì)其進(jìn)行優(yōu)化,增加了開(kāi)發(fā)數(shù)據(jù)庫(kù)系統(tǒng)的難度;有些嵌入式數(shù)據(jù)庫(kù)則采用了網(wǎng)狀模型結(jié)構(gòu),該模型通過(guò)指針來(lái)確定數(shù)據(jù)間的顯式連接關(guān)系,它比關(guān)系模型中利用冗余數(shù)據(jù)和索引文件要節(jié)約大量的存儲(chǔ)空間,具有一定的數(shù)據(jù)獨(dú)立性和共享特性,運(yùn)行效率較高,而且由于它避免了索引操作,比關(guān)系型數(shù)據(jù)庫(kù)模式要節(jié)省存儲(chǔ)空間,數(shù)據(jù)操作速度也更快。但是這種模型結(jié)構(gòu)比較復(fù)雜,尤其當(dāng)嵌入式系統(tǒng)規(guī)模增大時(shí),其數(shù)據(jù)庫(kù)的結(jié)構(gòu)變得非常龐大,會(huì)影響到系統(tǒng)的實(shí)時(shí)性能。ORACLE提供了以下幾種索引B-Tree、哈希(hash)、位圖(bitmap)等索引類(lèi)型, 基于原始表的索引,基于函數(shù)的索引,域(Domain)索引。實(shí)際應(yīng)用中主要是B-Tree索引和位圖索引。位圖索引主要用于決策支持系統(tǒng)或靜態(tài)數(shù)據(jù)。位圖索引可以是簡(jiǎn)單的(單列) 也可以是連接的(多列),但在實(shí)踐中絕大多數(shù)是簡(jiǎn)單的。位圖索引最好用于低到中群集 (cardinality)列,在這些列上多位圖索引可以與AND或OR操作符結(jié)合使用。位圖索引使用位圖作為鍵值,對(duì)于表中的每一數(shù)據(jù)行位圖包含了 TRUE(1)、FALSE(0)、或NULL值。位圖索引的位圖存放在B-Tree結(jié)構(gòu)的頁(yè)節(jié)點(diǎn)中。Β-Tree結(jié)構(gòu)使查找位圖非常方便和快速。另外,位圖以一種壓縮格式存放,因此占用的磁盤(pán)空間比B-Tree索引要小得多。甲骨文公司推出的!^astDB內(nèi)存數(shù)據(jù)庫(kù)是一個(gè)高效率的內(nèi)存數(shù)據(jù)庫(kù)系統(tǒng),在磁盤(pán)上的數(shù)據(jù)庫(kù)文件和使用該數(shù)據(jù)庫(kù)的每一個(gè)應(yīng)用程序占用的虛擬內(nèi)存空間相映射,這樣取消了數(shù)據(jù)文件和緩沖池中的數(shù)據(jù)傳輸。再將整個(gè)文件數(shù)據(jù)讀入內(nèi)存,并且使用了高性能的鎖工具實(shí)現(xiàn)了只讀模式線程間、單個(gè)更改模式線程和多個(gè)只讀模式線程間的并發(fā)執(zhí)行。通過(guò)位圖實(shí)現(xiàn)對(duì)內(nèi)存進(jìn)行分配,最小單位塊是分配量子(字節(jié))。如此大大提高了數(shù)據(jù)引用的局部性(對(duì)象數(shù)據(jù)盡可能分配在連續(xù)的內(nèi)存區(qū)域),最小化了修改頁(yè)的數(shù)目和減少了事務(wù)提交時(shí)間。事務(wù)提交協(xié)議基于一個(gè)影子根頁(yè)算法,對(duì)數(shù)據(jù)庫(kù)執(zhí)行原子更新操作,恢復(fù)效率很高,在存儲(chǔ)數(shù)據(jù)結(jié)構(gòu)上可以采用結(jié)構(gòu)(和相似,只是中每個(gè)節(jié)點(diǎn)中順序存儲(chǔ)了多個(gè)值),對(duì)于大量相似重復(fù)性數(shù)據(jù)的查詢(xún)性能相當(dāng)高。fastdb事務(wù)提交是影子根頁(yè)算法,有兩個(gè)數(shù)組current index和shadow index,當(dāng)前數(shù)組和影子數(shù)組,里面存放的是對(duì)象的地址偏移。當(dāng)對(duì)象被修改時(shí),內(nèi)存中的對(duì)象被拷貝,位圖bitmap也被拷貝了一份,影子數(shù)組依然存放原對(duì)象的地址偏移,指向原位圖的頁(yè)面,而當(dāng)前數(shù)組指向新的拷貝的地址偏移,新的位圖頁(yè), 所有的修改也在拷貝的地址中進(jìn)行。當(dāng)事務(wù)成功提交后,就把當(dāng)前數(shù)組的內(nèi)容復(fù)制到影子數(shù)組,這樣它們就都指向新的偏移了,而原來(lái)指向的內(nèi)存空間可以釋放掉,而且修改頁(yè)的內(nèi)容被刷新到磁盤(pán)上。如果事務(wù)提交失敗,需要回滾,就把影子數(shù)組的內(nèi)容復(fù)制到當(dāng)前數(shù)組。
發(fā)明內(nèi)容
本發(fā)明所要解決的技術(shù)問(wèn)題在于提供一種提升嵌入式數(shù)據(jù)庫(kù)實(shí)時(shí)性的數(shù)據(jù)存儲(chǔ)方法。該方法可以明顯提升嵌入式實(shí)時(shí)數(shù)據(jù)庫(kù)的實(shí)時(shí)性,滿(mǎn)足嵌入式數(shù)據(jù)庫(kù)應(yīng)用的實(shí)時(shí)性要求。為實(shí)現(xiàn)上述目的,本發(fā)明提供一種提升嵌入式數(shù)據(jù)庫(kù)實(shí)時(shí)性的數(shù)據(jù)存儲(chǔ)方法,其特征在于數(shù)據(jù)庫(kù)文件存儲(chǔ)空間分為四部分,依次包含數(shù)據(jù)庫(kù)頭信息、對(duì)象索引、位圖頁(yè)和其它對(duì)象占用空間,其中,對(duì)象索引是以對(duì)象標(biāo)識(shí)為下標(biāo)的對(duì)象數(shù)組。較優(yōu)選的,所述對(duì)象索引是將對(duì)象的OID映射為對(duì)象的存儲(chǔ)位置的數(shù)組,對(duì)象索引的值為該對(duì)象在所述數(shù)據(jù)庫(kù)文件存儲(chǔ)空間中的偏移量,所述偏移量將該對(duì)象的內(nèi)存映像定位到數(shù)據(jù)庫(kù)文件存儲(chǔ)空間中。本發(fā)明通過(guò)對(duì)象位圖結(jié)合的對(duì)象存儲(chǔ)技術(shù),提高了數(shù)據(jù)庫(kù)的存儲(chǔ)效率。通過(guò)對(duì)象位圖訪問(wèn)數(shù)據(jù)庫(kù)對(duì)象的方式,可以在實(shí)現(xiàn)時(shí)使用數(shù)組,以提高元數(shù)據(jù)的訪問(wèn)速度。特別是在數(shù)據(jù)庫(kù)容量相對(duì)較小的應(yīng)用場(chǎng)景下,這種方法可以大大提升訪問(wèn)速度。
下面結(jié)合附圖和具體實(shí)施方式
對(duì)本發(fā)明作進(jìn)一步的詳細(xì)說(shuō)明。圖1為數(shù)據(jù)庫(kù)空間布局示意圖;圖2為記錄對(duì)象之間邏輯關(guān)系示意圖。圖3為表對(duì)象之間邏輯關(guān)系示意圖。圖4為記錄對(duì)象的存儲(chǔ)映像示意圖。
具體實(shí)施例方式本發(fā)明中定義的存儲(chǔ)設(shè)計(jì)是指嵌入式實(shí)時(shí)數(shù)據(jù)庫(kù)中數(shù)據(jù)庫(kù)元數(shù)據(jù)的存儲(chǔ)結(jié)構(gòu)、方案等,發(fā)明中的存儲(chǔ)設(shè)計(jì)區(qū)別于一般數(shù)據(jù)庫(kù)存儲(chǔ)設(shè)計(jì),為了保證數(shù)據(jù)庫(kù)的實(shí)時(shí)性,使用了存取速度優(yōu)先的存儲(chǔ)結(jié)構(gòu),在存取方法上,也設(shè)計(jì)了符合此種結(jié)構(gòu),且速度優(yōu)先的存取方法。本發(fā)明的目的是通過(guò)方案中的存儲(chǔ)設(shè)計(jì),使嵌入式數(shù)據(jù)庫(kù)系統(tǒng)在嵌入式應(yīng)用場(chǎng)景下,提高數(shù)據(jù)庫(kù)系統(tǒng)的實(shí)時(shí)性,這種實(shí)時(shí)性包括兩方面的內(nèi)容,一是在嵌入式場(chǎng)景下的實(shí)時(shí)系統(tǒng)中應(yīng)用數(shù)據(jù)庫(kù),通過(guò)設(shè)計(jì)針對(duì)存儲(chǔ)結(jié)構(gòu)的存取方法,保證實(shí)時(shí)系統(tǒng)針對(duì)應(yīng)用的實(shí)時(shí)性; 二是根據(jù)數(shù)據(jù)庫(kù)存儲(chǔ)結(jié)構(gòu),設(shè)計(jì)專(zhuān)門(mén)的事務(wù)調(diào)試策略,達(dá)到事務(wù)的實(shí)時(shí)性。本發(fā)明適用于嵌入式實(shí)時(shí)數(shù)據(jù)庫(kù),在進(jìn)行嵌入式實(shí)時(shí)數(shù)據(jù)庫(kù)的存儲(chǔ)設(shè)計(jì)時(shí),把數(shù)據(jù)庫(kù)的各種概念進(jìn)行相應(yīng)的對(duì)象設(shè)計(jì),使數(shù)據(jù)庫(kù)中存儲(chǔ)的都是對(duì)象,比如表記錄是對(duì)象,表描述符是對(duì)象,索引是對(duì)象,索引的結(jié)點(diǎn)也是對(duì)象,內(nèi)存頁(yè)是對(duì)象,諸如此類(lèi)。數(shù)據(jù)庫(kù)中每個(gè)對(duì)象有自己唯一的標(biāo)示,稱(chēng)之為OID (Object Identifier,也寫(xiě)作oid)。Index [oid]是oid 所代表的對(duì)象在數(shù)據(jù)庫(kù)空間中的實(shí)際存儲(chǔ)位置。針對(duì)這些對(duì)象的特點(diǎn)進(jìn)行分類(lèi),之后進(jìn)行存儲(chǔ),存取時(shí)以對(duì)象標(biāo)識(shí)oid為索引信息,通過(guò)對(duì)象數(shù)組進(jìn)行訪問(wèn),可以大大提高嵌入式數(shù)據(jù)庫(kù)的實(shí)時(shí)性。根據(jù)數(shù)據(jù)庫(kù)中存儲(chǔ)的對(duì)象的特點(diǎn)進(jìn)行分類(lèi),將存儲(chǔ)對(duì)象分為通用對(duì)象 (db Varying)、記錄對(duì)象(dbRecord)、表對(duì)象(dbTable)、字段對(duì)象(dbField)、哈希表對(duì)象 (dbHashTable)和哈希表結(jié)點(diǎn)對(duì)象(dbHashTableltem),這六種對(duì)象類(lèi)型。可以理解,根據(jù)實(shí)際的需要,還可以劃分為其他對(duì)象類(lèi)型。同一頁(yè)只存儲(chǔ)同一類(lèi)型的對(duì)象。同一類(lèi)型的對(duì)象有固定大小的長(zhǎng)度,不同類(lèi)型的對(duì)象的長(zhǎng)度可以不同。這樣就把對(duì)象區(qū)分成多個(gè)(本發(fā)明實(shí)施例中為6個(gè))具有固定長(zhǎng)度的數(shù)據(jù)類(lèi)型了。通過(guò)把需要建立位圖索引的列設(shè)置為固定長(zhǎng)度的數(shù)據(jù)類(lèi)型,就可以提高查詢(xún)的效率。因?yàn)槭褂霉潭ㄩL(zhǎng)度的數(shù)據(jù)類(lèi)型的情況下,要比可變長(zhǎng)度的數(shù)據(jù)類(lèi)型的情況下,位圖索引的性能更加優(yōu)越,有利于提高數(shù)據(jù)庫(kù)的實(shí)時(shí)性。上述存儲(chǔ)設(shè)計(jì)所實(shí)現(xiàn)的物理存儲(chǔ)結(jié)果,如圖1所示,完整的數(shù)據(jù)庫(kù)文件存儲(chǔ)空間分為四部分,依次包含數(shù)據(jù)庫(kù)頭信息(dbHeader)、對(duì)象索引(object index)、位圖頁(yè) (bitmap page)和其它對(duì)象占用空間。在本發(fā)明的一個(gè)較佳實(shí)施例中,頭信息始終存儲(chǔ)在數(shù)據(jù)庫(kù)文件首頁(yè)中,其大小例如是4K。對(duì)象索引用于將對(duì)象的OID映射為對(duì)象的存儲(chǔ)位置的數(shù)組,相當(dāng)于一個(gè)“指針”數(shù)組。對(duì)象索引的大小可由應(yīng)用程序指定,但是位置在頭信息之后,可以擴(kuò)展到新位置。這是因?yàn)?,隨著分配的新對(duì)象越來(lái)越多,對(duì)象索引會(huì)不夠用,需要進(jìn)行擴(kuò)展,系統(tǒng)將為對(duì)象索引分配新的空間,并將原內(nèi)容復(fù)制。這樣對(duì)象索引在數(shù)據(jù)庫(kù)空間中的位置是不確定的。在圖 1中對(duì)象索引以對(duì)象數(shù)組1和對(duì)象數(shù)組2為例。內(nèi)存映像由該對(duì)象在數(shù)據(jù)庫(kù)空間中的偏移量offset來(lái)定位。對(duì)象數(shù)組的值為該對(duì)象在數(shù)據(jù)庫(kù)空間中的偏移量,下標(biāo)為oid。對(duì)象標(biāo)識(shí)oid的取值如下表所示。
權(quán)利要求
1.一種提升嵌入式數(shù)據(jù)庫(kù)實(shí)時(shí)性的數(shù)據(jù)存儲(chǔ)方法,其特征在于數(shù)據(jù)庫(kù)文件存儲(chǔ)空間分為四部分,依次包含數(shù)據(jù)庫(kù)頭信息、對(duì)象索引、位圖頁(yè)和其它對(duì)象占用空間,其中,對(duì)象索引是以對(duì)象標(biāo)識(shí)為下標(biāo)的對(duì)象數(shù)組。
2.如權(quán)利要求1所述的提升嵌入式數(shù)據(jù)庫(kù)實(shí)時(shí)性的數(shù)據(jù)存儲(chǔ)方法,其特征在于 所述對(duì)象索引是將對(duì)象的OID映射為對(duì)象的存儲(chǔ)位置的數(shù)組,對(duì)象索引的值為該對(duì)象在所述數(shù)據(jù)庫(kù)文件存儲(chǔ)空間中的偏移量,所述偏移量將該對(duì)象的內(nèi)存映像定位到數(shù)據(jù)庫(kù)文件存儲(chǔ)空間中。
3.如權(quán)利要求2所述的提升嵌入式數(shù)據(jù)庫(kù)實(shí)時(shí)性的數(shù)據(jù)存儲(chǔ)方法,其特征在于通過(guò)將對(duì)象劃分為多個(gè)類(lèi)型,在同一頁(yè)存儲(chǔ)同一個(gè)類(lèi)型的對(duì)象,使同一頁(yè)的對(duì)象具有固定長(zhǎng)度。
4.如權(quán)利要求3所述的提升嵌入式數(shù)據(jù)庫(kù)實(shí)時(shí)性的數(shù)據(jù)存儲(chǔ)方法,其特征在于 同類(lèi)型的對(duì)象之間是雙向鏈表結(jié)構(gòu)。
5.如權(quán)利要求2所述的提升嵌入式數(shù)據(jù)庫(kù)實(shí)時(shí)性的數(shù)據(jù)存儲(chǔ)方法,其特征在于在對(duì)位圖頁(yè)的內(nèi)容進(jìn)行修改時(shí),分配新的一個(gè)位圖頁(yè)對(duì)象,將原來(lái)位圖頁(yè)的內(nèi)容復(fù)制到所述新位圖頁(yè)上,然后在所述新位圖頁(yè)上做修改。
6.如權(quán)利要求2所述的提升嵌入式數(shù)據(jù)庫(kù)實(shí)時(shí)性的數(shù)據(jù)存儲(chǔ)方法,其特征在于如果有一個(gè)新事務(wù)產(chǎn)生,就把所述新事務(wù)的優(yōu)先級(jí)和正在執(zhí)行的事務(wù)的優(yōu)先級(jí)進(jìn)行比較,比較結(jié)果中優(yōu)先級(jí)高的事務(wù)會(huì)被立即執(zhí)行,優(yōu)先級(jí)低的事務(wù)則根據(jù)事務(wù)優(yōu)先級(jí)和事務(wù)先后順序進(jìn)行排序。
7.如權(quán)利要求6所述的提升嵌入式數(shù)據(jù)庫(kù)實(shí)時(shí)性的數(shù)據(jù)存儲(chǔ)方法,其特征在于 應(yīng)用通過(guò)數(shù)據(jù)庫(kù)相應(yīng)接口對(duì)特定事務(wù)在隊(duì)列中的位置進(jìn)行調(diào)整。
8.如權(quán)利要求6或7所述的提升嵌入式數(shù)據(jù)庫(kù)實(shí)時(shí)性的數(shù)據(jù)存儲(chǔ)方法,其特征在于 通過(guò)改變事務(wù)鏈表中元素的位置和信息進(jìn)行事務(wù)調(diào)度,所述事務(wù)鏈表中的結(jié)點(diǎn)中信息有事務(wù)優(yōu)先級(jí)、事務(wù)ID、事務(wù)屬主、事務(wù)產(chǎn)生時(shí)間和具體事務(wù)內(nèi)容。
全文摘要
本發(fā)明提供一種提升嵌入式數(shù)據(jù)庫(kù)實(shí)時(shí)性的數(shù)據(jù)存儲(chǔ)方法。該方法中,數(shù)據(jù)庫(kù)文件存儲(chǔ)空間分為四部分,依次包含數(shù)據(jù)庫(kù)頭信息、對(duì)象索引、位圖頁(yè)和其它對(duì)象占用空間,其中,對(duì)象索引是以對(duì)象標(biāo)識(shí)為下標(biāo)的對(duì)象數(shù)組。本發(fā)明通過(guò)對(duì)象位圖結(jié)合的對(duì)象存儲(chǔ)技術(shù),提高了數(shù)據(jù)庫(kù)的存儲(chǔ)效率。通過(guò)對(duì)象位圖訪問(wèn)數(shù)據(jù)庫(kù)對(duì)象的方式,可以在實(shí)現(xiàn)時(shí)使用數(shù)組,以提高元數(shù)據(jù)的訪問(wèn)速度。特別是在數(shù)據(jù)庫(kù)容量相對(duì)較小的應(yīng)用場(chǎng)景下,這種方法可以大大提升訪問(wèn)速度。
文檔編號(hào)G06F17/30GK102411634SQ20111044518
公開(kāi)日2012年4月11日 申請(qǐng)日期2011年12月27日 優(yōu)先權(quán)日2011年12月27日
發(fā)明者劉建立, 寇立濤, 李恒, 楊經(jīng)正, 陳東 申請(qǐng)人:北京人大金倉(cāng)信息技術(shù)股份有限公司