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

用于數(shù)據(jù)庫(kù)存儲(chǔ)中的對(duì)象持久存儲(chǔ)的系統(tǒng)和方法

文檔序號(hào):6476146閱讀:293來(lái)源:國(guó)知局

專利名稱::用于數(shù)據(jù)庫(kù)存儲(chǔ)中的對(duì)象持久存儲(chǔ)的系統(tǒng)和方法
技術(shù)領(lǐng)域
:本發(fā)明涉及計(jì)算機(jī)系統(tǒng)中的數(shù)據(jù)存儲(chǔ),尤其涉及用于在數(shù)據(jù)庫(kù)存儲(chǔ)中持久存儲(chǔ)(persist)對(duì)象的系統(tǒng)和方法。背景MICROSOFTSQLSERVER是一種綜合性數(shù)據(jù)庫(kù)管理平臺(tái),它提供了廣泛的管理和開發(fā)工具、強(qiáng)大的提取、轉(zhuǎn)換及加載(ETL)工具、商業(yè)智能和分析服務(wù)以及其他性能。最近實(shí)現(xiàn)了對(duì)SQLSERVER的兩種改進(jìn)。首先,MicrosoftWindows.NET框架公共語(yǔ)言運(yùn)行庫(kù)(CLR)最近被集成到SQLSERVER數(shù)據(jù)庫(kù)中,其次,現(xiàn)在可用CLR環(huán)境中的受管代碼創(chuàng)建被稱為用戶定義類型(UDT)的新對(duì)象,并將其持久存儲(chǔ)在數(shù)據(jù)庫(kù)存儲(chǔ)中。CLR是Microsoft.NET框架的中心內(nèi)容,它為所有.NET代碼提供執(zhí)行環(huán)境。因而,在CLR內(nèi)運(yùn)行的代碼被稱為“受管代碼”。CLR提供程序執(zhí)行所需的各種函數(shù)及服務(wù),包括即時(shí)(JIT)編譯、分配和管理存儲(chǔ)器、強(qiáng)制類型安全、異常處理、線程管理和安全。如今,在首次調(diào)用.NET例程時(shí),CLR由SQLSERVER加載。在SQLSERVER早先的版本中,數(shù)據(jù)庫(kù)程序員在編寫服務(wù)器方代碼時(shí)僅限于使用Transact-SQL。Transact-SQL是由國(guó)際標(biāo)準(zhǔn)組織(ISO)和美國(guó)國(guó)家標(biāo)準(zhǔn)化組織(ANSI)定義的結(jié)構(gòu)化查詢語(yǔ)言的擴(kuò)展。使用Transact-SQL,數(shù)據(jù)庫(kù)開發(fā)者能夠創(chuàng)建、修改及刪除數(shù)據(jù)庫(kù)和表,也能夠插入、檢索、修改及刪除儲(chǔ)存在數(shù)據(jù)庫(kù)內(nèi)的數(shù)據(jù)。Transact-SQL是專為直接結(jié)構(gòu)性數(shù)據(jù)訪問(wèn)和操縱而設(shè)計(jì)的。盡管Transact-SQL擅長(zhǎng)結(jié)構(gòu)性數(shù)據(jù)訪問(wèn)和管理,它并不是象VisualBasic.NET和C#那樣成熟的編程語(yǔ)言。例如,Transact-SQL不支持?jǐn)?shù)組、集合、對(duì)每個(gè)循環(huán)、位移位或類。隨著CLR被集成到SQLSERVER數(shù)據(jù)庫(kù)中,數(shù)據(jù)庫(kù)開發(fā)者現(xiàn)在能夠完成單用Transact-SQL不可能或很難完成的任務(wù)。VisualBasic.NET和C#都是提供對(duì)數(shù)組、結(jié)構(gòu)化異常處理和匯編的完全支持的現(xiàn)代編程語(yǔ)言。開發(fā)者可充分利用CLR集成來(lái)編寫具有更復(fù)雜邏輯且更合適使用例如VisualBasic.NET和C#語(yǔ)言的計(jì)算任務(wù)代碼。除了CLR集成之外,SQLSERVER還增加了對(duì)用戶定義類型(UDT)-一種使得開發(fā)者能夠擴(kuò)展數(shù)據(jù)庫(kù)的標(biāo)量類型系統(tǒng)的新的機(jī)制的支持。從應(yīng)用程序體系結(jié)構(gòu)的角度來(lái)說(shuō),UDT提供了兩種關(guān)鍵的益處它們提供了內(nèi)部狀態(tài)和外部行為之間的堅(jiān)固的封裝(在客戶機(jī)和服務(wù)器兩者內(nèi)),并且它們提供了與其它相關(guān)服務(wù)器特性的深度集成。一旦定義了UDT,它就可以用于系統(tǒng)類型能夠在SQLSERVER中使用的所有環(huán)境中使用,包括在列定義、變量、參數(shù)、函數(shù)結(jié)果、游標(biāo)、觸發(fā)器和復(fù)制(replication)。在數(shù)據(jù)庫(kù)服務(wù)器上定義UDT的過(guò)程如下完成a)在受管代碼中創(chuàng)建類,所述的類符合UDT創(chuàng)建規(guī)則;b)使用CREATEASSEMBLY語(yǔ)句將包含該UDT的程序集(Assembly)裝入服務(wù)器上的數(shù)據(jù)庫(kù)中;以及c)使用CREATETYPE語(yǔ)句在數(shù)據(jù)庫(kù)中創(chuàng)建一個(gè)揭示所述受管代碼UDT的類型。此時(shí),該UDT可以用于表定義中。當(dāng)在受管代碼中創(chuàng)建UDT定義時(shí),類型必須滿足下面的要求a)它必須被標(biāo)記為是Serializable(可序列化);b)它必須被以SqlUserDefinedTypeAttribute(SQL用戶定義類型屬性)修飾;c)通過(guò)實(shí)現(xiàn)Inullable(不可為空)接口,該類型應(yīng)該明白NULL;d)該類型必須具有不帶參數(shù)的公有構(gòu)造函數(shù);以及e)通過(guò)實(shí)現(xiàn)以下的方法,該類型應(yīng)當(dāng)支持轉(zhuǎn)換到串和從串轉(zhuǎn)換1.PublicStringToString();以及2.PublicShared<type>Parse(SqlStrings)。圖1是根據(jù)上面所述的過(guò)程定義UDT的一個(gè)類的例子。根據(jù)上面所述的步驟,這個(gè)類然后被編譯成動(dòng)態(tài)鏈接庫(kù)(dll)。然后使用下面的T-SQL腳本命令來(lái)創(chuàng)建包含所編譯的類的程序集createassemblytestfrom‘c:\test.dll’go然后使用下面的T-SQL腳本命令在服務(wù)器上創(chuàng)建UDTcreatetypeBaseItemexternalname[test]:[BaseItem]go一旦在服務(wù)器上創(chuàng)建了UDT,一個(gè)表(例如“MyTable”)可以被如下創(chuàng)建,將該表的一個(gè)屬性定義為UDT類型createtableMyTable(ItemBaseItem,ItemIdasitem::ID)go新的項(xiàng)目可以被如下那樣添加到該表內(nèi)declare@IBaseItemset@I=convert(BaseItem,”)insertintoMyTablevalues(@i)go然后該UDT表示可以用于諸如SELECTItem.NameFROMMyTable的查詢中。隨著CLR集成到SQLSERVER中,以及從受管代碼中的類定義來(lái)定義UDT的能力,應(yīng)用程序現(xiàn)在可以實(shí)例化由所述受管代碼類所定義的類型的對(duì)象,并且將這些對(duì)象作為所述UDT的實(shí)例持久存儲(chǔ)在關(guān)系型數(shù)據(jù)庫(kù)存儲(chǔ)中。此外,定義所述UDT的類還可以包括在該類型的對(duì)象上實(shí)現(xiàn)特定行為的方法。因此應(yīng)用程序可以實(shí)例化被定義為UDT的類型的對(duì)象,開且可以在它們之上調(diào)用受管的行為。當(dāng)在CLR中實(shí)例化被定義為UDT的類的對(duì)象時(shí),該對(duì)象可以通過(guò)對(duì)象序列化過(guò)程被持久存儲(chǔ)在數(shù)據(jù)庫(kù)存儲(chǔ)內(nèi),其中所述類的變量的值被傳遞到物理存儲(chǔ)(例如,硬盤)。圖2示出了存儲(chǔ)器中的一個(gè)對(duì)象到它的磁盤上的持久存儲(chǔ)形式的序列化。該對(duì)象可以以圖3中示出的格式的傳統(tǒng)關(guān)系型數(shù)據(jù)庫(kù)表持久存儲(chǔ)在數(shù)據(jù)庫(kù)存儲(chǔ)中。如圖所示,該表包含被指定為UDT的一列。所指定的UDT的持久存儲(chǔ)對(duì)象的序列化的值占據(jù)該UDT列的一個(gè)單元。再次參考圖2,當(dāng)應(yīng)用程序生成包括引用已經(jīng)被持久存儲(chǔ)在數(shù)據(jù)庫(kù)存儲(chǔ)內(nèi)的UDT對(duì)象的受管行為(例如,返回所述UDT對(duì)象的一個(gè)字段的值的行為)的謂詞或表達(dá)式的查詢時(shí),該持久存儲(chǔ)的對(duì)象必須被反序列化(某些時(shí)候也被稱為“水合(hydrating)”),并且CLR必須為整個(gè)對(duì)象分配存儲(chǔ)器以便接收其被存儲(chǔ)的值。然后CLR必須調(diào)用實(shí)現(xiàn)該應(yīng)用程序所希望的行為的實(shí)際方法。不幸的是,與在運(yùn)行時(shí)分配存儲(chǔ)器以便存儲(chǔ)完整的對(duì)象、反序列化并填充該對(duì)象的所有部分、以及調(diào)用實(shí)現(xiàn)所請(qǐng)求的行為的方法相關(guān)聯(lián)的處理開銷會(huì)是繁重的。因此,需要提供被持久存儲(chǔ)在數(shù)據(jù)庫(kù)存儲(chǔ)中的對(duì)象的更有效的存儲(chǔ)和檢索的系統(tǒng)和方法。本發(fā)明滿足這種需要。概述本發(fā)明針對(duì)一種提供用于數(shù)據(jù)庫(kù)存儲(chǔ)中的用戶定義類型(UDT)的新的持久存儲(chǔ)格式的系統(tǒng)和方法,所述新的持久存儲(chǔ)格式能夠使得關(guān)于UDT的結(jié)構(gòu)的信息被傳遞到底層數(shù)據(jù)存儲(chǔ)。這種信息使得能夠進(jìn)行多種存儲(chǔ)優(yōu)化,包括對(duì)類型的成員的直接結(jié)構(gòu)化訪問(wèn)。特別地,本發(fā)明能夠在類型實(shí)現(xiàn)器和數(shù)據(jù)存儲(chǔ)之間進(jìn)行元數(shù)據(jù)交換。該存儲(chǔ)使用元數(shù)據(jù)來(lái)確定用于該類型的實(shí)例的存儲(chǔ)布局。使用這種信息,該存儲(chǔ)能夠檢測(cè)可以被優(yōu)化的訪問(wèn)模式,以便直接在該存儲(chǔ)表示上進(jìn)行操作而不用進(jìn)行對(duì)象的水合(反序列化)。此外,通過(guò)了解僅能進(jìn)行結(jié)構(gòu)化訪問(wèn)的操作,該系統(tǒng)可以構(gòu)件數(shù)據(jù)分布統(tǒng)計(jì)和各個(gè)成員上的索引,而不需所計(jì)算的值的冗余的持久存儲(chǔ)。通過(guò)下面對(duì)本發(fā)明以及附圖的詳細(xì)說(shuō)明,本發(fā)明的其它特征和優(yōu)點(diǎn)將變得顯而易見。附圖簡(jiǎn)要說(shuō)明當(dāng)結(jié)合所附的附圖進(jìn)行閱讀時(shí),將會(huì)更好地理解上面的概述以及下面對(duì)本發(fā)明的詳細(xì)描述。出于說(shuō)明本發(fā)明的目的,在附圖中示出了本發(fā)明的各個(gè)方面的示例性實(shí)施例;然而,本發(fā)明不限于所公開的特定方法和手段。在附圖中圖1是示出了用于用戶定義類型的受管代碼類定義的示例性代碼段;圖2是示出了已經(jīng)在受管代碼中實(shí)例化的用戶定義類型的實(shí)例的序列化和反序列化的框圖;圖3是示出了其中持久存儲(chǔ)用戶定義類型的對(duì)象的數(shù)據(jù)庫(kù)表的示意圖;圖4A是示出了本發(fā)明的方法的一個(gè)方面的一個(gè)實(shí)施例的流程圖;圖4B是示出了本發(fā)明的方法的另一個(gè)方面的一個(gè)實(shí)施例的流程圖;圖5是示出了已經(jīng)根據(jù)本發(fā)明注釋的用戶定義類型的受管代碼類定義的示例性代碼段;圖6是其中可實(shí)現(xiàn)本發(fā)明的系統(tǒng)的方框圖,并且示出了根據(jù)本發(fā)明的方法對(duì)UDT的持久存儲(chǔ)對(duì)象的結(jié)構(gòu)化訪問(wèn)和返回值;圖7是表示具有可在其中實(shí)現(xiàn)本發(fā)明的多個(gè)計(jì)算設(shè)備的示例性網(wǎng)絡(luò)環(huán)境的框圖;以及圖8是表示其中可實(shí)現(xiàn)本發(fā)明的示例性計(jì)算設(shè)備的框圖。發(fā)明的詳細(xì)描述為了滿足法定要求,以細(xì)節(jié)描述了本發(fā)明的主題。然而,本描述本身并不旨在對(duì)這個(gè)專利的范圍進(jìn)行限制。相反,發(fā)明人構(gòu)想,結(jié)合其它當(dāng)前的或未來(lái)的技術(shù),所提出的主題也可以用其它的方式來(lái)表達(dá),以便包括不同的步驟或與本文檔中所描述的相類似的元素。此外,雖然此處可以使用術(shù)語(yǔ)“步驟”暗示所采用的方法的不同的方面,然而除非明確地說(shuō)明了各個(gè)步驟的順序,否則該術(shù)語(yǔ)不應(yīng)被解釋為暗示著此處公開的各個(gè)步驟之中或之間的任何特定順序。如上所述,本發(fā)明針對(duì)一種提供數(shù)據(jù)庫(kù)存儲(chǔ)中的用戶定義類型(UDT)的新的持久存儲(chǔ)格式的系統(tǒng)和方法,該新的持久存儲(chǔ)格式能夠使得關(guān)于UDT的結(jié)構(gòu)的信息被傳遞到底層數(shù)據(jù)存儲(chǔ)。這種信息使得能夠進(jìn)行多種存儲(chǔ)優(yōu)化,包括對(duì)類型的成員的直接結(jié)構(gòu)化訪問(wèn)。特別地,本發(fā)明能夠在類型實(shí)現(xiàn)器和數(shù)據(jù)存儲(chǔ)之間交換元數(shù)據(jù)。該存儲(chǔ)使用元數(shù)據(jù)來(lái)確定用于類型的實(shí)例的存儲(chǔ)布局。有了這種信息,存儲(chǔ)能夠檢測(cè)可以被優(yōu)化的訪問(wèn)模式以便在存儲(chǔ)表示上進(jìn)行直接操作,而不需進(jìn)行對(duì)象的水合(反序列化)。此外,通過(guò)了解僅可進(jìn)行結(jié)構(gòu)化訪問(wèn)的操作,該系統(tǒng)能夠構(gòu)件數(shù)據(jù)分布統(tǒng)計(jì)和關(guān)于各個(gè)成員的索引,而不需所計(jì)算值的冗余的持久存儲(chǔ)。術(shù)語(yǔ)“直接結(jié)構(gòu)化訪問(wèn)”是指數(shù)據(jù)庫(kù)存儲(chǔ)通過(guò)直接訪問(wèn)數(shù)據(jù)存儲(chǔ)的表中的對(duì)象的持久存儲(chǔ)值來(lái)執(zhí)行對(duì)于對(duì)象的查詢,而不必進(jìn)行對(duì)象的水合(反序列化)的能力。圖4A是示出了本發(fā)明的方法的一個(gè)實(shí)施例的流程圖。如所示出的,該方法在步驟400以用戶定義類型的定義開始。對(duì)于大多數(shù)UDT,類型使用(例如)諸如VisualBasic.NET或C#等高級(jí)編程語(yǔ)言被定義為受管代碼中的一個(gè)CLR類。然而根據(jù)本發(fā)明,為了將本發(fā)明的新的持久存儲(chǔ)格式應(yīng)用于這個(gè)類定義,在步驟402對(duì)類定義進(jìn)行了注釋,以便提供描述該UDT的存儲(chǔ)布局的元數(shù)據(jù)。較佳地,該元數(shù)據(jù)描述了類型的字段(field)的存儲(chǔ)方面(facet),諸如大小、精度、數(shù)值范圍等等,并且表示了類型的每個(gè)行為的等效結(jié)構(gòu)化訪問(wèn)路徑。圖5是一個(gè)示例性代碼清單,其中注釋了根據(jù)本發(fā)明在圖1所示的CLR類。在本實(shí)施例中,該注釋有三個(gè)方面。首先,該類被注釋為將UDT標(biāo)識(shí)為應(yīng)用本發(fā)明的新持久存儲(chǔ)格式的UDT。在本實(shí)施例中,如圖5的示例性類定義的第2行所示,這是通過(guò)向類定義的[SqlUserDefinedType()]屬性添加參數(shù)“Format.Strutred”來(lái)實(shí)現(xiàn)的。這為數(shù)據(jù)存儲(chǔ)將UDT標(biāo)識(shí)為應(yīng)用本發(fā)明的持久存儲(chǔ)格式的UDT。第二,類的每個(gè)字段用控制該類型的存儲(chǔ)方面的存儲(chǔ)屬性來(lái)注釋,存儲(chǔ)屬性諸如大小、精度、數(shù)值范圍等。在本實(shí)施例中,這是通過(guò)用名為SqlUdtField()的自定義存儲(chǔ)屬性注釋每個(gè)字段來(lái)實(shí)現(xiàn)的。這個(gè)屬性用附加的存儲(chǔ)偽指令注釋字段。當(dāng)對(duì)象被序列化到磁盤上時(shí),這些偽指令被實(shí)施。在本實(shí)施例中,SqlUdtField()自定義屬性的性質(zhì)(即,可以被發(fā)出的偽指令)如下然而,應(yīng)當(dāng)理解,本發(fā)明決不是限于示出的屬性。相反,在其它的實(shí)施例中,可以用該屬性指定附加的或其它的屬性。在本實(shí)施例中,在Format.StrcturedUDT中允許下面的字段類型SqlBoolean、SqlByte、SqlInt16、SqlInt32、SqlInt64、SqlSingle、SqlDouble、SqlDateTime、SqlMoney、SqlGuid、SqlDecimal、SqlString、SqlBinary、SqlXmlReader、SqlByte、SqlChar、SqlUtcDateTime、SqlDate、SqlTime和嵌入的UDT。當(dāng)然,在其它實(shí)施例中,這些字段類型中的某些可以不被允許,并且可以允許其它的字段類型。下面的表反映了特定字段類型的各個(gè)屬性的有效值矩陣?!癥”意味著該屬性有效,“N”意味著該屬性無(wú)效,“R”意味著該屬性是被要求的。如果該屬性是無(wú)效的,則如果沒有為該屬性指定默認(rèn)值,則類型注冊(cè)將報(bào)告一個(gè)錯(cuò)誤。在其它實(shí)施例中,這些限制和約束可以不同。參考圖5的示例性代碼清單,在第5、8、37和49行添加了SqlUdtField()自定義屬性,以便注釋示例性UDT類定義的相應(yīng)字段。作為類定義注釋的第三方面,在CLR類中定義的每個(gè)受管行為(例如,可以在該UDT對(duì)象上被調(diào)用以便返回一個(gè)字段的值的方法)用指出該受管行為的等效結(jié)構(gòu)化訪問(wèn)路徑的屬性來(lái)注釋。在本實(shí)施例中,用于這個(gè)目的的自定義屬性名為SqlUdtProperty(),并且數(shù)據(jù)庫(kù)服務(wù)器(例如,SQLSERVER)假設(shè)以這種自定義屬性注釋的性質(zhì)的實(shí)現(xiàn)將作為屬性定義的一部分委派給指定的字段。這允許服務(wù)器結(jié)構(gòu)化地優(yōu)化對(duì)屬性的訪問(wèn)而不用創(chuàng)建實(shí)例并且調(diào)用其上的行為。SqlUdtProperty()自定義屬性的性質(zhì)如下SqlUdtProperty的存在表示該屬性的主體可以被忽視,并且該字段的名稱用作結(jié)構(gòu)化訪問(wèn)路徑。在本實(shí)施例中,屬性取值器(accessor)僅是可以被結(jié)構(gòu)化地訪問(wèn)的行為。然而,在其它實(shí)施例中,其它類型的方法可以進(jìn)行結(jié)構(gòu)化訪問(wèn)。參考圖5的示例性代碼清單,在行11和24添加了SqlUdtProperty()自定義屬性以便注釋該類的相應(yīng)受管行為。再次參考圖4A,在步驟404,在數(shù)據(jù)庫(kù)服務(wù)器上創(chuàng)建由UDT作者定義的UDT,并且在類定義注釋中反映出的元數(shù)據(jù)被導(dǎo)入到數(shù)據(jù)庫(kù)存儲(chǔ)中,數(shù)據(jù)庫(kù)存儲(chǔ)使用該元數(shù)據(jù)來(lái)確定用于該類型的實(shí)例的存儲(chǔ)布局。特別地,SqlUdtProperty屬性與給定字段的實(shí)際類型相結(jié)合,用于控制該字段的持久存儲(chǔ)值的存儲(chǔ)布局。例如,如果該屬性指出一個(gè)字段可為空,則處理存儲(chǔ)的數(shù)據(jù)庫(kù)系統(tǒng)組件可以在用于為這個(gè)字段存儲(chǔ)空值的區(qū)域內(nèi)保留一個(gè)比特。作為另一個(gè)例子,如果字段是一個(gè)大小變化的類型(例如串),則該屬性可以指出該字段實(shí)際上具有固定的大小。這個(gè)信息還可以被數(shù)據(jù)庫(kù)系統(tǒng)用于通過(guò)將字段存儲(chǔ)在值的固定大小部分內(nèi)來(lái)優(yōu)化對(duì)該字段的訪問(wèn)。對(duì)于SqlUdtProperty屬性的方面如何影響存儲(chǔ)布局的細(xì)節(jié)取決于數(shù)據(jù)庫(kù)系統(tǒng)的特定存儲(chǔ)布局選擇。因此應(yīng)當(dāng)理解,上面的討論僅提供了這種屬性可以如何控制UDT的實(shí)例的存儲(chǔ)布局的兩個(gè)例子;本發(fā)明決不限于這些例子。在本實(shí)施例中,通過(guò)(1)將定義UDT的CLR類文件編譯成動(dòng)態(tài)鏈接庫(kù)(.dll),(2)創(chuàng)建包含該UDT的程序集,并且向存儲(chǔ)注冊(cè)該程序集,并且然后(3)在受管類型上創(chuàng)建UDT,來(lái)執(zhí)行該方法的步驟404。作為步驟(3)的一部分,該類型的存儲(chǔ)方面被確認(rèn),并且在對(duì)CLR類定義的注釋中反映出的元數(shù)據(jù)被導(dǎo)入到描述該類型的結(jié)構(gòu)的數(shù)據(jù)庫(kù)系統(tǒng)目錄中。在本實(shí)施例中,可以使用如下的T-SQL腳本命令來(lái)執(zhí)行這些步驟--createtheassemablycreateassemblytestfrom‘c:\test.dll’go--createtheUDTcreatetypeBaseItemexternalname[test]:[BaseItem]go然后,該UDT的實(shí)例可以在受管代碼中被實(shí)例化,并且如同任意的UDT那樣,這些對(duì)象可以被持久存儲(chǔ)在數(shù)據(jù)庫(kù)存儲(chǔ)的表中。應(yīng)當(dāng)理解,在其它的實(shí)施例中,尤其是在使用其它數(shù)據(jù)庫(kù)服務(wù)器而不是SQLSERVER的實(shí)施例中,UDT如何被注冊(cè)并且如何與數(shù)據(jù)庫(kù)存儲(chǔ)交換元數(shù)據(jù)信息的細(xì)節(jié)可以是不同的。圖4B是示出了訪問(wèn)已應(yīng)用本發(fā)明的新持久存儲(chǔ)格式的UDT,例如用上述“Format.Structured”屬性注釋的UDT的值的方法的流程圖。根據(jù)本發(fā)明的方法,如步驟406中所示,數(shù)據(jù)庫(kù)服務(wù)器接收包括引用了被持久存儲(chǔ)在數(shù)據(jù)庫(kù)存儲(chǔ)中的已應(yīng)用本發(fā)明的對(duì)象的受管行為的謂詞或表達(dá)式的查詢。例如,假設(shè)已經(jīng)創(chuàng)建了名為“Person”的Format.StructuredUDT,并且它包括被稱為“Name”的SqlString類型的字段,該字段已經(jīng)如上所述用SqlUdtField()屬性正確地注釋了。還假設(shè)Person類型具有一受管行為,它返回該類型的一個(gè)實(shí)例的“Name”字段的值,并且該行為已經(jīng)用SqlUdtProperty()屬性正確地注釋了。數(shù)據(jù)庫(kù)服務(wù)器可以接收對(duì)于Person對(duì)象的如下的查詢SELECTPerson.NameFROMT其中T是包含被稱為Person的UDT列的表。如上面在背景部分中說(shuō)明的,在SQLSERVER的情況下,對(duì)于未應(yīng)用本發(fā)明的新持久存儲(chǔ)格式的UDT而言,該查詢將被如下處理。在查詢編譯時(shí),檢查該UDT的匯編元數(shù)據(jù),以便確定Name是該類型上的一個(gè)有效的屬性。然后匆忙地(onthefly)創(chuàng)建一個(gè)助手函數(shù),以便調(diào)用Person對(duì)象的反序列化的實(shí)例上的Name屬性。通過(guò)也是匆忙生成的類型專用反序列化器來(lái)實(shí)現(xiàn)反序列化。如上所述,反序列化的處理涉及使用盤上表示的內(nèi)容以便填充新的受管對(duì)象的內(nèi)部。在內(nèi)部,查詢SELECTPerson.NameFROMT被轉(zhuǎn)換為SELECTdeserializeInto(newperson(),personDatum)->invokeFunction(Name)FROMT所生成的所有新代碼被封裝在函數(shù)InvokeUdfExternal中,該函數(shù)在運(yùn)行時(shí)用于求解這個(gè)表達(dá)式的值。然而,根據(jù)本發(fā)明,如步驟408所示,該查詢被不同地處理。特別地,基于存儲(chǔ)在數(shù)據(jù)庫(kù)的系統(tǒng)目錄內(nèi)的元數(shù)據(jù),查詢操作被翻譯為其等效結(jié)構(gòu)化訪問(wèn)路徑。在當(dāng)前描述的實(shí)施例中,其中本發(fā)明在SQLSERVER數(shù)據(jù)庫(kù)中實(shí)現(xiàn),在查詢編譯時(shí),檢查用于UDT的匯編元數(shù)據(jù)以便確定Name是一個(gè)可以為結(jié)構(gòu)化訪問(wèn)而重寫的屬性。如果它可以被結(jié)構(gòu)化地執(zhí)行,則sql元數(shù)據(jù)和匯編元數(shù)據(jù)用于確定物理訪問(wèn)信息(位置、值的類型和大小、以及到達(dá)它的訪問(wèn)路徑)。這種結(jié)構(gòu)化的元數(shù)據(jù)用于編譯取值器,并且將這種信息存儲(chǔ)在編譯后的表達(dá)式中。因此在本實(shí)施例中,與上面相同的查詢?nèi)《痪幾g為Selectbinding.GetData(personDatum,NameOrdinal)fromT接著,在步驟410,所請(qǐng)求的字段的值現(xiàn)在可以被結(jié)構(gòu)化地訪問(wèn),并且返回給用戶而不需對(duì)象水合并且不必調(diào)用受管代碼中的任何行為。特別地,在本實(shí)施例中,取值器在運(yùn)行時(shí)使用以便取得該字段。內(nèi)部地,取值器的實(shí)現(xiàn)對(duì)序列化的形式進(jìn)行語(yǔ)法分析并且返回屬性。圖6是示出了實(shí)現(xiàn)圖4B中示出的方法的系統(tǒng)的框圖。如(1)所示,應(yīng)用程序生成包括引用持久存儲(chǔ)在數(shù)據(jù)庫(kù)存儲(chǔ)中的已應(yīng)用本發(fā)明的對(duì)象的受管行為的謂詞或表達(dá)式的查詢。如(2)所示,數(shù)據(jù)庫(kù)服務(wù)器的查詢處理系統(tǒng)使用與該UDT相關(guān)聯(lián)的存儲(chǔ)的元數(shù)據(jù),以便將該查詢翻譯為等效結(jié)構(gòu)化訪問(wèn)路徑。然后如(3)所示,該值被結(jié)構(gòu)化地訪問(wèn)并且返回給應(yīng)用程序而不需對(duì)象水合,而且不用調(diào)用該對(duì)象上的行為。開發(fā)者可以依賴本發(fā)明的功能以便提供對(duì)UDT的字段的結(jié)構(gòu)化訪問(wèn)而不用進(jìn)行對(duì)象水合,以便能夠進(jìn)行附加的優(yōu)化。例如,采用本發(fā)明,開發(fā)者能夠通過(guò)可結(jié)構(gòu)化地訪問(wèn)的UDT的操作構(gòu)建計(jì)算出的列的索引,而不需該列被冗余地持久存儲(chǔ)。由本發(fā)明提供的對(duì)值的直接結(jié)構(gòu)化訪問(wèn)可以用于從值中檢索感興趣的信息,諸如該值的實(shí)際類型,或該值是否包含嵌入的大值。本發(fā)明還可以用于響應(yīng)于服務(wù)和數(shù)據(jù)更新情形,提供對(duì)值的結(jié)構(gòu)化轉(zhuǎn)換。此外,本發(fā)明可以用于更有效地從一個(gè)域(存儲(chǔ))向另一個(gè)域移植和導(dǎo)入/導(dǎo)出值。如從上述可以清楚了解的,本發(fā)明的各種系統(tǒng)、方法和方面的全部或部分可以用硬件、軟件或兩者的結(jié)合來(lái)實(shí)施。當(dāng)用軟件實(shí)施時(shí),本發(fā)明的方法和裝置或其某些方面或部分可以用程序代碼(即,指令)的形式來(lái)實(shí)施。這種程序代碼可以被存儲(chǔ)在諸如磁的、電子的或光學(xué)存儲(chǔ)介質(zhì)的計(jì)算機(jī)可讀介質(zhì)上,包括但不限于軟盤、CD-ROM、CD-RW、DVD-RW、DVD-ROM、DVD-RAM、磁帶、閃存、硬盤驅(qū)動(dòng)器或任何機(jī)器可讀存儲(chǔ)介質(zhì),其中當(dāng)程序代碼被裝入并由機(jī)器(諸如計(jì)算器或服務(wù)器)執(zhí)行時(shí),該機(jī)器成為實(shí)現(xiàn)本發(fā)明的裝置。程序代碼在其上執(zhí)行的計(jì)算機(jī)通常包括處理器、處理器可讀的存儲(chǔ)介質(zhì)(包括易失/非易失存儲(chǔ)器和/或存儲(chǔ)元件)、至少一個(gè)輸入設(shè)備以及至少一個(gè)輸出設(shè)備。程序代碼可以用高級(jí)過(guò)程語(yǔ)言或面向?qū)ο缶幊陶Z(yǔ)言來(lái)實(shí)現(xiàn)。可替換地,程序代碼可以用匯編語(yǔ)言或機(jī)器語(yǔ)言實(shí)現(xiàn)。在任何情況下,所述的語(yǔ)言可以是編譯或解釋語(yǔ)言。本發(fā)明還可以用程序代碼的形式來(lái)實(shí)施,該程序代碼通過(guò)某種傳輸介質(zhì)傳輸,諸如通過(guò)電線或電纜、通過(guò)光纖、通過(guò)包括局域網(wǎng)、廣域網(wǎng)、因特網(wǎng)或內(nèi)聯(lián)網(wǎng)的網(wǎng)絡(luò)、或通過(guò)任何其它的傳輸形式,其中當(dāng)程序代碼被接收并被裝入且由機(jī)器(諸如計(jì)算機(jī))執(zhí)行時(shí),該機(jī)器成為實(shí)現(xiàn)本發(fā)明的裝置。當(dāng)在通用處理器上實(shí)現(xiàn)時(shí),程序代碼可以與處理器相結(jié)合,以便提供與專用邏輯電路相類似地運(yùn)行的唯一裝置。此外,本發(fā)明可以結(jié)合任何計(jì)算機(jī)或其它客戶機(jī)或服務(wù)器設(shè)備來(lái)實(shí)現(xiàn),這些計(jì)算機(jī)或其它客戶機(jī)或服務(wù)器設(shè)備可以作為計(jì)算機(jī)網(wǎng)絡(luò)的一部分部署,或部署在分布式計(jì)算環(huán)境中。就此而言,本發(fā)明適合于具有任何數(shù)目的存儲(chǔ)器或存儲(chǔ)單元,以及發(fā)生在任何數(shù)目的存儲(chǔ)單元或卷上的任何數(shù)目的應(yīng)用程序和進(jìn)程的任何計(jì)算機(jī)系統(tǒng)或環(huán)境,所述的存儲(chǔ)單元或卷可以被用于與根據(jù)本發(fā)明在數(shù)據(jù)庫(kù)存儲(chǔ)中持久存儲(chǔ)對(duì)象有關(guān)的處理。本發(fā)明可以適用于具有被部署在網(wǎng)絡(luò)環(huán)境或分布式計(jì)算環(huán)境中的服務(wù)器計(jì)算機(jī)或客戶機(jī)計(jì)算機(jī)的環(huán)境,所述的環(huán)境具有遠(yuǎn)程或本地存儲(chǔ)。本發(fā)明還適用于獨(dú)立的計(jì)算設(shè)備,所述的獨(dú)立的計(jì)算設(shè)備具有用于生成、接收和發(fā)送關(guān)于遠(yuǎn)程或本地服務(wù)的信息的編程語(yǔ)言功能、解釋和執(zhí)行功能。分布式計(jì)算設(shè)備通過(guò)在計(jì)算設(shè)備和系統(tǒng)之間進(jìn)行交換便于計(jì)算機(jī)資源和服務(wù)的共享。這些資源和服務(wù)包括,但不限于,信息交換、高速緩存存儲(chǔ)和用于文件的盤存儲(chǔ)。分布式計(jì)算利用了網(wǎng)絡(luò)互連,允許客戶機(jī)發(fā)揮它們的集體能力,以便使整個(gè)企業(yè)受益。就此而言,各種設(shè)備可以具有可以牽涉到結(jié)合本發(fā)明的對(duì)象持久存儲(chǔ)方法所執(zhí)行的處理的應(yīng)用程序、對(duì)象或資源。圖7提供了示例性的聯(lián)網(wǎng)或分布式計(jì)算環(huán)境的示意圖。該分布式計(jì)算環(huán)境包括計(jì)算對(duì)象10a、10b等,以及計(jì)算對(duì)象或設(shè)備110a、110b、110c等。這些對(duì)象可以包括程序、方法、數(shù)據(jù)存儲(chǔ)、可編程邏輯等。這些對(duì)象可以包括一部分相同的或不同的設(shè)備,諸如PDA、電視機(jī)、MP3播放器、個(gè)人計(jì)算機(jī)等。每個(gè)對(duì)象可以通過(guò)通信網(wǎng)絡(luò)14與另一個(gè)對(duì)象通信。網(wǎng)絡(luò)本身包括為圖7的系統(tǒng)提供服務(wù)的其它計(jì)算對(duì)象和計(jì)算設(shè)備,并且本身可以代表多個(gè)互連的網(wǎng)絡(luò)。根據(jù)本發(fā)明的一個(gè)方面,每個(gè)對(duì)象10a、10b等或110a、110b、110c等可以包含可利用API或其它對(duì)象、軟件、固件和/或硬件來(lái)請(qǐng)求使用用于實(shí)現(xiàn)本發(fā)明的對(duì)象持久存儲(chǔ)方法的過(guò)程的應(yīng)用程序。還應(yīng)當(dāng)理解,諸如110c等對(duì)象可以被主宿在另一個(gè)計(jì)算設(shè)備10a、10b等或110a、110b、110c等之上。因此,雖然給出的物理環(huán)境可以將連接的設(shè)備示為計(jì)算機(jī),但是這種說(shuō)明僅是示例性的,并且可替換地,該物理環(huán)境可以被描繪或描述為包含諸如PDA、電視機(jī)、MP3播放器等的各種數(shù)字設(shè)備,以及諸如接口、COM對(duì)象等的軟件對(duì)象。存在各種支持分布式計(jì)算環(huán)境的系統(tǒng)、組件和網(wǎng)絡(luò)配置。例如,計(jì)算系統(tǒng)可以被通過(guò)有線或無(wú)線系統(tǒng)、通過(guò)局域網(wǎng)或廣泛地分布的網(wǎng)絡(luò)連接在一起。當(dāng)前,許多網(wǎng)絡(luò)被耦合到因特網(wǎng),因特網(wǎng)提供了廣泛分布的計(jì)算的基礎(chǔ)結(jié)構(gòu)并且包含許多不同的網(wǎng)絡(luò)。任何基礎(chǔ)設(shè)施可以用于附屬于本發(fā)明的示例性通信。因特網(wǎng)一般指使用計(jì)算機(jī)聯(lián)網(wǎng)領(lǐng)域內(nèi)公知的TCP/IP協(xié)議套件的網(wǎng)絡(luò)和網(wǎng)關(guān)的集合。TCP/IP是“傳輸控制協(xié)議/互聯(lián)網(wǎng)協(xié)議”的首字母縮寫。因特網(wǎng)可以被描述為由執(zhí)行聯(lián)網(wǎng)協(xié)議的計(jì)算機(jī)互連的在地理上分布的遠(yuǎn)程計(jì)算機(jī)網(wǎng)絡(luò),該聯(lián)網(wǎng)協(xié)議允許用戶通過(guò)網(wǎng)絡(luò)進(jìn)行交互或共享信息。因?yàn)檫@種廣泛的信息共享,因此諸如因特網(wǎng)等遠(yuǎn)程網(wǎng)絡(luò)迄今已發(fā)展為一種開放系統(tǒng),開發(fā)者可以為它設(shè)計(jì)軟件應(yīng)用程序以便執(zhí)行專門的操作或服務(wù),基本上沒有限制。因此,網(wǎng)絡(luò)基礎(chǔ)結(jié)構(gòu)啟用了大量的網(wǎng)絡(luò)拓?fù)洌缈蛻魴C(jī)/服務(wù)器、對(duì)等或混合體系結(jié)構(gòu)?!翱蛻魴C(jī)”是它所不相關(guān)的另一類或組的服務(wù)的類或組的成員。因此在計(jì)算中,客戶機(jī)是一個(gè)進(jìn)程,即粗略地說(shuō)是一組指令或任務(wù),它請(qǐng)求由另一程序提供的服務(wù)??蛻魴C(jī)進(jìn)程使用所請(qǐng)求的服務(wù)而不用“了解”關(guān)于其它程序或該服務(wù)本身的任何工作細(xì)節(jié)。在客戶機(jī)/服務(wù)器體系結(jié)構(gòu)中,特別是聯(lián)網(wǎng)的系統(tǒng)中,客戶機(jī)通常是訪問(wèn)由另一計(jì)算機(jī)(例如,服務(wù)器)提供的共享網(wǎng)絡(luò)資源的計(jì)算機(jī)。在圖7的例子中,計(jì)算機(jī)110a、110b等可以被認(rèn)為是客戶機(jī),而計(jì)算機(jī)10a、10b等可以被認(rèn)為是服務(wù)器,盡管取決于環(huán)境,任何計(jì)算機(jī)可以被認(rèn)為是客戶機(jī)、服務(wù)器或是這兩者。任何這些計(jì)算設(shè)備可以用牽涉本發(fā)明的對(duì)象持久存儲(chǔ)技術(shù)的方式來(lái)處理數(shù)據(jù)。服務(wù)器通常是可以通過(guò)遠(yuǎn)程或本地網(wǎng)絡(luò)(諸如因特網(wǎng))訪問(wèn)的遠(yuǎn)程計(jì)算機(jī)系統(tǒng)。客戶機(jī)進(jìn)程可以在第一計(jì)算機(jī)系統(tǒng)中是活動(dòng)的,并且服務(wù)器進(jìn)程可以在第二計(jì)算機(jī)系統(tǒng)中是活動(dòng)的,它們通過(guò)通信介質(zhì)彼此通信,因此提供了分布式的功能并且允許多個(gè)客戶機(jī)利用服務(wù)器的信息聚集能力。按照本發(fā)明的持久存儲(chǔ)機(jī)制使用的任何軟件對(duì)象可以分布在多個(gè)計(jì)算設(shè)備上。(多個(gè))客戶機(jī)和(多個(gè))服務(wù)器可以使用由協(xié)議層提供的功能彼此通信。例如,超文本傳輸協(xié)議(HTTP)是與萬(wàn)維網(wǎng)(WWW)或“Web”結(jié)合使用的常見的協(xié)議。典型地,諸如互聯(lián)網(wǎng)協(xié)議(IP)地址等計(jì)算機(jī)網(wǎng)絡(luò)地址或諸如統(tǒng)一資源定位器(URL)等其它引用可以用于彼此標(biāo)識(shí)服務(wù)器或客戶機(jī)。網(wǎng)絡(luò)地址可以被稱為URL地址。可以通過(guò)任何可用的通信介質(zhì)提供通信。因此,圖7示出了一種其中可使用本發(fā)明的示例性聯(lián)網(wǎng)或分布式環(huán)境,其中服務(wù)器通過(guò)網(wǎng)絡(luò)/總線與客戶機(jī)計(jì)算機(jī)通信。根據(jù)本發(fā)明,網(wǎng)絡(luò)/總線14可以是LAN、WAN、內(nèi)聯(lián)網(wǎng)、因特網(wǎng)或某些其它的網(wǎng)絡(luò)介質(zhì),它具有依照本發(fā)明的多個(gè)客戶機(jī)或遠(yuǎn)程計(jì)算機(jī)設(shè)備110a、110b、110c、110d、110e等,諸如便攜計(jì)算機(jī)、手持計(jì)算機(jī)、瘦客戶機(jī)、聯(lián)網(wǎng)設(shè)備或其它設(shè)備,諸如VCR、TV、烤箱、電燈、加熱器等。因此可以構(gòu)想本發(fā)明可以適用于任何這樣的計(jì)算設(shè)備,對(duì)所述的計(jì)算設(shè)備而言希望保持持久存儲(chǔ)的對(duì)象。例如,在通信網(wǎng)絡(luò)/總線14是因特網(wǎng)的網(wǎng)絡(luò)環(huán)境中,服務(wù)器10a、10b等可以是客戶機(jī)110a、110b、110c、110d、110e等通過(guò)多種已知協(xié)議中的任意一種(諸如HTTP)與其通信的服務(wù)器。如可以是分布式計(jì)算環(huán)境的特征,服務(wù)器10a、10b等還可以用作客戶機(jī)110a、110b、110c、110d、110e等。通信可以是(在適合的地方)有線的或無(wú)線的。客戶機(jī)設(shè)備110a、110b、110c、110d、110e等可以通過(guò)或可以不通過(guò)通信網(wǎng)絡(luò)/總線14通信,并且可以具有與它相關(guān)聯(lián)的獨(dú)立的通信。例如,在TV或VCR的情況下,可以有或沒有關(guān)于其控制的聯(lián)網(wǎng)的方面。每個(gè)客戶計(jì)算機(jī)110a、110b、110c、110d、110e等和服務(wù)器10a、10b等可以配備有各種應(yīng)用程序模塊或?qū)ο?35,并且具有到各種類型的存儲(chǔ)元件或?qū)ο蟮倪B接或訪問(wèn),文件或數(shù)據(jù)流可以跨所述的存儲(chǔ)元件或?qū)ο蟊淮鎯?chǔ),或是部分的文件或數(shù)據(jù)流可以被下載到、傳輸?shù)交蛞仆龅拇鎯?chǔ)元件或?qū)ο蟆H魏斡?jì)算機(jī)10a、10b、110a、110b等可以負(fù)責(zé)用于存儲(chǔ)根據(jù)本發(fā)明處理的數(shù)據(jù)的數(shù)據(jù)庫(kù)、存儲(chǔ)器或其它存儲(chǔ)元件20的維護(hù)和更新。因此,本發(fā)明可以用于這樣的計(jì)算機(jī)網(wǎng)絡(luò)環(huán)境中,它具有可以訪問(wèn)計(jì)算機(jī)網(wǎng)絡(luò)/總線14并與其交互的客戶計(jì)算機(jī)110a、110b等,以及可以與客戶計(jì)算機(jī)110a、110b等交互的服務(wù)器10a、10b等,以及其它類似的設(shè)備和數(shù)據(jù)庫(kù)20。圖7和下面的討論旨在提供對(duì)可結(jié)合其實(shí)現(xiàn)本發(fā)明的適合的計(jì)算設(shè)備的簡(jiǎn)要的概括描述。例如,圖7中示出的任何客戶機(jī)和服務(wù)器計(jì)算機(jī)或設(shè)備都可以采用這種形式。然而應(yīng)當(dāng)理解,手持的、便攜的和其它的計(jì)算設(shè)備和各種類型的計(jì)算對(duì)象也被構(gòu)想用于本發(fā)明,即,計(jì)算環(huán)境中可以生成、處理、接收和/或發(fā)送數(shù)據(jù)的任何地方。雖然下面描述了通用計(jì)算機(jī),但這只是例子,并且本發(fā)明可以用具有網(wǎng)絡(luò)/總線協(xié)同工作能力和交互作用的瘦客戶機(jī)來(lái)實(shí)現(xiàn)。因此,本發(fā)明可以在聯(lián)網(wǎng)主宿的服務(wù)的環(huán)境中實(shí)現(xiàn),其中只涉及非常少的或最少的客戶機(jī)資源,例如,一種聯(lián)網(wǎng)的環(huán)境,其中客戶設(shè)備僅起到網(wǎng)絡(luò)/總線的接口的作用,諸如被放置在設(shè)備中的一個(gè)對(duì)象。本質(zhì)上,可以存儲(chǔ)數(shù)據(jù)的任何地方或可以從中檢索數(shù)據(jù)或?qū)⑵浒l(fā)送到另一計(jì)算機(jī)的任何地方都是用于運(yùn)行本發(fā)明的對(duì)象持久存儲(chǔ)方法的理想的或適合的環(huán)境。雖然沒有要求,本發(fā)明可以通過(guò)操作系統(tǒng)實(shí)現(xiàn),以便由設(shè)備或?qū)ο蟮姆?wù)開發(fā)者使用,和/或被包括在根據(jù)本發(fā)明運(yùn)行的應(yīng)用程序或服務(wù)器軟件中。軟件可以在計(jì)算機(jī)可執(zhí)行指令的一般上下文中描述,所述的計(jì)算機(jī)可執(zhí)行指令諸如由一個(gè)或多個(gè)計(jì)算機(jī)(諸如客戶工作站、服務(wù)器或其它設(shè)備)執(zhí)行的程序模塊。一般地,程序模塊包括例程、程序、對(duì)象、組件、數(shù)據(jù)結(jié)構(gòu)等,它們執(zhí)行特定的任務(wù)或?qū)崿F(xiàn)特定的抽象數(shù)據(jù)類型。典型地,程序模塊的功能可以按照所希望的被結(jié)合進(jìn)或分布到各種實(shí)施例中。此外,本發(fā)明可以用其它計(jì)算機(jī)系統(tǒng)配置和協(xié)議來(lái)實(shí)現(xiàn)。適用于本發(fā)明的其它的公知的計(jì)算系統(tǒng)、環(huán)境和/或配置包括,但是不限于,個(gè)人計(jì)算機(jī)(PC)、自動(dòng)柜員機(jī)、服務(wù)器計(jì)算機(jī)、手持或膝上設(shè)備、多處理器系統(tǒng)、基于微處理器的系統(tǒng)、可編程消費(fèi)者電子設(shè)備、網(wǎng)絡(luò)PC、電器、電燈、環(huán)境控制元件、小型計(jì)算機(jī)、大型機(jī)等。因此,圖8給出了其中可實(shí)現(xiàn)本發(fā)明的適合的計(jì)算系統(tǒng)環(huán)境100的一個(gè)例子,雖然如上所述可以清楚了解的,計(jì)算系統(tǒng)100僅是適合的計(jì)算環(huán)境的一個(gè)例子,并且不旨在暗示著對(duì)本發(fā)明的使用范圍或功能的任何限制。計(jì)算環(huán)境100也不應(yīng)被解釋為具有與示例的操作環(huán)境100中示出的組件中的任意一個(gè)或其組合相關(guān)的任何依賴性或要求。參考圖8,用于實(shí)現(xiàn)本發(fā)明的示例性系統(tǒng)包括計(jì)算機(jī)110形式的通用計(jì)算設(shè)備。計(jì)算機(jī)110的組件可以包括但不限于處理單元120、系統(tǒng)存儲(chǔ)器130和系統(tǒng)總線121,系統(tǒng)總線121將包括系統(tǒng)存儲(chǔ)器在內(nèi)的各種系統(tǒng)組件耦合到處理單元120。系統(tǒng)總線121可以是多種總線結(jié)構(gòu)中的任意一種,包括存儲(chǔ)器總線或存儲(chǔ)器控制器、外圍總線和使用多種總線體系結(jié)構(gòu)中的任何一種的局部總線。作為例子而不是限制,這種體系結(jié)構(gòu)包括工業(yè)標(biāo)準(zhǔn)體系結(jié)構(gòu)(ISA)總線、微通道體系結(jié)構(gòu)(MCA)總線、增強(qiáng)ISA(EISA)總線、視頻電子技術(shù)標(biāo)準(zhǔn)協(xié)會(huì)(VESA)局部總線和外圍組件互連(PCI)總線(也被稱為Mezzanine總線)。計(jì)算機(jī)110典型地包括各種計(jì)算機(jī)可讀介質(zhì)。計(jì)算機(jī)可讀介質(zhì)可以是可由計(jì)算機(jī)110訪問(wèn)的任何可用介質(zhì),并且包括易失和非易失介質(zhì),可移動(dòng)和非可移動(dòng)介質(zhì)。作為例子而不是限制,計(jì)算機(jī)可讀介質(zhì)可以包括計(jì)算機(jī)存儲(chǔ)介質(zhì)和通信介質(zhì)。計(jì)算機(jī)存儲(chǔ)介質(zhì)包括以用于存儲(chǔ)諸如計(jì)算機(jī)可讀指令、數(shù)據(jù)結(jié)構(gòu)、程序模塊或其它數(shù)據(jù)的信息的任何方法或技術(shù)實(shí)現(xiàn)的易失和非易失介質(zhì),可移動(dòng)和非可移動(dòng)介質(zhì)。計(jì)算機(jī)存儲(chǔ)介質(zhì)包括,但是不限于,RAM、ROM、EEPROM、閃存或其它存儲(chǔ)器技術(shù)、CDROM、數(shù)字多功能盤(DVD)或其它光盤存儲(chǔ)、盒式磁帶、磁帶、磁盤存儲(chǔ)或其它磁存儲(chǔ)設(shè)備,或可以被用于存儲(chǔ)所希望的信息并且可以由計(jì)算機(jī)110訪問(wèn)的任何其它介質(zhì)。通信介質(zhì)典型地包括已調(diào)制數(shù)據(jù)信號(hào)(諸如載波或其它傳輸機(jī)制)形式的計(jì)算機(jī)可讀指令、數(shù)據(jù)結(jié)構(gòu)、程序模塊或其它數(shù)據(jù),并且包括任意的信息傳遞介質(zhì)。術(shù)語(yǔ)“已調(diào)制數(shù)據(jù)信號(hào)”的含義是它的一個(gè)或多個(gè)特征以在信號(hào)中對(duì)信息進(jìn)行編碼的方式被設(shè)置或改變的信號(hào)。作為例子,并且不是限制,通信介質(zhì)包括諸如有線網(wǎng)絡(luò)或直接連線連接的有線介質(zhì),和諸如聲學(xué)、RF、紅外線或其它無(wú)線介質(zhì)的無(wú)線介質(zhì)。上面所述的任何的組合也應(yīng)被包括在計(jì)算機(jī)可讀介質(zhì)的范圍內(nèi)。系統(tǒng)存儲(chǔ)器130包括諸如只讀存儲(chǔ)器(ROM)131和隨機(jī)訪問(wèn)存儲(chǔ)器(RAM)132的易失和非易失存儲(chǔ)器形式的計(jì)算機(jī)存儲(chǔ)介質(zhì)。包含(諸如在啟動(dòng)過(guò)程中)幫助在計(jì)算機(jī)110內(nèi)的元件之間傳遞信息的基本例程的基本輸入/輸出系統(tǒng)133(BIOS)典型地被存儲(chǔ)在ROM131中。RAM132典型地包含可以立即由處理單元120訪問(wèn)的和/或當(dāng)前正由處理單元120處理的數(shù)據(jù)和/或程序模塊。作為例子但不是限制,圖8示出了操作系統(tǒng)134、應(yīng)用程序135、其它程序模塊136和程序數(shù)據(jù)137。計(jì)算機(jī)110還可以包括其它的可移動(dòng)/不可移動(dòng),易失/非易失的計(jì)算機(jī)存儲(chǔ)介質(zhì)。僅作為例子,圖8示出了從不可移動(dòng)、非易失磁介質(zhì)讀或向其寫的硬盤驅(qū)動(dòng)器141,從可移動(dòng)、非易失磁盤152讀或向其寫的磁盤驅(qū)動(dòng)器151,以及從可移動(dòng)、非易失光盤156諸如CD-RW、DVD-RW或其它光學(xué)介質(zhì)讀或向其寫的光盤驅(qū)動(dòng)器155??梢员挥糜谠撌纠圆僮鳝h(huán)境中的其它可移動(dòng)/不可移動(dòng)、易失/非易失計(jì)算機(jī)存儲(chǔ)介質(zhì)包括,但是不限于,磁帶、盒式磁帶、閃存卡、數(shù)字多功能盤、數(shù)字視頻帶、固態(tài)RAM、固態(tài)ROM等。硬盤驅(qū)動(dòng)器141通常通過(guò)不可移動(dòng)存儲(chǔ)器接口,諸如接口140連接到系統(tǒng)總線121,而磁盤驅(qū)動(dòng)器151和光盤驅(qū)動(dòng)器155通常通過(guò)可移動(dòng)存儲(chǔ)器接口,諸如接口150連接到系統(tǒng)總線121。上面討論并且在圖8中示出的驅(qū)動(dòng)器和它們相關(guān)聯(lián)的計(jì)算機(jī)存儲(chǔ)介質(zhì)為計(jì)算機(jī)110提供了計(jì)算機(jī)可讀指令、數(shù)據(jù)結(jié)構(gòu)、程序模塊和其它數(shù)據(jù)的存儲(chǔ)。在圖8中,例如,硬盤驅(qū)動(dòng)器141被示出為存儲(chǔ)操作系統(tǒng)144、應(yīng)用程序145、其它程序模塊146和程序數(shù)據(jù)147。注意這些組件可以與操作系統(tǒng)134、應(yīng)用程序135、其它程序模塊136和程序數(shù)據(jù)137相同或不同。此處給予操作系統(tǒng)144、應(yīng)用程序145、其它程序模塊146和程序數(shù)據(jù)147不同的標(biāo)號(hào)以便示出,至少它們是不同的副本。用戶可以通過(guò)輸入設(shè)備,諸如鍵盤162和定位設(shè)備161(諸如鼠標(biāo)、軌跡球或觸摸墊)向計(jì)算機(jī)110輸入命令和信息。其它輸入設(shè)備(沒有示出)可以包括麥克風(fēng)、游戲桿、游戲墊、圓盤式衛(wèi)星天線、掃描儀等。這些和其它輸入設(shè)備通常被通過(guò)耦合到系統(tǒng)總線121的用戶輸入接口160連接到處理單元120,但是也可以通過(guò)其它接口和總線結(jié)構(gòu)連接,諸如并行端口、游戲端口或通用串行總線(USB)。一個(gè)或多個(gè)圖形處理單元(GPU)184可以與圖形接口182通信。監(jiān)視器191或其它類型的顯示設(shè)備也可以通過(guò)諸如視頻接口190的接口連接到系統(tǒng)總線121,所述接口進(jìn)而與視頻存儲(chǔ)器186通信。除了監(jiān)視器191之外,計(jì)算機(jī)還可以包括其它的外圍輸出設(shè)備,諸如揚(yáng)聲器197、打印機(jī)196,它們可以通過(guò)輸出外部接口195連接。使用到一個(gè)或多個(gè)遠(yuǎn)程計(jì)算機(jī),諸如遠(yuǎn)程計(jì)算機(jī)180的邏輯連接,計(jì)算機(jī)110可以在聯(lián)網(wǎng)的或分布式環(huán)境中運(yùn)行。遠(yuǎn)程計(jì)算機(jī)180可以是個(gè)人計(jì)算機(jī)、服務(wù)器、路由器、網(wǎng)絡(luò)PC、對(duì)等設(shè)備或其它的普通網(wǎng)絡(luò)節(jié)點(diǎn),并且通常包括上面關(guān)于計(jì)算機(jī)110所描述的許多或全部元件,雖然在圖8中僅示出了存儲(chǔ)器存儲(chǔ)設(shè)備181。圖8中給出的邏輯連接包括局域網(wǎng)(LAN)171和廣域網(wǎng)(WAN)173,但是還可以包括其它網(wǎng)絡(luò)/總線。這種聯(lián)網(wǎng)環(huán)境在家庭、辦公室、企業(yè)范圍計(jì)算機(jī)網(wǎng)絡(luò)、內(nèi)聯(lián)網(wǎng)和因特網(wǎng)中是常見的。當(dāng)用于LAN聯(lián)網(wǎng)環(huán)境中時(shí),計(jì)算機(jī)110通過(guò)網(wǎng)絡(luò)接口或適配器170連接到LAN171。當(dāng)用于WAN聯(lián)網(wǎng)環(huán)境中時(shí),計(jì)算機(jī)110通常包括調(diào)制解調(diào)器172或用于通過(guò)WAN173(諸如因特網(wǎng))建立連接的其它裝置。調(diào)制解調(diào)器172(可以是內(nèi)置的或外置的)可以通過(guò)用戶輸入接口160或其它適合的機(jī)制連接到系統(tǒng)總線121。在聯(lián)網(wǎng)的環(huán)境中,就計(jì)算機(jī)110給出的程序模塊或其部分可以存儲(chǔ)在遠(yuǎn)程存儲(chǔ)器存儲(chǔ)設(shè)備內(nèi)。作為例子,但是不是限制,圖8示出了駐留在存儲(chǔ)器設(shè)備181上的遠(yuǎn)程應(yīng)用程序185。應(yīng)當(dāng)理解,示出的網(wǎng)絡(luò)通信是示例性的,并且可以使用在計(jì)算機(jī)之間建立通信鏈路的其它裝置。如前所示,本發(fā)明針對(duì)用于數(shù)據(jù)庫(kù)管理系統(tǒng)中的用戶定義類型的新的持久存儲(chǔ)格式。應(yīng)當(dāng)理解,可以對(duì)上述的實(shí)施例進(jìn)行修改而不脫離本發(fā)明的寬泛的發(fā)明性概念。例如,雖然本發(fā)明的一個(gè)實(shí)施例在上面已經(jīng)以描述為在Microsoft的SQLSERVER數(shù)據(jù)庫(kù)管理系統(tǒng)中實(shí)現(xiàn),然而,應(yīng)當(dāng)理解,本發(fā)明可以在支持用戶定義類型的創(chuàng)建的任意數(shù)據(jù)庫(kù)管理系統(tǒng)內(nèi)實(shí)施。因此,應(yīng)當(dāng)理解,本發(fā)明不限于所公開的特定實(shí)施例,而是旨在覆蓋落入所附權(quán)利要求所定義的本發(fā)明的精神和范圍內(nèi)的所有修改。權(quán)利要求1.一種在數(shù)據(jù)庫(kù)存儲(chǔ)中持久存儲(chǔ)對(duì)象的方法,包括定義可以被持久存儲(chǔ)在數(shù)據(jù)庫(kù)存儲(chǔ)中的對(duì)象的類型,其中,所述類型定義包括字段和行為;以及用定義用于所述類型的實(shí)例的所述數(shù)據(jù)庫(kù)存儲(chǔ)中的存儲(chǔ)布局的屬性注釋所述的類型定義,其中,所述數(shù)據(jù)庫(kù)存儲(chǔ)使用所述類型定義中的注釋來(lái)控制數(shù)據(jù)庫(kù)存儲(chǔ)中的所述類型的實(shí)例的存儲(chǔ)布局。2.如權(quán)利要求1所述的方法,其特征在于,注釋類型定義的所述步驟包括用控制字段的一個(gè)或多個(gè)存儲(chǔ)方面的第一屬性注釋所述類型的每個(gè)字段;以及用表示等效結(jié)構(gòu)化訪問(wèn)路徑的第二屬性注釋每個(gè)行為。3.如權(quán)利要求1所述的方法,其特征在于,由所述第一屬性控制的所述字段的存儲(chǔ)方面包括字段的最大大小、字段是否為固定長(zhǎng)度字段、字段的精度、字段的數(shù)值范圍以及字段的值是否可以為空中的至少一個(gè)。4.如權(quán)利要求2所述的方法,其特征在于,所述第二屬性指定了所述類型的一個(gè)字段的名稱,所述名稱是所述行為的主題。5.如權(quán)利要求1所述的方法,其特征在于,所述對(duì)象類型被定義為受管代碼中的類。6.一種系統(tǒng),其中對(duì)象被持久存儲(chǔ)在數(shù)據(jù)庫(kù)存儲(chǔ)中,所述對(duì)象是用戶定義類型的實(shí)例,其中,用戶定義類型的定義包括一個(gè)或多個(gè)字段和行為,并且包括控制所述數(shù)據(jù)庫(kù)存儲(chǔ)中的類型的實(shí)例的存儲(chǔ)布局的注釋,并且其中,所述數(shù)據(jù)庫(kù)存儲(chǔ)維持反映由對(duì)所述類型定義的注釋所提供的存儲(chǔ)布局的信息,一種在對(duì)象上執(zhí)行查詢的方法,所述對(duì)象是類型的實(shí)例,所述方法包括接收對(duì)一對(duì)象的查詢,所述對(duì)象是類型的實(shí)例,其中,所述查詢的執(zhí)行可能需要所述對(duì)象的水合;訪問(wèn)由所述數(shù)據(jù)庫(kù)存儲(chǔ)維持的信息,以便確定所述類型的實(shí)例的存儲(chǔ)布局;基于關(guān)于所述類型的實(shí)例的存儲(chǔ)布局的信息,將所述查詢翻譯成所述類型的字段的值的等效訪問(wèn)路徑,所述值將響應(yīng)于所述查詢而被返回;結(jié)構(gòu)化地訪問(wèn)所述值,而不必對(duì)所述對(duì)象進(jìn)行水合;以及響應(yīng)于所述查詢返回所述值。7.如權(quán)利要求6所述的方法,其特征在于,所述類型的每個(gè)字段用控制所述字段的一個(gè)或多個(gè)存儲(chǔ)方面的第一屬性來(lái)注釋,并且其中,每個(gè)行為用表示等效結(jié)構(gòu)化訪問(wèn)路徑的第二屬性來(lái)注釋。8.如權(quán)利要求6所述的方法,其特征在于,由所述第一屬性控制的所述字段的存儲(chǔ)方面包括字段的最大大小、字段是否為固定長(zhǎng)度字段、字段的精度、字段的數(shù)值范圍以及字段的值是否可以為空中的至少一個(gè)。9.如權(quán)利要求7所述的方法,其特征在于,所述第二屬性指定了所述類型的一個(gè)字段的名稱,所述名稱是所述行為的主題。10.如權(quán)利要求6所述的方法,其特征在于,所述對(duì)象類型被定義為受管代碼中的類。11.一種系統(tǒng),包括一數(shù)據(jù)庫(kù)存儲(chǔ),對(duì)象被持久存儲(chǔ)在其中,所述對(duì)象是用戶定義類型的實(shí)例,其中,用戶定義類型的定義包括一個(gè)或多個(gè)字段和行為,并且包括控制所述數(shù)據(jù)庫(kù)存儲(chǔ)中的類型的實(shí)例的存儲(chǔ)布局的注釋,并且其中,所述數(shù)據(jù)庫(kù)存儲(chǔ)維持反映由對(duì)所述類型定義的注釋所提供的存儲(chǔ)布局的信息;以及一數(shù)據(jù)庫(kù)服務(wù)器,它(i)接收對(duì)所述對(duì)象的查詢,所述對(duì)象是用戶定義類型的實(shí)例,其中,所述查詢的執(zhí)行可能需要所述對(duì)象的水合;(ii)訪問(wèn)由所述數(shù)據(jù)庫(kù)存儲(chǔ)維持的信息,以便確定所述類型的實(shí)例的存儲(chǔ)布局;(iii)基于關(guān)于所述類型的實(shí)例的存儲(chǔ)布局的信息,將所述查詢翻譯成所述類型的字段的值的等效訪問(wèn)路徑,所述值將響應(yīng)于所述查詢被返回;(iv)結(jié)構(gòu)化地訪問(wèn)所述值,而不必對(duì)所述對(duì)象進(jìn)行水合;以及(v)響應(yīng)于所述查詢返回所述值。12.如權(quán)利要求11所述的系統(tǒng),其特征在于,所述類型的每個(gè)字段用控制所述字段的一個(gè)或多個(gè)存儲(chǔ)方面的第一屬性來(lái)注釋,并且其中,每個(gè)行為用表示等效結(jié)構(gòu)化訪問(wèn)路徑的第二屬性來(lái)注釋。13.如權(quán)利要求12所述的系統(tǒng),其特征在于,由所述第一屬性控制的所述字段的存儲(chǔ)方面包括字段的最大大小、字段是否為固定長(zhǎng)度字段、字段的精度、字段的數(shù)值范圍以及字段的值是否可以為空中的至少一個(gè)。14.如權(quán)利要求12所述的系統(tǒng),其特征在于,所述第二屬性指定了所述類型的一個(gè)字段的名稱,所述名稱是所述行為的主題。15.如權(quán)利要求11所述的方法,其特征在于,所述對(duì)象類型被定義為受管代碼中的類。16.一種具有存儲(chǔ)在其上以便在對(duì)象被持久存儲(chǔ)在數(shù)據(jù)庫(kù)存儲(chǔ)中的系統(tǒng)中使用的程序代碼的計(jì)算機(jī)可讀介質(zhì),所述對(duì)象是用戶定義類型的實(shí)例,其中,用戶定義類型的定義包括一個(gè)或多個(gè)字段和行為,并且包括控制所述數(shù)據(jù)庫(kù)存儲(chǔ)中的類型的實(shí)例的存儲(chǔ)布局的注釋,并且其中,所述數(shù)據(jù)庫(kù)存儲(chǔ)維持反映由對(duì)所述類型定義的注釋所提供的存儲(chǔ)布局的信息,當(dāng)被在計(jì)算機(jī)上執(zhí)行時(shí),所述程序代碼使得所述計(jì)算機(jī)接收對(duì)一對(duì)象的查詢,所述對(duì)象是所述類型的實(shí)例,其中,所述查詢的執(zhí)行可能需要所述對(duì)象的水合;訪問(wèn)由所述數(shù)據(jù)庫(kù)存儲(chǔ)維持的信息,以便確定所述類型的實(shí)例的存儲(chǔ)布局;基于關(guān)于所述類型的實(shí)例的存儲(chǔ)布局的信息,將所述查詢翻譯為所述類型的字段的值的等效訪問(wèn)路徑,所述值將響應(yīng)于所述查詢被返回;結(jié)構(gòu)化地訪問(wèn)所述值,而不必對(duì)所述對(duì)象進(jìn)行水合;以及響應(yīng)于所述查詢返回所述值。17.如權(quán)利要求16所述的計(jì)算機(jī)可讀介質(zhì),其特征在于,所述類型的每個(gè)字段用控制所述字段的一個(gè)或多個(gè)存儲(chǔ)方面的第一屬性來(lái)注釋,并且其中,每個(gè)行為用表示等效結(jié)構(gòu)化訪問(wèn)路徑的第二屬性來(lái)注釋。18.如權(quán)利要求16所述的計(jì)算機(jī)可讀介質(zhì),其特征在于,由所述第一屬性控制的所述字段的存儲(chǔ)方面包括字段的最大大小、字段是否為固定長(zhǎng)度字段、字段的精度、字段的數(shù)值范圍以及字段的值是否可以為空中的至少一個(gè)。19.如權(quán)利要求17所述的計(jì)算機(jī)可讀介質(zhì),其特征在于,所述第二屬性指定了所述類型的一個(gè)字段的名稱,所述名稱是所述行為的主題。20.如權(quán)利要求16所述的計(jì)算機(jī)可讀介質(zhì),其特征在于,所述對(duì)象類型被定義為受管代碼中的類。全文摘要一種用于在數(shù)據(jù)庫(kù)存儲(chǔ)中儲(chǔ)存用戶定義類型的對(duì)象的新的持久存儲(chǔ)格式使得關(guān)于類型的結(jié)構(gòu)的信息可以被傳遞給存儲(chǔ)。這種信息使得可以進(jìn)行多種存儲(chǔ)優(yōu)化,包括對(duì)類型的成員的直接結(jié)構(gòu)化訪問(wèn)。特別地,元數(shù)據(jù)在類型實(shí)現(xiàn)器和數(shù)據(jù)存儲(chǔ)之間交換。該存儲(chǔ)使用該元數(shù)據(jù)來(lái)確定用于類型的實(shí)例的存儲(chǔ)布局。有了這種信息,該存儲(chǔ)能夠檢測(cè)可以被優(yōu)化的訪問(wèn)模式,以便在存儲(chǔ)表示上直接操作而不用對(duì)該對(duì)象進(jìn)行水合(反序列化)。文檔編號(hào)G06F7/00GK1723461SQ200480001697公開日2006年1月18日申請(qǐng)日期2004年7月29日優(yōu)先權(quán)日2003年10月23日發(fā)明者R·凡卡特施,B·塞茲金,J·A·布萊克雷,D·Y·阿爾圖多夫申請(qǐng)人:微軟公司
網(wǎng)友詢問(wèn)留言 已有0條留言
  • 還沒有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1
方城县| 西充县| 绥芬河市| 牡丹江市| 安福县| 云和县| 如皋市| 海原县| 高阳县| 班戈县| 徐水县| 澄城县| 万宁市| 芜湖市| 长岛县| 民丰县| 通道| 南昌县| 尼勒克县| 宁化县| 兴国县| 林口县| 泌阳县| 东莞市| 荣昌县| 斗六市| 贡嘎县| 永春县| 九寨沟县| 沧州市| 宜宾县| 武威市| 旺苍县| 乌兰察布市| 尼木县| 封丘县| 邳州市| 林州市| 呼伦贝尔市| 嘉禾县| 信丰县|