用於資料庫系統中大對象基礎結構的系統和方法
2023-04-27 01:06:46 1
專利名稱:用於資料庫系統中大對象基礎結構的系統和方法
技術領域:
本發明一般涉及資料庫系統領域,尤其涉及用於提供大對象基礎結構的系統和方法,該基礎結構可用於大對象數據類型(文本、n文本和圖像)的重新實現以支持大的用戶定義類型以及諸如XML的其它新的數據類型。
背景技術:
在包括微軟SQL Server先前發布版本的資料庫存儲平臺中,由於複製小值對象所涉及額外成本相對較小,無需考慮這些額外成本。然而,對於大值對象,額外成本就高得多且可負面地影響整體性能。
迄今為止使用大對象(LOB)數據類型-文本、n文本和圖像數據類型-來存儲大對象以克服varchar(字符串變量)、nvarchar(n字符串變量)和varbinary(二進位變量)類型的尺寸限制,因為大對象值對這些最適合小數據對象的數據類型而言太大。然而,對帶有大對象的編程模型所允許的以及導致大對象的易錯誤實現的基礎結構都有很多限制。例如,對LOB不允許大多數字符串功能和操作符,並且特別是有關插入和刪除中的文本指針功能也有缺點。(文本指針是SQL Server先前版本中用作行定位符的物理引用。)此外,沒有用於一次更改LOB的一個或多個行的有效方法,也不支持LOB變量或任意類型的LOB的複製功能。這些和其它限制導致LOB明顯地與其它數據類型不同且因此更難使用。
需要的是一種大對象基礎結構,其中用戶/編程人員可用處理較小值的相同方法來處理較大值(數據塊),從而在較小值和較大值的處理中消除用戶可感知的差異,以便提供單個綜合性的編程模型。
發明內容
本發明的各個實施例涉及用於提供一種基礎結構的系統和方法,該基礎結構可用於將文本、n文本和圖像數據類型重新實現為新的varchar(MAX)、nvarchar(MAX)、varbinary(MAX)和XML數據類型,並支持較大的用戶定義類型(UDT),還使能對其它新數據類型和編程模型結構的支持。本發明的若干實施例還涉及提供一數據處理基礎結構,其中用戶/編程人員可用處理較小值的相同方法來處理較大值(數據對象),從而消除較小值和較大值之間的差異,以便提供單個綜合性的編程模型。
這些不同的實施例利用作為較大值內部表示的二進位大型對象句柄(BlobHandle,BH)。BH是對較大數據的不可變和無狀態的引用。BH的結構包含返回IlockBytes接口的足夠信息以便提供對相應大數據塊的訪問,並且BH還可返回有關它自己壽命描述的信息。這些概念和元素如下作更詳細描述。
結合附圖閱讀前面的發明內容和以下較佳實施例的詳細描述,能得到更好的理解。為了說明本發明各實施例,在附圖中示出本發明的示例性結構;然而,本發明並不限於所揭示的特定方法和裝置。在附圖中圖1是示出本發明各方面可結合其中的計算機系統的框圖;圖2是示出本發明各方面可結合其中的網絡的示意圖;圖3A是示出在本發明個實施例中二進位大型對象句柄(BH)的一般組件的框圖;圖3B是根據本發明各實施例示出一值完全包含其中的BH的框圖;圖4A是示出均指向用於讀取類型操作的同一數據塊的原始BH和表示虛擬副本的第二BH的框圖;圖4B是來自圖4A的BH的框圖,其中寫操作由任一BH調用而第二BH指向數據塊的新創建副本。
具體實施例方式
本發明的主題是專門為滿足法定需求而進行描述的。然而,該描述本身並不是要限制本專利的範圍。相反,發明者已經預期到已聲明主題也能結合其它現有或以後的技術用其它方式體現,以包括不同的步驟或類似於本文檔中所述步驟的組合。此外,儘管術語「步驟」在此可用以暗示所用方法的不同元素,該術語不應被解釋為暗示在此揭示的不同步驟之間或當中的任何特定次序,除非明確地說明各個步驟的次序時。
計算機環境本發明的眾多實施例可在計算機上執行。圖1和以下討論旨在提供一種本發明可在其中實現的適當計算環境的簡要一般說明。儘管不是必需的,本發明可在由諸如客戶機工作站或伺服器的計算機執行的諸如程序模塊的計算機可執行指令的一般上下文中進行說明。通常,程序模塊包括執行特定任務或實現具體抽象數據類型的例程、程序、對象、組件、數據結構等等。此外,本領域技術人員將理解本發明可在其它計算機系統配置中實踐,包括手持式裝置、多處理器系統、基於微處理器的或可編程的電器消費品、網絡PC、小型計算機、大型計算機等等。本發明還可在任務由經通信網絡連結的遠程處理裝置執行的分布式計算環境中實踐。在分布式計算環境中,程序模塊可被置於本地和遠程存儲器存儲設備中。
如圖1所示,示例性通用計算系統具有常規個人計算機20等,包括處理單元21、系統存儲器22以及把包括系統存儲器的各種系統組件耦合到處理單元21的系統總線23。系統總線23可以是若干總線結構類型中的任何一種,包括存儲器總線或存儲器控制器、外圍總線、以及使用多種總線體系結構的任一種的局部總線。系統存儲器包括只讀存儲器(ROM)24和隨機存儲器(RAM)25。含有幫助如啟動期間在個人計算機20中元件之間信息交換的基本例程的基本輸入/輸出系統(BIOS)26存儲在ROM 24中。個人計算機20還包括讀取和寫入硬碟(未示出)的硬碟驅動器27、讀取或寫入可移動磁碟29的磁碟驅動器28、以及讀取或寫入諸如CD ROM或其它光學介質等可移動光碟31的光碟驅動器30。硬碟驅動器27、磁碟驅動器28和光碟驅動器30分別通過硬碟驅動器接口32、磁碟驅動器接口33和光碟驅動器接口34連接至系統總線23。諸驅動器及其相關聯計算機可讀介質為個人計算機20提供計算機可執行指令、數據結構、程序模塊和其它數據的非易失性儲存。儘管在此所述示例性環境採用了硬碟、可移動磁碟29和可移動光碟31,但本領域技術人員應理解也可在示例性操作環境中使用其它類型計算機可訪問的能夠存儲數據的計算機可讀介質,諸如磁盒、快閃記憶體卡、數字視頻盤、Bernoulli卡、隨機存取存儲器(RAM)、只讀存儲器(ROM)等。
包括作業系統35、一個或多個應用程式36、其它程序模塊37和程序數據38的眾多程序模塊,可存儲在硬碟、磁碟29、光碟31、ROM 24或RAM 25中。用戶可通過諸如鍵盤40和定位裝置42的輸入裝置把命指令和信息輸入個人計算機20。其它輸入裝置(未示出)可包括諸如話筒、操縱戲杆、遊戲墊、衛星接收天線、掃描儀等等。這些和其它輸入裝置常常通過與系統總線相耦合的串行埠接口46連接到處理單元21,但是它也可通過其它接口相連,如並行埠、遊戲埠或通用串行總線(USB)。監視器47或其它類型的顯示裝置也通過諸如視頻適配器48的接口和系統總線23相連。除了顯示器47,個人計算機通常包括其它外圍輸出裝置(未示出),如揚聲器和印表機。圖1的示例性系統還包括主機適配器55、小型計算機系統接口(SCSI)總線56、以及與SCSI總線56相連的外部存儲裝置62。
個人計算機20可以在使用與一臺或多臺遠程計算機,諸如遠程計算機49的邏輯連接的網絡化環境中運行。遠程計算機49可以是另一臺個人計算機、伺服器、路由器、網絡PC、對等裝置或其它公共網絡節點,而且通常包括上述與個人計算機20相關的許多或全部元件,儘管在圖1中僅顯示了存儲器存儲裝置50。圖1中所描繪的邏輯連接包括區域網(LAN)51和廣域網(WAN)52。這樣的網絡化環境在辦公室、企業範圍計算機網絡、內聯網和網際網路上是常見的。
當用於LAN網絡環境中時,個人計算機20通過網絡接口或適配器53與LAN51連接。當用於WAN網絡環境中時,個人計算機20通常包括數據機54或其它用於在諸如網際網路的廣域網52上建立通信的裝置。可以是內置式或外置式的數據機54,與系統總線23通過串行埠接口46連接。在網絡化環境中,所述與個人計算機20相關的程序模塊或其一部分,可以存儲在遠程存儲器存儲裝置中。可以理解,所示網絡連接是示例性的,也可以使用其它在計算機之間建立通信連接的裝置。此外,儘管可以想像本發明的許多實施例都特別適於計算機化系統,本文檔中並無旨在將本發明限制在這些實施例的內容。
網絡化環境圖2示出了其中可採用本發明的示例性網絡環境。當然,實際的網絡和資料庫環境可以各種配置安排;然而,在此示出的示例性環境提供用於理解本發明在其中進行操作的環境類型的框架。
本網絡可包括客戶機計算機20a、伺服器計算機20b、數據源計算機20c和資料庫70、72a和72b。客戶機計算機20a和數據源計算機20c通過例如網際網路的通信網絡80與伺服器計算機20b進行電子通信。客戶機計算機20a和數據源計算機20c通過通信接口82與通信網絡相連。通信接口82可以是眾所周知通信接口的任一種,諸如乙太網連接、數據機連接等。
伺服器計算機20b通過資料庫伺服器系統軟體來提供資料庫70的管理,如下進行更全面描述。這樣,伺服器20b作為來自各種各樣數據源的數據倉庫,並向各種各樣的數據消費者提供數據。
在圖2示例中,數據源由數據源計算機20c提供。數據源計算機20c經可能是LAN、WAN、內聯網、乙太網等的通信網絡80將數據傳送給伺服器計算機20b。數據源計算機20c將數據本地存儲在可能是關係資料庫伺服器、excel電子表格、文件等的資料庫72a和72b中。例如,資料庫72a顯示數據存儲在表格150、152和154中。由數據源20c提供的數據被組合併存儲在較大資料庫中,諸如由伺服器20b維護的數據倉庫中。
想要使用由伺服器計算機20b存儲的數據時,客戶計算機20a經通信網絡80訪問資料庫70。客戶計算機20a通過對存儲於資料庫70的數據的SQL查詢(例如更新、插入和刪除)來請求數據。
二進位大型對象句柄本發明各實施例涉及二進位大型對象句柄(BH)。BH(以及其接口IBlobhandle)是對較大對象(LOB)(此後為「數據塊」)的不可變和無狀態引用的內部表示。使用BH,系統中所有LOB實例(包括二進位大型對象BLOB)可被合併成單個表示。實際上,BH是定位數據塊的引用,其中BH完整地描述該數據塊。BH本身可用(a)指向BH數據開始處的指針和(b)BH的字節長度來描述。
例如,在C++中,BH使用指向緩存區開始處的指針來支持類似常規C++對象的方法調用。BH的結構包含返回IlockBytes接口的足夠信息以便提供對相應數據塊的訪問,並且部分BH可支持消除相關聯存儲的「刪除」方法。BH還可返回有關其自己壽命描述的信息。此外,對於較小值BH將能把值包含於其本身,從而繞過對IlockBytes接口和虛擬方法調用的檢索以從獨立的數據塊中讀取。
圖3A是示出本發明各實施例中BH的一般組件的框圖。BH 300包括(a)對存儲在存儲器或盤存儲(「存儲」)310某處的相應數據塊312的開始位置的指針304的偏移302,以及(b)與存儲310中數據塊312的尺寸對應的長度306。該BH還包括單個比特的壽命描述(未示出)。
圖3B是示出圖3A相同BH的框圖,但其中所述BH 300的偏移302不指向外部引用的LOB,而是指向(304)完全包含於所述BH 310內的較小值320。
BH基礎結構在BH基礎結構中,較大值參數通過使用BH副本(而非數據塊副本)來處理以按命令將副本提供為輸入參數。通過使用由BH基礎結構提供的BH佚名機制,該經複製BH被作為指針引用傳遞。然而,如果數據塊的改變對該BH的一個部分是必需的,則複製該較大值且寫入BH會單獨指向該新副本;因而通常該複製功能在必要時會對輸出參數發生。
圖4A是一框圖,示出指向(404)數據塊412的起點BH 402以及創建表示數據塊412的虛擬副本412』但實際上指向(404』)同一數據塊412的第二BH 402』。然而,如圖4B所示,如果由第二BH 402』表示的「副本」中的數據(或相反,如果由BH 402表示的數據)要通過寫操作改變,則數據塊412將被真正複製到新的數據塊412」中,而第二BH 402』將指向(404』)這個第二數據塊412」。
然而,對於各個實施例,該BH基礎結構還可支持對數據塊的「部分更新」-即僅改變較大值一部分而不影響整個數據值的全副本的能力-以排除複製整個數據塊的某些必要性。操作中,部分更新確定(a)對應於數據塊的「組塊」(組塊是所述數據塊子部分)的替換值,(b)對數據塊中組塊開始處的「偏移」,和(c)要替換的組塊的字節長度(也對應於替換值的字節長度)。在邏輯上,該方法簡單地將數據塊偏移位置上字節長度數的字節(基本定義了主題組塊的邊界和範圍)替換成具有相同字節長度的前述替換值。在可選實施例中,替換值無需與要與被替換組塊具有相同字節長度,而可使用本領域技術人員眾所周知的各種方法(例如基於指針的方法)將較小或較大值置入該組塊。此外,這些技術的任一種都可用於前述並如圖4A和4B所示的虛擬副本概念。
在內部,部分更新可呈現為欄更新(可與其它部分或常規更新組合)的特定形式,且在可能時變化被置於盤存儲中而僅更改所需的B-樹特定部分。然而,在某些情形中,由於效率和魯棒性的原因系統可選擇將部分更新按全副本來實現,而在其它情形中更新將不部分地執行,而是執行全部的替換。在出現例如對劃分或群集鍵更新那樣需要將數據行移到不同物理位置的更新時,系統將部分更新按全副本來實現(即新值替換舊值)。這樣的理由是將行移到不同位置需要全副本,且在一個步驟中完成操作更為有效。應注意,系統不將包含部分更新的更新語句作為不可行而加以拒絕,但相反在前述情形中將選擇作為全副本實現。
部分更新基礎結構還考慮「萬聖節保護」(即被用作UPDATE(更新)中自變量的值也可更新它們自己)。
該部分更新基礎結構呈現出比先前基於文本指針技術的一大進步。假設部分更新是查詢處理器(QP)的已知操作,現在能夠使用過去在文本指針實現中受限的若干特徵,包括但不限於索引和被索引視圖維護、劃分、複製、和約束確認。
作為本發明若干實施例的BH基礎結構的一部分,底層存儲基礎結構還會具有欄的行內限制的概念。該限制確定與給定值被保留在主要頁面中相反的給定值被選定從行中移除的尺寸邊界。行內限制越小則從行中移除一欄越快,而較大的限制則具有相反效果。如本領域技術人員所理解和認識的,這反映了一種折衷,其中較小限制使較大數量的行能插入每一頁面,從而增加行密度和掃描性能,但較大值欄不是掃描的一部分。這樣,BH基礎結構允許內部可配置的每類行內限制。因而MAXV類可基於特定的行內限制展現一給定行為,而UDT或XML類型可選擇不同限制,並獲取更適於其尺寸和結構的不同的密度和掃描性能特徵。
BH方法和API對於本發明各實施例,BH可支持一個或多個以下方法,如下作更詳細描述interface IBlobHandle{publicvirtual const CBlobHandleProperties *PbhpGet( ) const=0;//返回二進位大型對象屬性virtual ILockBytesSS *PilbGetILockBytes(_IN_IlbGetFlags flags)const=0;//使用常規釋放以重新分配ILockBytesSS//ILockBytesSS可具有對AddRef的有限支持(例如,可不返回經更新的引用計數)virtual void Delete( ) const=0;//允許取消與臨時句柄(如果有)相關聯的存儲virtual BOOL FGetPointer(_OUT__OPT_LPCVOID *ppv,_OUT__OPT_ULONG *pcbLength) const=0;//如果為真,則向只讀數據返回指針+長度(提供不為空的參數)//如果為假,則存儲器內指針不可用。
};BH結構的典型實現從帶有在某些實例中附加的可選數據的IblobHandle接口中繼承。由於BH是自包含的且不具有指向它自己的內嵌指針,無需有關其駐留的存儲器的假設。因此,要複製BH僅需簡淺的副本。這使系統能以與處理常規欄的相同方法來處理BH。
儘管BH被用以查找相應的數據塊,它並不提供接口來處理該數據塊的LOB數據。相反,對某些實施例可使用PilbGetILockBytes方法來檢索用於數據處理的ILockBytesSS。所支持的精確IlockBytesSS方法集在BH實現上會變化但通常分成兩類(i)僅支持讀取操作的只讀LOB,諸如表示來自用戶表格且通常為只讀的數據(部分更新情形例外);以及(ii)支持對數據塊讀取和更新的讀寫LOB,諸如用以存儲臨時LOB值的臨時BH。
在某些實施例中,可調用BH上的刪除方法以便刪除與該BH相關聯的LOB值。然而,僅有部分BH會支持該操作(例如臨時BH)而其它不會支持(例如來自用戶表格的BH)。無論如何,刪除操作是無故障的,這對於處理清空以確保自動解構器不出故障是有用的。
某些實施例中的BH還支持FgetPointer方法,它作為IlockBytesSS的替代方法可被用以返回指向LOB數據塊的指針及其長度,因而提供了用於訪問較小隻讀數據的一種較快速方法。然而,如果該數據塊不包括較小隻讀數據,該方法可返回「假」以指示應替代地使用PilbGetILockBytes方法來訪問數據。
對於各個實施例,除刪除外的BH API方法都可產生例外。
BH屬性在若干實施例中PbhpGet方法返回作為BH屬性封裝的CblobHandleProperties。通常許多BH共享公共屬性,而經指針(CBlobHandleProperties*)對屬性的比較可被用以辨別BH的「傾向選擇」(例如,BH指向用戶表格中的數據還是指向「定製」數據塊;BH傾向選擇在後面進行更詳細描述)。
若干實施例利用「壽命」屬性用作BH引用有效的時間長度。例如,BH在某些種類的事件之後可不再與現有的LOB值相關聯。對於某些實施例,可簡便地分配給該屬性兩值「查詢壽命」或「行壽命」(或其它二進位等效表示)之一。「行壽命」表示,相關聯的LOB值僅在查詢執行(QE)迭代器在處理當前行時才能訪問,且一旦迭代器繼續到下一行該BH就不再與該LOB值相關聯(因而經該BH的任何其它訪問都被禁用)。另一方面,「查詢壽命」將表示直到查詢結束之前(或者在其它非查詢情形中直到消除或關閉「BH工廠」之前,BH工廠在其它地方詳細討論)該LOB值都是有效的。
BH傾向選擇(Favor)本發明若干實施例包括BH的一種或多種「傾向選擇」,所述傾向選擇包括以下BH實現變體·「表格」BH,指向用戶表格中數據塊(且通常具有「查詢壽命」)。
·「臨時」BH,使用BH工廠(在其它地方討論)創建用於臨時利用。
·「內嵌」BH,對於充分小的數據塊在BH主體中包含整個的數據塊。對於該傾向選擇,ILockBytesSS接口也可在BH主體之內從而PilbGetILockBytes方法將非常快速和有效地改變。
·「佚名」BH,將方法調用重新指向另一BH,它在某些操作中特別有用,諸如將比TEMPBLOBHANDLE_SIZE(預定義尺寸限制)大的BH轉換成小於或等於TEMPBLOBHANDLE_SIZE的BH(如下進行更詳細描述)。
·「包裝器」BH,使訪問重新指向現有ILockBytesSS對象。這在用來將現有的IlockBytes對象從另一源中(例如從OLEDB)「投射」入BH時特別有用。
·「孤立」BH,屬於特定文件組且在後來可與用戶表格連結。在操作中,當較大值流入系統時,該較大值可被直接複製到孤立BH中,且一旦數據全部流入,該BH可變成無需附加副本而插入(或「採用」)的表格的一部分。因而這類BH可用來最小化副本並改進諸如BULK INSERT(批量插入)語句的高性能批量操作的性能。
BH最大尺寸對於某些實施例,包含BH需要有關最大緩存區尺寸的假設。對於這些實施例,QE通常會使用從查詢優化器(QO)導出的最大尺寸,儘管最大的BH尺寸也可被定義為常數,例如const BLOBHANDLE_SIZE=8000。然而,「臨時」BH可具有基於處理器結構的限制,例如對32比特體系結構定義為const TEMPBLOBHANDLE_SIZE=0x40。該方法背後的主要概念是,大部分組件會通過引用來訪問BH(而不分配它們自己的緩衝區)或使用臨時BH來輸出數據塊的較大值。因此,如果BH將持續則需要分配較小的緩衝區(即TEMPBLOBHANDLE_SIZE的尺寸)。另一方面,QE通常將使用大得多的BH。然而,要著重考慮的是幾乎任何組件可處理TEMPBLOBHANDLE_SIZE尺寸的BH,但如果BH比該值大且對查詢執行之外的組件可見,則它必須通過其相關聯指針訪問。例如,如果QE向語言處理和執行組件(LPE)展現較大BH,則LPE通常不將較大BH複製到它自己的緩衝區內,因而必須使用指向QE緩衝區的指針。
BH工廠(Factory)BH工廠(BHF)是一個創建新BH的對象。一般而言,可能沒有所有BF工廠都支持的公共接口,但有「臨時BH工廠」(TBHF)所支持的公共接口,從而臨時數據塊被用以存儲較大數據由一個或多個組件處理。在後者情形中,IBlobHandleFactory指針從一個組件被傳送到另一組件用於繼續處理,而TBHF使表示較小值(例如小於8K)的數據塊處理更有效的最優化(如上所述)。還有支持來自多線程的並行訪問的特定BHF(如下進行更詳細描述)。
以下方法使用TBHF創建BH//函數在特定緩存區內創建BH。緩存區尺寸是輸入/輸出參數並返回被創建的句柄尺寸。
virtual void CreateNewBlobHandle(IBlobHandle *pbh,ULONG cbBufferSize,CreateNewBlobHandleFlags flags)=0;在某些實施例中,該方法創建與「空」LOB值相關聯的新的BH,然後使用ILockBytesSS將數據寫入該BH,並可使用關閉和釋放BH(ILockBytesSS∷Close和ILockBytesSS∷Release)的其它方法。
一般而言,BHF可服務多個線程,即使創建該BHF的特定線程擁有該特定BHF並且是到時允許清空BHF的僅有線程。BHF還可通過用給定組標號來標記成員BH從而在組合中創建BH。這使BHF能提供服務用於以單個操作釋放與給定組相關聯的所有BH。
取決於BHF,由BH創建的BH可由盤或存儲器備份。BHF開始時(並最好)不具有與其相關聯的特定盤存儲,但一般而言在第一次使用時或通過顯式請求按命令創建存儲。這樣,本發明各個實施例利用一類或多類BHF,包括但不小於以下·快速BHF這些BHF創建僅存儲器內的BH,它通過使用存儲器備份而不是永久的盤存儲來支持較小值。一般而言,BH基礎結構會在可能時嘗試使用快速BHF,但在需要時可回到較慢的盤備份存儲。
·盤備份BHF這些BHF創建由盤存儲備份的BH,且可保存任意大的值(盤空間允許時)。
MAX指示符和MAXV類型使用BH,本發明各實施例還涉及使用varchar、nvarchar和varbinary數據類型(此後一起稱為「V類」)的MAX指示符。例如,表格列和TSQL變量在定義/聲明時間可指定varchar(MAX)、nvarchar(MAX)或varbinary(MAX)(此後一起稱為「MAXV類」)。操作中,MAXV類列和變量會將「MAX」關鍵字用作類型尺寸的指示符,且這樣的值可基於系統可支持的尺寸來定義-例如varchar(MAX)!=varchar(有效數字)-即使在聲明時可用以指定varchar或varbinary的最大尺寸的最大面值對於nvarchar而言可持續到8000和4000。(通常varchar或varbinary列具有最大尺寸8000,但MAX關鍵字使用BH基礎結構準予其最大尺寸等於系統可支持最大值的列。)在各個可選實施例中,一個或多個下列操作和功能將可對MAXV類支持比較;TSQL變量;串聯;某些字符串功能;全部的SELECT(選擇)語句支持,包括DISTINCT(獨特的)、ORDER BY(按其排序)、GROUP BY(按其分組)、累計、結合、子查詢等等;CHECK(檢查)約束、RULES(規則)和DEFAULTS(預設)(對於當前LOB發生時大於8K的不再被默認地截短);成為索引視圖定義的一部分;AFTER(之後)觸發器上插入/刪除表格的可見性;以及數據類型轉換;允許在FFO光標中;FETCH…INTO…@variable(變量);SET ANSI_PADDING;SETCONCAT_NULL_YIELDS_NULL;全文本搜索;以及CREATE TYPE(以替換sp_addtype)等等。然而,由於真正和實質的尺寸差異,對於本發明部分實施例MAXV類和V類之間的微弱差異會繼續存在,包括但不小於以下sql_variant仍不包含MAXV類;MAXV類列在索引中不能被指定為關鍵詞列(儘管允許它們被用作索引子鍵);以及MAXV類列不能被用作劃分關鍵詞列。然而,將列的前綴指定為索引或索引視圖關鍵詞是被允許的。這可使系統能自動考慮索引以便快速檢索符合某些類型的涉及MAXV類列的謂詞的行。例如,形式為[Varchar(MAX)column]=Value(值)的謂詞可由系統自動分成Prefix([Varchar(MAX)column])=Prefix(Value)AND[Varchar(MAX)column]=Value。在該列前綴上的隱含謂詞可允許索引的使用。
為了確保反向的兼容性,當將數據往下層發送給不支持MAXV類的客戶機時,varchar(MAX)、nvarchar(MAX)和varbinary(MAX)數據類型將分別作為LOB類文本、n文本和圖像類型發送。相反,遷移支持對於來自客戶機從上層接收的LOB類文本、n文本和圖像數據形式的數據,將被分別轉換成varchar(MAX)、nvarchar(MAX)和varbinary(MAX)數據類型。
結論在此所述的各種系統、方法和技術可用硬體或軟體,或在適當時結合兩者的組合來實現。因而,本發明的方法和裝置,或者其中的某些方面和部分,可取諸如軟盤、CD-ROM、硬碟驅動器、或任何其它機器可讀存儲介質的有形介質中包含程序代碼(即指令)形式,其中當程序代碼由諸如計算機的機器載入並執行時,該機器成為用於實踐本發明的裝置。在可編程計算機上的程序代碼執行情形中,計算機通常包括處理器、處理器可讀的存儲介質(包括易失性和非易失性存儲器和/或存儲元件)、至少一個輸入設備、和至少一個輸出設備。一個或多個程序最好用高級過程或面向對象程式語言來與計算機通信。然而,如果需要這些程序可用彙編或機器語言實現。在任一情形中,語言可以是編譯或解釋語言,並可與硬體實現相結合。
本發明的方法和裝置也可以用通過傳輸介質傳輸的程序編碼形式來體現,諸如通過電線或電纜、通過光纖、或通過任何其它傳輸方式傳輸,其中,當程序編碼被諸如EPROM、門陣列、可編程邏輯器件(PLD)、客戶計算機、視頻記錄儀等接收、載入並執行時,這種機器就變成實踐發明的裝置了。當在通用處理器上實現時,程序代碼結合處理器來提供一種能操作來實現本發明索引功能的獨特裝置。
儘管本發明已結合各種情形的優選實施例進行了描述,要理解可使用其它類似實施例,或者可對所述實施例作更改和添加用於執行本發明的系統功能,而沒有偏離本發明。例如,儘管是在仿真箇人計算機功能的數字裝置的環境中描述本發明示例性實施例的,本領域技術人員間理解本發明並不限於這樣的數字裝置,因為在本申請中所述的可適用於任何數量的現有的或將出現的計算裝置或環境,諸如無論是有線或是無線的遊戲控制臺、手持式計算機、可攜式計算機等,還可適用於任何數量的經通信網絡連接或通過網絡交互的計算裝置。此外,應強調專利考慮到包括手持式裝置作業系統和其它應用專用的硬體/軟體接口系統的各種計算機平臺,特別是當無限網絡裝置的數量持續激增時。因此,不應把本發明限制在任一單個實施例中,而應當根據所附權利要求在廣度和範圍中進行解釋。
最後,在此所述的已揭示實施例可適於在其它處理器體系結構、基於計算機的系統、或系統虛擬化中使用,而這樣的實施例可由在此所作的揭示明確地預期到,因此,本發明不應受限於在此所述的特定實施例,而相反應最廣泛地加以解釋。
權利要求
1.一種用於在計算機系統中處理較大數據對象的方法,其特徵在於,所述方法包括創建表示所述較大數據對象的一處理結構,其中所述處理結構可通過可用於較小數據對象但不能處理所述較大數據對象的功能、操作等由所述計算機系統來處理。
2.如權利要求1所述的方法,其特徵在於,指向第一較大數據對象的第一處理結構通過創建指向所述同一第一較大數據對象的第二處理結構來虛擬地複製,假設所述第一處理結構和所述第二處理結構不將變化寫入所述第一較大數據對象。
3.如權利要求2所述的方法,其特徵在於,如果所述第一處理結構必須將變化寫入所述第一較大數據對象,則所述第一較大數據對象被複製到第二較大數據對象中且所述第二處理結構在所述第一處理結構將所述變化寫入所述第一較大數據對象之前就指向所述第二較大數據對象。
4.如權利要求2所述的方法,其特徵在於,如果所述第二處理結構必須將變化寫入所述第一較大數據對象,則所述第一較大數據對象被複製到第二較大數據對象中且所述第二處理結構指向所述第二較大數據對象,且所述第二處理結構將把所述變化寫入所述第二較大數據對象。
5.如權利要求1所述的方法,其特徵在於,用相應處理結構將具有一類型的數據對象轉換成較大數據對象,該類型來自包括文本、n文本和圖像數據類型(或其等效實體)的類型組。
6.如權利要求5所述的方法,其特徵在於,類型為文本、n文本、或圖像數據類型(或等效數據類型)的數據對象被分別轉換成類型varchar(MAX)、nvarchar(MAX)和varbinary(MAX)的數據對象,其中varchar(MAX)、nvarchar(MAX)和varbinary(MAX)包括一處理結構而MAX對應於預定的最大尺寸值。
7.如權利要求1所述的方法,其特徵在於,所述處理結構對應於較小值數據對象,且所述較小值數據對象完全存儲於所述處理結構中。
8.如權利要求1所述的方法,其特徵在於,還包括用於所述處理結構的刪除操作,其中如果所述處理結構是第一類型的,則刪除所述處理結構和相應的較大數據對象,且其中如果所述處理結構是第二類型的,則刪除所述處理結構而不刪除所述相應的較大數據對象。
9.如權利要求1所述的方法,其特徵在於,所述處理結構具有壽命,且所述處理結構包括具有與所述壽命相對應的值的一欄位。
10.如權利要求1所述的方法,其特徵在於,所述處理結構響應於處理結構的需要由處理結構工廠創建。
11.一種用於在計算機系統中處理較大數據對象的系統,其特徵在於,所述方法包括用於創建表示所述較大數據對象的一處理結構的子系統,其中所述處理結構可通過可用於較小數據對象但不能處理所述較大數據對象的功能、操作等由所述計算機系統來處理。
12.如權利要求11所述的系統,其特徵在於,指向第一較大數據對象的第一處理結構通過創建指向所述同一第一較大數據對象的第二處理結構來虛擬地複製,假設所述第一處理結構和所述第二處理結構不將變化寫入所述第一較大數據對象。
13.如權利要求12所述的系統,其特徵在於,如果所述第一處理結構必須將變化寫入所述第一較大數據對象,則所述第一較大數據對象被複製到第二較大數據對象中且所述第二處理結構在所述第一處理結構將所述變化寫入所述第一較大數據對象之前就指向所述第二較大數據對象。
14.如權利要求12所述的系統,其特徵在於,如果所述第二處理結構必須將變化寫入所述第一較大數據對象,則所述第一較大數據對象被複製到第二較大數據對象中且所述第二處理結構指向所述第二較大數據對象,且所述第二處理結構將把所述變化寫入所述第二較大數據對象。
15.如權利要求11所述的系統,其特徵在於,用相應處理結構將具有一類型的數據對象轉換成較大數據對象,該類型來自包括文本、n文本和圖像數據類型(或其等效實體)的類型組。
16.如權利要求15所述的系統,其特徵在於,類型為文本、n文本、或圖像數據類型(或等效數據類型)的數據對象被分別轉換成類型varchar(MAX)、nvarchar(MAX)和varbinary(MAX)的數據對象,其中varchar(MAX)、nvarchar(MAX)和varbinary(MAX)包括一處理結構而MAX對應於預定的最大尺寸值。
17.如權利要求11所述的系統,其特徵在於,所述處理結構對應於較小值數據對象,且所述較小值數據對象完全存儲於所述處理結構中。
18.如權利要求11所述的系統,其特徵在於,還包括用於所述處理結構的刪除操作,其中如果所述處理結構是第一類型的,則刪除所述處理結構和相應的較大數據對象,且其中如果所述處理結構是第二類型的,則刪除所述處理結構而不刪除所述相應的較大數據對象。
19.如權利要求11所述的系統,其特徵在於,所述處理結構具有壽命,且所述處理結構包括具有與所述壽命相對應的值的一欄位。
20.如權利要求11所述的系統,其特徵在於,所述處理結構響應於處理結構的需要由處理結構工廠創建。
21.一種包括用於在計算機系統中處理較大數據對象的計算機可讀指令的計算機可讀介質,其特徵在於,所述計算機可讀指令包括各指令,用於創建表示所述較大數據對象的一處理結構,並處理帶有可用於較小數據對象但不能處理所述較大數據對象的功能、操作等的所述處理結構。
22.如權利要求21所述的計算機可讀介質,其特徵在於,還包括指令,通過所述指令,指向第一較大數據對象的第一處理結構通過創建指向所述同一第一較大數據對象的第二處理結構來虛擬地複製,假設所述第一處理結構和所述第二處理結構不將變化寫入所述第一較大數據對象。
23.如權利要求22所述的計算機可讀介質,其特徵在於,還包括指令,通過所述指令,如果所述第一處理結構必須將變化寫入所述第一較大數據對象,則所述第一較大數據對象被複製到第二較大數據對象中且所述第二處理結構在所述第一處理結構將所述變化寫入所述第一較大數據對象之前就指向所述第二較大數據對象。
24.如權利要求22所述的計算機可讀介質,其特徵在於,還包括指令,通過所述指令,如果所述第二處理結構必須將變化寫入所述第一較大數據對象,則所述第一較大數據對象被複製到第二較大數據對象中且所述第二處理結構指向所述第二較大數據對象,且所述第二處理結構將把所述變化寫入所述第二較大數據對象。
25.如權利要求21所述的計算機可讀介質,其特徵在於,還包括指令,通過所述指令,用相應處理結構將具有一類型的數據對象轉換成較大數據對象,該類型來自包括文本、n文本和圖像數據類型(或其等效實體)的類型組。
26.如權利要求25所述的計算機可讀介質,其特徵在於,還包括指令,通過所述指令,類型為文本、n文本、或圖像數據類型(或等效數據類型)的數據對象被分別轉換成類型varchar(MAX)、nvarchar(MAX)和varbinary(MAX)的數據對象,其中varchar(MAX)、nvarchar(MAX)和varbinary(MAX)包括一處理結構而MAX對應於預定的最大尺寸值。
27.如權利要求21所述的計算機可讀介質,其特徵在於,還包括指令,通過所述指令,所述處理結構對應於較小值數據對象,且所述較小值數據對象完全存儲於所述處理結構中。
28.如權利要求21所述的計算機可讀介質,其特徵在於,還包括指令用於所述處理結構的刪除操作,其中如果所述處理結構是第一類型的,則刪除所述處理結構和相應的較大數據對象,且其中如果所述處理結構是第二類型的,則刪除所述處理結構而不刪除所述相應的較大數據對象。
29.如權利要求21所述的計算機可讀介質,其特徵在於,還包括指令,通過所述指令,所述處理結構具有壽命,且所述處理結構包括具有與所述壽命相對應的值的一欄位。
30.如權利要求21所述的計算機可讀介質,其特徵在於,還包括指令,通過所述指令,所述處理結構響應於處理結構的需要由處理結構工廠創建。
全文摘要
本發明各實施例涉及利用作為較大值內部表示的二進位大型對象句柄(BH)。BH是對較大數據對象的不可變和無狀態的引用。BH的結構包含返回ILockBytes接口的足夠信息以便提供對相應大數據塊的訪問,並且BH還可返回有關它自己壽命描述的信息。可使用(a)指向BH數據開始處的指針和(b)BH的字節長度來完整地描述BH。
文檔編號G06F17/30GK1723462SQ200480001703
公開日2006年1月18日 申請日期2004年7月29日 優先權日2004年2月10日
發明者S·阿施威恩, J·A·布萊克雷, P·卡林, J·方, A·卡爾漢, C·科蘭納曼, S·斯特凡尼, A·瑟納, H·張 申請人:微軟公司