欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

存儲(chǔ)器中心數(shù)據(jù)庫(kù)架構(gòu)的制作方法

文檔序號(hào):11133478閱讀:610來源:國(guó)知局
存儲(chǔ)器中心數(shù)據(jù)庫(kù)架構(gòu)的制造方法與工藝

本發(fā)明一般地涉及數(shù)據(jù)存儲(chǔ)系統(tǒng)和方法,更具體地涉及永久非易失性閃存數(shù)據(jù)庫(kù)存儲(chǔ)系統(tǒng)和方法。



背景技術(shù):

永久半導(dǎo)體存儲(chǔ)器,諸如閃速存儲(chǔ)器(閃存,flash memory),的讀/寫性能正發(fā)展到一個(gè)點(diǎn),它可能會(huì)很快替代一些應(yīng)用中的內(nèi)部存儲(chǔ)器。預(yù)期隨著時(shí)間的推移非易失性閃速存儲(chǔ)器將變得跟DRAM一樣快。這會(huì)為閃速存儲(chǔ)器打開很多用于存儲(chǔ)系統(tǒng)諸如數(shù)據(jù)庫(kù)的獨(dú)特和不同的應(yīng)用。然而,閃速存儲(chǔ)器可以被高效地用作數(shù)據(jù)庫(kù)之前,需要解決很多不同的問題,這需要用于編程語言編譯器諸如Java的不同的模型,以及極其不同的存儲(chǔ)系統(tǒng)架構(gòu)解決方案。

傳統(tǒng)Java運(yùn)行環(huán)境(JRE,Java runtime environment)目前沒有能力永久地存儲(chǔ)數(shù)據(jù)對(duì)象。所有的對(duì)象由構(gòu)造函數(shù)在運(yùn)行時(shí)創(chuàng)建并且存儲(chǔ)在易失性存儲(chǔ)器中(例如RAM)。這對(duì)閃速存儲(chǔ)器是不利的,因?yàn)樾枰猛耆煌姆绞絼?chuàng)建、刪除以及管理非易失性存儲(chǔ)器中的永久對(duì)象。創(chuàng)建易失性存儲(chǔ)器中的臨時(shí)對(duì)象的優(yōu)點(diǎn)在于,當(dāng)應(yīng)用關(guān)閉或被垃圾回收進(jìn)程清除時(shí),非引用對(duì)象可以被自動(dòng)清除,這也會(huì)在運(yùn)行時(shí)自動(dòng)釋放內(nèi)存。這跟具有閃速存儲(chǔ)器的情形不同,該情形中對(duì)于刪除永久對(duì)象和釋放內(nèi)存來說確認(rèn)動(dòng)作是必須的。

另外,由于數(shù)據(jù)庫(kù)中對(duì)象的數(shù)量可以很大,因此存在如何基于查詢定義有效地發(fā)現(xiàn)并且檢索閃存陣列中的對(duì)象的問題。當(dāng)使用閃速存儲(chǔ)器時(shí)需要解決的其它問題是如何確定對(duì)象的位置,從而可以對(duì)其引用,以及如何刪除存儲(chǔ)的對(duì)象和釋放內(nèi)存。尋找永久存儲(chǔ)器中的對(duì)象需要不同于易失性存儲(chǔ)器中使用的索引方法。確實(shí),由于非易失性存儲(chǔ)器正在取代內(nèi)部存儲(chǔ)器,因此有必要重新思考傳統(tǒng)架構(gòu)和技術(shù)。

傳統(tǒng)數(shù)據(jù)庫(kù)利用專用服務(wù)器產(chǎn)品將對(duì)象序列化成表結(jié)構(gòu),并且提供其它有益的能力以便于和加速查找,這些能力諸如事務(wù)模型、數(shù)據(jù)的一致視圖、查詢語言諸如SQL、更新單個(gè)數(shù)據(jù)域的能力,以及索引結(jié)構(gòu)。這些能力涉及大量消耗會(huì)減慢軟件方案。伴隨的序列化/反序列化過程通常檢查各個(gè)集線器(hub)和緩存,這會(huì)在中央處理器(CPU)和內(nèi)存上導(dǎo)致很大的開銷、低效率和增加存儲(chǔ)成本。這對(duì)于閃存存儲(chǔ)是不合適的,閃存存儲(chǔ)中對(duì)象總是保存在存儲(chǔ)器中。需要用于管理對(duì)象的不同的事務(wù)模型以及檢索和刪除對(duì)象的不同解決方案。



技術(shù)實(shí)現(xiàn)要素:

需要提供基于永久閃速存儲(chǔ)器的新的以存儲(chǔ)器為中心的數(shù)據(jù)庫(kù)架構(gòu),其通過利用用于數(shù)據(jù)庫(kù)架構(gòu)的閃速存儲(chǔ)器解決了前述和其它問題,并且這也是本發(fā)明期望的。

附圖說明

圖1是繪示了系統(tǒng)架構(gòu)的方塊圖,該系統(tǒng)根據(jù)本發(fā)明的實(shí)施例提供全閃存編譯器和運(yùn)行時(shí)環(huán)境。

圖2繪示了數(shù)據(jù)庫(kù)存儲(chǔ)的傳統(tǒng)方案。

圖3對(duì)比了根據(jù)本發(fā)明的全閃存數(shù)據(jù)庫(kù)方案和圖2中的傳統(tǒng)數(shù)據(jù)庫(kù)方案。

圖4繪示了用于索引永久對(duì)象的根據(jù)本發(fā)明的全閃存編譯器的操作。

圖5繪示了根據(jù)本發(fā)明的全閃存數(shù)據(jù)庫(kù)的索引結(jié)構(gòu)的實(shí)施例。

圖6繪示了根據(jù)本發(fā)明的用于管理全閃存數(shù)據(jù)庫(kù)中的對(duì)象的處理的實(shí)施例。

圖7A-C繪示了根據(jù)本發(fā)明的用于刪除對(duì)象和壓縮存儲(chǔ)器的處理的實(shí)施例。

圖8A-C繪示了根據(jù)本發(fā)明的用于刪除全閃存數(shù)據(jù)庫(kù)中永久對(duì)象的不同的方案。

具體實(shí)施方式

本發(fā)明利用永久非易失性閃速存儲(chǔ)器提供新的和獨(dú)特的以存儲(chǔ)器為中心的數(shù)據(jù)庫(kù)架構(gòu),其將傳統(tǒng)數(shù)據(jù)庫(kù)有益的特性、靈活性和多功能性與閃速存儲(chǔ)器提供的速度、安全和方便結(jié)合在一起,同時(shí)獲取了相對(duì)于傳統(tǒng)存儲(chǔ)器改進(jìn)的性能。根據(jù)本發(fā)明,提供了用于閃速存儲(chǔ)技術(shù)的新類型的編譯器和優(yōu)化的運(yùn)行時(shí)(runtime)。本發(fā)明尤其非常適于與Java編程語言一起使用,以及用于數(shù)據(jù)庫(kù)應(yīng)用,本文將對(duì)此進(jìn)行描述。因此,在描述本發(fā)明的實(shí)施例時(shí),說明書將使用與描述“全閃存Java編譯器”(all flash Java compiler,AFJC)、“全閃存Java運(yùn)行環(huán)境”(all flash Java runtime environment,AFJRE)以及“全閃存數(shù)據(jù)庫(kù)”(all flash database,AFDB)有關(guān)的術(shù)語諸如“全閃存”(all flash)。然而,應(yīng)當(dāng)理解基于Java的存儲(chǔ)系統(tǒng)和方法只是繪示本發(fā)明的一個(gè)實(shí)例,本發(fā)明對(duì)于其他編程語言、環(huán)境和應(yīng)用也有適應(yīng)性。

圖1繪示了根據(jù)本發(fā)明的實(shí)施例的系統(tǒng)的架構(gòu),該系統(tǒng)提供用于根據(jù)本發(fā)明的實(shí)施例的全閃存存儲(chǔ)陣列的編譯器和運(yùn)行時(shí)環(huán)境。如圖中所示,該系統(tǒng)包括連接至客戶端112的計(jì)算機(jī)系統(tǒng)(CPU)110、易失性存儲(chǔ)器114和非易失性存儲(chǔ)器116。該易失性存儲(chǔ)器和非易失性存儲(chǔ)器可以包括用于存儲(chǔ)控制程序的計(jì)算機(jī)可讀介質(zhì),該控制程序包括用于控制該計(jì)算機(jī)系統(tǒng)110的操作的可執(zhí)行指令。該非易失性存儲(chǔ)器可以包括形成數(shù)據(jù)庫(kù)的全閃存存儲(chǔ)陣列。編譯器120可以是編譯Java指令的Java編譯器,該Java指令是用于閃存永久存儲(chǔ)陣列而根據(jù)本發(fā)明定制的。該指令由計(jì)算機(jī)系統(tǒng)110執(zhí)行以創(chuàng)建Java運(yùn)行時(shí)環(huán)境122。Java編譯器將稱為全閃存Java編譯器(AFJC),并且Java運(yùn)行時(shí)環(huán)境將稱為全閃存Java運(yùn)行時(shí)環(huán)境(AFJRE)。

如將要詳細(xì)描述的,本發(fā)明提供數(shù)據(jù)庫(kù)架構(gòu)和永久數(shù)據(jù)模型,它們與傳統(tǒng)數(shù)據(jù)庫(kù)架構(gòu)和模型是非常不同的。傳統(tǒng)數(shù)據(jù)庫(kù)被按照表進(jìn)行組織。存儲(chǔ)和訪問這樣的傳統(tǒng)數(shù)據(jù)庫(kù)中的數(shù)據(jù)需要多個(gè)步驟,以在存儲(chǔ)器單元(memory locations)和各個(gè)頁面與存儲(chǔ)器緩存之間移動(dòng)數(shù)據(jù)對(duì)象。反之,根據(jù)本發(fā)明,提供新的永久數(shù)據(jù)模型,其中將數(shù)據(jù)對(duì)象直接存儲(chǔ)于永久存儲(chǔ)器中,并且在永久存儲(chǔ)器中直接對(duì)其管理。這不同于所謂的對(duì)象數(shù)據(jù)庫(kù),對(duì)象數(shù)據(jù)庫(kù)試圖通過將數(shù)據(jù)庫(kù)映射到不同的已知數(shù)據(jù)模型而使數(shù)據(jù)管理透明。將要被永久存儲(chǔ)的對(duì)象在創(chuàng)建時(shí)就被明確地限定和識(shí)別,并且可以明確地指明需要?jiǎng)h除的對(duì)象。另外,本發(fā)明提供事務(wù)管理模型,其中在單個(gè)事務(wù)中多個(gè)對(duì)象可以被自動(dòng)地修改。如將要描述的,為了實(shí)施需要的新的實(shí)時(shí)行為,本發(fā)明的AFJC具體化該新的和不同的Java編譯器功能,該功能根據(jù)本發(fā)明的永久對(duì)象和事務(wù)管理模型而定制。

當(dāng)基于提供給編譯器的指示而創(chuàng)建對(duì)象時(shí),AFJC(編譯器)120可以決定將哪些對(duì)象存儲(chǔ)在易失性存儲(chǔ)器中,以及將哪些對(duì)象存儲(chǔ)在永久閃速非易失性存儲(chǔ)器中。有很多不同的方法可以用于提供該功能。根據(jù)第一種方法,可以缺省將所有的對(duì)象存儲(chǔ)在非易失性存儲(chǔ)器116中。當(dāng)創(chuàng)建新的對(duì)象時(shí),可以將它們自動(dòng)存儲(chǔ)在閃存陣列中。該方法的優(yōu)點(diǎn)為,現(xiàn)有的應(yīng)用可以受益于AFJRE而不需要重新編譯。由于利用該方法,臨時(shí)對(duì)象和永久對(duì)象之間沒有區(qū)別,可以在AFJRE中創(chuàng)建用于清理不需要的對(duì)象的新的垃圾回收器(GC),其具有新的堆實(shí)現(xiàn)方式(heap implementation)存儲(chǔ)閃存陣列116中的對(duì)象。

根據(jù)第二種優(yōu)選的方法,提供指示給編譯器,決定將哪些對(duì)象存儲(chǔ)在非易失性存儲(chǔ)器中,這被包含在對(duì)象定義中??梢岳肂ean注釋指明哪些對(duì)象應(yīng)該存儲(chǔ)在閃存陣列中,以及哪些對(duì)象應(yīng)該存儲(chǔ)在易失性存儲(chǔ)器中??梢詫ean注釋應(yīng)用于類定義,它在使附加信息被包括進(jìn)來方面是有利的,該附件信息諸如如何保存對(duì)象或?qū)ο蟮念?,例如?/p>

@flash-storage

Public Class MyObject{

String name;

Date date;

}

另外,可以將應(yīng)用重新編譯,并且將bean注釋添加到程序中。該方法還影響AFJRE的其他方面。這些方面包括刪除對(duì)象和查找對(duì)象。

永久存儲(chǔ)器中的對(duì)象不會(huì)被自動(dòng)刪除。缺省地,未被引用的對(duì)象可能被垃圾回收器刪除。為了避免對(duì)需要對(duì)象的刪除,可以采用垃圾回收方法,其中被引用的對(duì)象會(huì)免于被刪除。另外,如果不能發(fā)現(xiàn)永久對(duì)象,就不能使用該對(duì)象,優(yōu)選地,本發(fā)明執(zhí)行索引和查詢方案。索引將提供對(duì)對(duì)象的至少一個(gè)引用,這可以防止其被刪除??蛇x地,可以利用Java命令諸如object.delete()和object.finalize()控制垃圾回收器將特定對(duì)象從閃存陣列中刪除。如將要描述的,查詢方法可以利用由索引定義創(chuàng)建的索引查找存儲(chǔ)陣列中的對(duì)象。

圖2和圖3繪示和對(duì)比了從存儲(chǔ)器中的數(shù)據(jù)結(jié)構(gòu)(圖2)中的傳統(tǒng)數(shù)據(jù)庫(kù)中檢索對(duì)象與訪問本發(fā)明(圖3)的AFDB中的永久對(duì)象的之間的區(qū)別。

圖2繪示了步驟的順序和伴隨的開銷(attendant overhead),以及發(fā)生在從存儲(chǔ)器中的數(shù)據(jù)結(jié)構(gòu)中的傳統(tǒng)數(shù)據(jù)庫(kù)存儲(chǔ)陣列中檢索對(duì)象的低效率。應(yīng)當(dāng)理解,低效率的程度將依賴于數(shù)據(jù)庫(kù)的實(shí)際實(shí)現(xiàn)。參考圖2,構(gòu)造函數(shù)可以在Java虛擬機(jī)(JVM)的棧212上創(chuàng)建引用,以從存儲(chǔ)陣列216訪問對(duì)象的數(shù)據(jù)頁214。數(shù)據(jù)庫(kù)客戶端218可以請(qǐng)求與來自數(shù)據(jù)庫(kù)服務(wù)器222的對(duì)象對(duì)應(yīng)的數(shù)據(jù)頁。該數(shù)據(jù)庫(kù)服務(wù)器操作系統(tǒng)224可以從存儲(chǔ)設(shè)備檢索數(shù)據(jù)頁214,并且將這些頁存儲(chǔ)在存儲(chǔ)陣列的塊緩存230中。然后可以將這些頁搬運(yùn)到操作系統(tǒng)224頁緩存和數(shù)據(jù)庫(kù)服務(wù)器222頁緩存中。Java虛擬機(jī)中的查詢引擎可以處理這些頁,并且創(chuàng)建結(jié)果集230,該結(jié)果集230被填充到該Java虛擬機(jī)的Java對(duì)象堆232中。

反之,根據(jù)本發(fā)明,如圖3所示,構(gòu)造函數(shù)可以在Java虛擬機(jī)(JVM)310的棧312上創(chuàng)建引用,以從全閃存陣列316訪問永久對(duì)象314。該JVM310可以直接訪問對(duì)象314而不需要大量和各種類型的翻譯操作(translation operation),這在圖2中的傳統(tǒng)數(shù)據(jù)庫(kù)中是需要。因此,該操作不像傳統(tǒng)數(shù)據(jù)庫(kù)中那樣,不需要多個(gè)翻譯或發(fā)生附帶的低效率。訪問對(duì)象時(shí),JVM310可以 使用或根據(jù)需要修改該對(duì)象。

Java提供用于在存儲(chǔ)器堆中查找對(duì)象的對(duì)象查詢語言(OQL)。本發(fā)明可以基于查詢定義利用該能力并結(jié)合索引系統(tǒng)定位全閃存陣列中的對(duì)象。本發(fā)明可以利用幾種方法定位對(duì)象。一種方式為全掃描整個(gè)閃存陣列并且測(cè)試所有對(duì)象。由于陣列中對(duì)象的數(shù)量可能很大,因此這種方法是低效的。因此,全掃描通常用于保守搜索(sparingly search)或優(yōu)選地只用于一次性搜索。并且,由于閃存陣列中沒有對(duì)象邊界,因此本發(fā)明可以創(chuàng)建構(gòu)造函數(shù)以用注冊(cè)表注冊(cè)陣列上的對(duì)象,該注冊(cè)表使用對(duì)象的開始位置和其比特?cái)?shù)量的長(zhǎng)度。然后,全掃描會(huì)掃描整個(gè)注冊(cè)表以定位正確的對(duì)象。

本發(fā)明使用的第二種優(yōu)選的并且更有效的方法為創(chuàng)建一個(gè)或多個(gè)專用索引結(jié)構(gòu),諸如B-trees或倒置索引,以使對(duì)象被更容易地定位??梢岳脤?duì)象定義上的Bean注釋識(shí)別對(duì)象屬性,可以利用該對(duì)象屬性創(chuàng)建該索引結(jié)構(gòu)??梢詫⒃撍饕Y(jié)構(gòu)存儲(chǔ)在存儲(chǔ)陣列數(shù)據(jù)庫(kù)中,并且將其注冊(cè)到注冊(cè)表中,從而可以查找到它們。單個(gè)bean定義可以保持多個(gè)索引,并且產(chǎn)生用于各個(gè)索引的索引管理的多個(gè)對(duì)應(yīng)的代碼塊。索引可以是單鍵、組合鍵或倒序索引,并且可以被同步地或異步地更新。單鍵索引可以定義在對(duì)象屬性層,而組合索引定義在對(duì)象層。圖4-6繪示了該方案的實(shí)施例。

參考圖4,索引定義可以被定義在Java bean代碼402中,并且被提供給本發(fā)明的全閃存編譯器404,該全閃存編譯器將讀取該注釋以創(chuàng)建索引管理字節(jié)碼406。該字節(jié)碼可以創(chuàng)建索引410、更新索引412、刪除索引414或執(zhí)行索引查找416。生成的碼可以維護(hù)關(guān)于碼源自哪個(gè)索引定義的信息,從而處理類定義和索引定義變化。因此,該索引管理字節(jié)碼可以存儲(chǔ)索引信息,該索引信息包括類名、類版本識(shí)別符和索引定義的組合。用于單鍵同步B-tree索引的bean注釋的例子為:

@flash-storage

Public Class MyObject{

int id;@flash-index(synchronous,btree)

String name;

Date date;

}

用于組合鍵同步索引的例子為:

@flash-storage

@flash-composite-index(synchronous,btree)[id,date]

Public Class MyObject{

int id;

String name;

Date date;

}

用于倒序異步索引的例子為:

@flash-storage

@flash-composite-

index(synchronous,

btree)[id,date]Public

Class MyObject{

int id;

String name;@flash-

index(asynchronous,

inverted)Date date;

}

索引定義的例子為:

″com.emc.ecd.MyObject″,123456,flash-composite-index(synchronous,btree)[id,date],IndexByteCode″com.emc.ecd.MyObject″,123456,flash-index(synchronous,btree)[id],IndexByteCode

類版本標(biāo)示符由Java運(yùn)行時(shí)基于類定義產(chǎn)生,并且是版本識(shí)別的(version aware)??梢詫⑵溆糜诳焖贆z測(cè)類在加載到AFJRE期間是否發(fā)生了變化。該AFJRE將創(chuàng)建索引結(jié)構(gòu)并在運(yùn)行時(shí)加載類時(shí)將該索引結(jié)構(gòu)注冊(cè)進(jìn)全閃存陣列。 該注冊(cè)過程只需要發(fā)生一次,并且被綁定到類版本識(shí)別符,通過該類版本識(shí)別符與索引注冊(cè)到一起。優(yōu)選地,在永久映射中的對(duì)象堆中管理索引結(jié)構(gòu)以快速定位索引結(jié)構(gòu)。圖5繪示了該過程以及產(chǎn)生的全閃存陣列中的索引結(jié)構(gòu)。

如圖5所示,Java虛擬機(jī)500可以包括對(duì)象堆502和索引堆504。該對(duì)象堆和索引堆可以管理全閃存陣列510中的永久索引結(jié)構(gòu)。該全閃存陣列可以具有用于存儲(chǔ)索引結(jié)構(gòu)的索引定義結(jié)構(gòu)512和514,分別用于索引以數(shù)據(jù)對(duì)象516和518為首的多個(gè)索引數(shù)據(jù)對(duì)象(IDOs)。該圖只繪示了兩個(gè)這樣的數(shù)據(jù)對(duì)象結(jié)構(gòu),但應(yīng)當(dāng)理解可以具有很多這樣的數(shù)據(jù)對(duì)象結(jié)構(gòu)。

本發(fā)明提供創(chuàng)建、更新和刪除對(duì)象以及他們的相關(guān)索引的過程。當(dāng)創(chuàng)建了對(duì)象時(shí),AFJRE可以確定是否具有與該對(duì)象類定義相關(guān)的索引。如果具有,則也應(yīng)當(dāng)為新數(shù)據(jù)更新該索引。AFJRE可以從索引堆中查找合適的索引定義、發(fā)現(xiàn)對(duì)索引定義的引用并且更新永久索引數(shù)據(jù)結(jié)構(gòu)。當(dāng)修改了對(duì)象時(shí),AFJRE將跟蹤bean中的變化,并且確定是否具有需要更新的相關(guān)索引。它將從索引堆中查找合適的索引定義、發(fā)現(xiàn)對(duì)索引數(shù)據(jù)對(duì)象的引用并且更新永久索引數(shù)據(jù)結(jié)構(gòu)。當(dāng)刪除對(duì)象時(shí),AFJRE將確定需要更新的相關(guān)索引,并且將被刪除對(duì)象的索引條目刪除。可以利用查找方法直接檢測(cè)到這些索引。AFJRE可以查找索引堆中的索引定義、加載索引字節(jié)碼并且執(zhí)行用于這些索引的查找方法。

圖6繪示了根據(jù)本發(fā)明的用于創(chuàng)建、更新和刪除對(duì)象的過程的例子。類加載器602將在604從字節(jié)碼獲取索引定義,并且在606從索引堆獲取索引定義。在608該過程將判斷是否具有任何新的索引定義,并且在610如果發(fā)現(xiàn)新的索引定義,將在612鎖定該索引堆,在614將注冊(cè)該新的索引定義,并且在616解鎖該索引堆。在620該過程將查找被改變的索引定義。在622,如果有任何索引定義已改變了,則在624將該索引堆再次鎖定。在626可以放棄該索引,并且在628注冊(cè)被改變的索引定義。在630再次將索引堆解鎖。在632可以注冊(cè)用于重索引的后臺(tái)工作(background job)。

本發(fā)明采用事務(wù)模型用于管理對(duì)象,該事務(wù)模型不同于一般Java運(yùn)行時(shí)環(huán) 境中的事務(wù)模型,在一般Java運(yùn)行時(shí)環(huán)境中不需要事務(wù)管理,因?yàn)榇鎯?chǔ)器內(nèi)更新總是成功的或者產(chǎn)生異常。然而,本發(fā)明的AFJRE是不同的,并且采用了不同的事務(wù)模型。本發(fā)明提供兩種不同的模型,分別用于隱性事務(wù)和顯性事務(wù)。

如果AFJRE沒有檢測(cè)到顯性事務(wù)內(nèi)容,那么它會(huì)采用隱性模型,在隱性模型中bean上的域更新是原子的(atomic)。相同的或不同的bean上的多個(gè)更新不能保證事務(wù)一致性。這意味著,例如這樣的操作:

{

object.id=123

}

將是閃存陣列上的原子操作,但是操作:

{

object.id=123

object.name=″foo″

}

將不是原子的,并且在兩個(gè)更新之間可以被中斷,從而只有第一個(gè)更新是永久的。

在顯式事務(wù)模型中,事務(wù)是顯示地執(zhí)行的,例如:

{

AFTransaction.begin()

object.id=123

object.name=″foo″

AFTransaction.commit()

}

Java堆是存儲(chǔ)器單元的集合,其中由程序根據(jù)需要分配和釋放動(dòng)態(tài)程序數(shù)據(jù)。Java虛擬機(jī)的堆存儲(chǔ)由運(yùn)行的Java應(yīng)用創(chuàng)建的所有對(duì)象。根據(jù)本發(fā)明的AFDB Java堆構(gòu)造以實(shí)現(xiàn)用于需要快速定位的對(duì)象的瞬時(shí)數(shù)據(jù)(instance data),并且在方法區(qū)中提供對(duì)象的類數(shù)據(jù)的訪問,該對(duì)象的類數(shù)據(jù)被給予對(duì)對(duì)象的引用。優(yōu)選地,本發(fā)明具有利用AFDB的單個(gè)堆,并且優(yōu)選地,在具有 直接指針引用的堆的頂端實(shí)施Java方法區(qū)。當(dāng)虛擬機(jī)需要用于新加載類的存儲(chǔ)器時(shí),其可以從對(duì)象在的相同的AFDB堆占用存儲(chǔ)器??梢岳貌煌姆椒z測(cè)對(duì)象并回收存儲(chǔ)器空間。例如,可以刪除未被引用的對(duì)象。垃圾回收器釋放未被引用的對(duì)象所占據(jù)的存儲(chǔ)器,也可以用于查找并釋放(卸載)未被引用的類??梢栽谝资源鎯?chǔ)器中棧的內(nèi)部管理對(duì)象引用,并且對(duì)象引用可以指向AFDB堆中的對(duì)象。本發(fā)明可以查詢AFDB堆以基于指針引用檢索對(duì)象。

為了釋放存儲(chǔ)器,本發(fā)明還提供用于永久數(shù)據(jù)的不同的垃圾回收方案。永久數(shù)據(jù)上的垃圾回收只有在刪除對(duì)象操作的情況下是相關(guān)的。例如,刪除操作可以是啟動(dòng)使用的對(duì)象管理器接口,諸如:ObjectManager.delete(Object object)。在大多數(shù)情況下,刪除操作本質(zhì)上是事務(wù)性的。然而,在有些情形中這是不可能。例如,如果其他并發(fā)進(jìn)程或應(yīng)用使用了對(duì)象,那么就不希望刪除該對(duì)象。然而,在永久隊(duì)列中可以將其標(biāo)記為刪除,并且后臺(tái)進(jìn)程可以異步移除該對(duì)象。另外,一些對(duì)象可以被其它對(duì)象引用,對(duì)象刪除將打斷引用完整性。在一些情況中,本發(fā)明可以采用強(qiáng)制刪除來刪除對(duì)象,而不管對(duì)該對(duì)象的引用的存在。

圖7A-C繪示了利用垃圾回收器刪除對(duì)象以及刪除后壓縮存儲(chǔ)器以釋放存儲(chǔ)器的例子。參考圖7A,假設(shè)AFDB中的永久存儲(chǔ)器700的塊存儲(chǔ)了六個(gè)對(duì)象O1-O6,并且在702中將對(duì)象O5標(biāo)記為刪除。如圖7B所示,垃圾回收(GC)之后,如虛線指示的702中的對(duì)象O5被刪除,并且如虛線所指示的,之前由對(duì)象O5占據(jù)的永久存儲(chǔ)器700中的單元704現(xiàn)在是空的。繼刪除對(duì)象O5之后,可以執(zhí)行存儲(chǔ)器壓縮操作以壓縮存儲(chǔ)器700。如圖7C所示,710中,壓縮可以移動(dòng)對(duì)象06至存儲(chǔ)器單元704,該存儲(chǔ)器單元704之前由被刪除的對(duì)象O5占據(jù),從而釋放存儲(chǔ)器單元712,該存儲(chǔ)器單元712原先由對(duì)象O6占據(jù)。如所示的,這會(huì)將對(duì)象O1-O4和O6壓縮到存儲(chǔ)器700中連續(xù)的單元。

圖8A-C繪示了將對(duì)象指示為刪除的不同方式。一種刪除對(duì)象的方式為通過中斷引用。圖8A-B對(duì)此進(jìn)行了繪示。參考圖8A,在802中,對(duì)象O5可以 引用804中的對(duì)象O2和806中的對(duì)象O3,如由810和812指示的。如圖8B所示的,分別中斷對(duì)對(duì)象O2和O3的引用810和812之后,802中的對(duì)象O5不再有引用,并且可以被垃圾回收進(jìn)程刪除。

圖8C繪示了指示對(duì)象刪除的另一種方案。如所示的,820中的對(duì)象O5可以引用一對(duì)對(duì)象即822中的對(duì)象O2和832中的對(duì)象O3,如826和828所指示的。在下一個(gè)垃圾回收中可以將肯定地將O5標(biāo)記為刪除,并且如830和832所示的可以將其此分別傳遞給對(duì)象O2和O3。在下一個(gè)垃圾回收中,從而可以將對(duì)象O5肯定地刪除。如果需要,可以執(zhí)行以上所述的存儲(chǔ)器壓縮。

從前述可以理解,本發(fā)明利用永久非易失性閃速存儲(chǔ)器提供用戶數(shù)據(jù)庫(kù)的新的并且不同的以存儲(chǔ)器為中心的架構(gòu),其利用了閃速存儲(chǔ)器的獨(dú)特特點(diǎn)和效率,同時(shí)解決了對(duì)靈活性、易于數(shù)據(jù)管理和性能的要求,這對(duì)于在事務(wù)性環(huán)境中采用的數(shù)據(jù)庫(kù)是很重要的。因此,基于該架構(gòu)的全閃存數(shù)據(jù)庫(kù)提供了極為簡(jiǎn)單和更有效的數(shù)據(jù)庫(kù)存儲(chǔ)方法。

雖然以上所述引用了本發(fā)明的特定實(shí)施例,但是應(yīng)當(dāng)理解在不背離本發(fā)明的原則的情況下可以修改這些實(shí)施例,本發(fā)明的范圍由隨附的權(quán)利要求限定。

當(dāng)前第1頁1 2 3 
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1
岳普湖县| 丘北县| 石河子市| 基隆市| 维西| 普格县| 通化县| 修水县| 宜良县| 舒兰市| 虹口区| 新巴尔虎左旗| 陆良县| 太仓市| 大庆市| 留坝县| 苍梧县| 雷州市| 喀喇沁旗| 和龙市| 高要市| 靖江市| 错那县| 兴隆县| 长海县| 大竹县| 灯塔市| 建宁县| 虹口区| 灵武市| 彩票| 德阳市| 进贤县| 泾源县| 含山县| 札达县| 吴忠市| 山西省| 怀集县| 蒙自县| 阳信县|