用于数据库系统中大对象基础结构的系统和方法

文档序号:6476147阅读:194来源:国知局
专利名称:用于数据库系统中大对象基础结构的系统和方法
技术领域
本发明一般涉及数据库系统领域,尤其涉及用于提供大对象基础结构的系统和方法,该基础结构可用于大对象数据类型(文本、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·张 申请人:微软公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1