首页> 中国专利> 存储和检索在定义类型的数据库存储外的用户定义类型的字段的系统和方法

存储和检索在定义类型的数据库存储外的用户定义类型的字段的系统和方法

摘要

一种能在数据库存储中持久保存的对象类型是由用户来定义的。这种类型定义包括字段和行为,每个字段有各自的数据类型。一个或者多个类型定义的字段可以被指定为包含了在数据库存储外部作为一个文件被存储的类型的数据,并且这些字段与类型定义的其它字段分开。当接收到存储用户定义类型的实例的对象的请求时,在任一这样被指定的对象字段中的数据被存储在数据库存储之外的一个文件中,较佳地存储在数据库存储得以实现的计算机文件系统中。在对象的每个其它字段中的数据以普通方式存储在数据库存储内。数据库存储在持久保存的对象和在数据库外部存储为文件的字段数据之间维持一链接或引用。通过计算机文件系统,对应用程序对提供了文件的“带外”访问,在该文件中给定字段的数据被存储在数据库存储之外。

著录项

  • 公开/公告号CN1735890A

    专利类型发明专利

  • 公开/公告日2006-02-15

    原文格式PDF

  • 申请/专利权人 微软公司;

    申请/专利号CN200480001715.3

  • 发明设计人 R·B·拉杰恩;B·S·拉曼;K·严;

    申请日2004-07-29

  • 分类号G06F17/30(20060101);

  • 代理机构31100 上海专利商标事务所有限公司;

  • 代理人钱慰民

  • 地址 美国华盛顿州

  • 入库时间 2023-12-17 16:59:29

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2015-05-13

    专利权的转移 IPC(主分类):G06F17/30 变更前: 变更后: 登记生效日:20150421 申请日:20040729

    专利申请权、专利权的转移

  • 2008-12-31

    授权

    授权

  • 2006-09-20

    实质审查的生效

    实质审查的生效

  • 2006-02-15

    公开

    公开

说明书

相关申请的交叉引用

本申请要求于2003年10月23日提交的美国专利临时申请第10/692,227号的优先权,该专利申请整体引用在此作为参考。

版权声明和许可

该专利文件的一部分公开内容可能包括从属于版权保护的材料。版权拥有者对任何专利文件或者专利公开内容,按照它出现在专利商标事务所专利文件或记录中即样进行传真复制没有异议。但是另一方面,不论发生任何情况,版权拥有者都保留所有的版权权利。下面的声明适用于该文件:Copyright2003,MicrosoftCorp。

发明领域

本发明涉及计算机系统的数据存储,尤其涉及在类型定义的数据库存储之外存储和检索用户定义类型字段的系统和方法。

背景

Microsoft SQL SERVER是一个综合的数据库管理平台,该平台提供了广泛的管理和开发工具,一个强大的提取,变换和加载(ETL)工具,商业智能和分析服务,以及其它功能。对SQL SERVER的两个改进最近也得到实现。第一个是MicrosoftWindows.NET框架公用语言运行时间环境(CLR)已经集成在SQL SERVER数据库中。第二个是一个新对象,称为用户定义类型(UDT),现在能在CLR环境中由受管代码创建并且在数据库存储中持续存在。

CLR是Microsoft.NET框架的核心,并为所有的.NET代码提供了运行环境。因而,在CLR中运行的代码称作“受管代码”。CLR提供了程序执行所需要的各种函数和服务,包括即时(JIT)编译,分配和管理内存,强制类型安全,异常处理,线程管理和安全。目前CLR在.NET例程第一次调用时由SQL SERVER装载。

在先前版本的SQL SERVER中,数据库程序员在服务器端编写代码时限制为使用Transact-SQL。Transact-SQL是由国际标准化组织(ISO)和美国国家标准化组织(ANSI)定义的结构化查询语言的扩展。通过使用Transact-SQL,数据库开发者能够创建,修改和删除数据库和表,也能够插入,检索,修改和删除存储在数据库中的数据。Transact-SQL是专门为直接结构化数据访问和操作而设计的。尽管Transact-SQL擅长于数据访问和管理,但是它不像Visual Basic.NET和C#,它不是一种发展完全的程序设计语言。举例来说,Transact-SQL不支持数组,集合,用于每个循环,位移或类。

随着CLR嵌入SQL SERVER数据库中,数据库开发者现在能够执行单独用Transact-SQL不可能或很难实现的任务。Visual Basic.NET和C#都是可以提供对数组,结构化异常处理和容器完全支持的现代程序设计语言。开发者能够调整CLR集成环境以使用诸如Visual Basic.NET和C#这样的语言来编写具有更复杂逻辑和更适合计算任务的代码。

除了CLR集成之外,SQL SERVER也增加了对用户定义类型(UDT)的支持——一个使开发者能够扩展数据库标量类型系统的新机制。UDTs提供了来自应用程序体系结构前景的两点关键利益:他们提供了在内部状态和外部行为之间的强封装(在客户机和服务器中),而且他们提供了其它相关服务器特征的深度集成。一旦一个UDT被定义,它能够在SQL SERVER中系统类型能够使用的所有内容中得到使用,包括在列定义,变量,参数,函数结果,光标,触发器和复制器中。

在数据库服务器上定义UDT的过程完成如下:

a)在受管代码中创建一个遵循UDT创建规则的类;

b)使用CREATE ASSEMBLY语句把包含UDT的汇编装入服务器上的数据库;并且

c)使用CREATE TYPE语句在数据库中创建暴露受管代码UDT的类型。

在这点上,UDT能够在表定义中使用。

当一个UDT定义在受管代码中创建时,类型必须满足以下需求:

a)它必须标记为可序列化化的;

b)它必须用SqlUserDefinedTypeAttribute来修饰;

c)该类型通过实现INullable接口应该是NULL有效的;

d)类型必须有一个不带形式参数的公共构造函数,并且

e)类型应该通过实现以下方法来支持到字符串和从字符串的转换:

1 Public String ToString();和

2 Public Shared<type>Parse(SqlString s).

共同待批,共同分配的,专利申请序列号no.__,于此提交的标题为“数据库存储中对象持续性的系统和方法”(代理号:MSFT-2852/306819.1),通过整体引用合并于此,描述了UDTs的另一个特性,其中UDT的CLR类定义的字段和行为用存储属性来注释,该存储属性描述了在数据库存储中UDT实例的设计结构。特别地,每个定义UDT的CLR类的字段由存储属性来注释,该属性控制了类型的存储方面,比如大小,精确度,比例等。在一个具体实施例中,这是通过用定制的称作SqlUdtField()的存储属性注释每个字段来实现的。这个属性是用附加的存储指示来注释字段的。这些指示当对象被序列化到磁盘时得到执行。附加地,每个在CLR类中定义的受管行为(例如,一个在UDT对象中被调用的方法,举例来说,返回字段值)用指示受管行为的等效结构访问路径的属性来注释。在一个具体实施例中,用做这个目的的定制属性称作SqlUdtProperty(),并且数据库服务器(例如SQL SERVER)假定用定制属性注释的性质的实现将委托特定的字段作为属性定义的一部分。这让服务器不用在其上创建实例和调用行为来结构性优化对属性的访问。

图1是定义UDT的CLR类的一个示范性的代码列表。如图所示,CLR类由SqlUdtField()和SqlUdtProperty()定制特性注释成上述形式。

定义UDT的CLR类然后被编译成动态连接库(d11)。随后通过使用以下的T-SQL脚本命令,包含编译好的类的汇编程序被创建:

create assembly test

from‘c:\test.dll’

go

以下的T-SQL脚本命令可以用来在服务器端创建UDT:

create type BaseItem

external name[test]:[BaseItem]

go

一旦已经在服务器端创建一个UDT,随后能创建一个表属性将其定义为UDT类型的表(例如“MyTable”),如下:

create table MyTable

(

    Item BaseItem,

    ItemId as item∷ID

)

go

一个新条目加入表中,如下:

declare @i BaseItem

set @i=convert(BaseItem,’)

insert into MyTable values(@i)

go

UDT表达式能这样用在查询中,比如:SELECT Item.ID,Item.Name FROM My Table.

由于CLR在SQL SERVER中的集成以及在受管代码的类定义中定义UDTs的能力,应用程序现在能够实例化受管代码类定义的类型对象,能够使那些对象在关系数据库存储中作为UDT持续存在。而且,定义UDT的类也能够包括在那种类型对象上实施特定行为的方法。因此,应用程序能够实例化定义为UDT类型的对象,并且能够调用它们的受管行为。

当已经定义为UDT的类的对象在CLR中实例化时,对象能够通过对象序列化过程在数据库存储中持续存在,其中类的变量值传输到物理存储器中(例如硬盘)。图2图示了内存中的对象序列化为磁盘上持续形式。对象可能以图3所示的传统关系数据库表的形式持续存储在数据库存储中。如示,该表包含一列特定的UDT。一个特定UDT的持久保存的对象的序列化值占有UDT列中的一个单元。

再次涉及图2,当应用程序产生一个包括涉及已经持久保存在数据库存储中的UDT对象的受管行为的谓词或者表达式的查询时(例如,一个返回UDT对象的字段值的行为),持久保存的对象一定是反序列化的(有时候也称作“水合”),CLR必须为了接收对象的存储值来给整个对象分配内存。CLR必须调用UDT类的返回查询主题值的实际方法(即行为)。如在上述的共同待批的申请序列号(代理记录号:MSFT-2852/306819.1)中所描述,在UDT的CLR类定义中的SqlUdtField()和SqlUdtProperty()注释能够被数据库服务器用来在不需要对象水合的情况下也允许对某些UDT字段值进行直接结构访问。

一种利用CLR集成和SQL SERVER中UDTs的提供的新技术是存储平台,该平台已经在2003年8月21日标题为“存储平台用来组织,搜索和共享数据”的共同待批,共同分配的专利申请第10/646,646中描述,该专利的公开文本整体引用在此作为参考。图4是一个说明了在这个共同待批的申请中描述的存储平台300的体系的框图。存储平台有时候称作“WinFS”。如图4所示,存储平台300包含了在数据库引擎314上执行的数据存储器302。在一个具体实施例中,数据库引擎包含一个关系数据库引擎,例如Microsoft SQL SERVER关系数据库引擎。

数据存储器302实现了为组织,搜索,共享,同步和以条目和条目之间关系的形式的数据的安全性提供支持的数据模型304,如下会更全面的描述。条目的特定类型在模式中描述,例如模式340,并且存储平台300提供了工具346来配置那些模式,同时扩展那些模式,如下会更全面的描述。

在数据存储器302中实行的变化跟踪机制306提供了跟踪对数据存储变化的能力。数据存储器302也提供了安全性能308和提升/降级性能310。数据存储器302也提供了一套应用程序编程接口312使数据存储器302的性能暴露给其他存储器平台组件和利用该存储平台的应用程序(例如应用程序350a,350b和350c)。

存储器平台更进一步包含一个应用程序编程接口(API)322,该接口能够使像350a,350b和350c这样的应用程序访问存储平台的性能和存储在数据库中的数据。存储平台API 322可以在结合其他诸如OLE DB API 324和Microsoft WINDOWSWin32 API 326这样的APIs而被应用程序所使用。

存储平台300也能够提供各种应用程序的服务328,包括便于在用户或系统之间共享数据的同步服务330。举例来说,同步服务330能够使和数据存储器302有相同格式的其他数据存储器340有互操作性,能够访问具有其他格式的数据存储器342。数据平台300也提供了文件系统性能,允许与现有文件系统的数据存储器302的互操作性,比如WINDOWS NTFS文件系统318。

在至少一些具体实施例中,存储平台320也可以提供附加的性能器给应用程序,来使数据起作用以及和其他系统交互。这些性能可以以像信息代理服务334和通知服务332这样的附加服务328的形式体现,也可以以其它工具336形式体现。

在至少一些具体实施例中,存储平台在计算机系统的硬件/软件接口系统中实例化或者形成为其主要部分。举例来说,没有限制的,本发明的存储平台可能在操作系统,虚拟机监督系统(VMM),公用语言运行期环境(CLR)或它的功能等价物,或者Java虚拟机(JVM)或它的功能等价物中实例化,或者形成其中的主要部分。

通过它的通用存储基础和格式化数据,存储平台能够使客户机,知识工人和企业的应用程序开发更有效率。它提供了一个丰富易扩展的编程表面区域,该区域不仅使固有在它的数据模型中的性能有用,而且包含和扩展现有文件系统和数据库访问方法。

在下面的描述中,在各式图表中,本发明的存储平台300可能被称为“WinFS”。然而,使用这个名字来指代存储平台仅仅是为了方便描述而不是规定限制为这样的叫法。

WinFS平台的数据模型按照条目,条目扩展和关系定义了数据存储的单元。“条目”是存储信息的基本单元。数据模型提供了一种机制来宣称条目和条目扩展以在条目间建立关系。条目是能够使用如复制,删除,移动,打开等操作来存储和检索的单元。条目被规定为代表现实世界和容易理解的数据单元,就象合同,人,服务,位置,文件(所有各种类别)等等。条目扩展是一种扩展已存在条目定义的方法,并且关系是定义在条目之间的连接。

在WinFS中,为了存储信息不同的条目类型被定义。举例来说,条目类型被定义为合同,人,位置,文件等等。每个条目类型由模式来描述模式定义了给定条目的属性和特征。举例来说,一个“位置”条目可以被定义成具有如EAddress,城府范围,街区和邮政地址的属性。一旦一个模式为一个给定条目类型被定义,使用配置工具把模式转化成与那个条目类型相应的CLR类定义,然后根据CLR类定义在数据库存储中创建UDT(以上述的方式),以使WinFS条目类型的实例在数据库存储中持久保存。通过使用WinFS API 322,为了存储和检索来自存储平台数据存储的信息应用程序(例如应用程序350a,350b,350c等)能够创建数据库存储支持的条目类型实例。每个存储在数据存储器中的条目类型实例都有一个唯一的标识符(例如Item ID)与之相关联;在一个具体实施例中,每个条目标识符是一个全局唯一标识符,例如“guid”。因而,WinFS平台对CLR集成和数据库存储的UDT性能器起到杠杆作用,为存储信息条目提供了一个平台。

如同任何一个SQL SERVER中的UDT实例,WinFS条目的实例最终以图3描述的方法存储在数据库存储的表中。然后应用程序能够提交查询给WinFS平台来从数据存储器里搜寻和检索满足查询条件的条目。图5显示了一个查询怎样在数据存储器中执行来检索称作“Person”的条目类型实例。在第(1)步中,应用程序使用了WinFS API 322中的“FindAll”方法来初始化一个对满足特殊搜索准则的所有条目的查询-在这个例子中,是满足该类型的“Birthday”字段的值大于一个特定日期(比如1999年12月31日)的所有Person类型的实例。在第(2)步中,WinFS API 322把“FindALL”操作转化成SQL查询并提交该查询到基础数据库引擎,比如SQL SERVER。在第(3)步中,数据库引擎在相应的Person UDT实例上执行查询并且返回每个匹配Person UDT实例的存储值。在该例中,在第(4)步中,ADO.Net把从数据库存储中返回的位转化成CLR对象(也就是前面讨论的对象水合作用的过程),并且把他们返回到WinFS API 322。ADO.Net是Microsoft.NET框架的一个组件,该框架提供受管代码经由CLR到像SQL SERVER数据源的访问。然后WinFS API给Person UDT对象打包并且将它们作为Person类型条目返回给应用程序。

尽管在数据库存储中创建用户定义类型(UDTs)的能力是一种强大的性能,将性能提高到为了存储某些数据类型作为UDT的定义字段而提供支持的水平会将会变得理想,这些数据类型比如大数据类型,包括像数字图像,视频,音频等等。更进一步,提供对UDT的大型数据字段的“带外”访问以至于它们能够经由传统文件系统调用(打开,关闭等)而不用数据库存储的基础查询语言被访问,这将是理想的。提供这些性能到上述WinFS存储平台的内容中将会特别理想。迄今,这些性能还不存在。

尽管Microsoft SQL SERVER产品提供了指定关系数据库表的整个列作为称作FILESTREAM(文件流)的类型的功能,以致于在那些列的单元中的数据存储在不同于关系数据库表的各自的文件中,也没有一种功能可以指定以那种方法来存储用户定义类型的单独字段。

IBM的DB2数据库产品有一个“数据链接”特性,该特性支持通过存储对文件的一个引用来链接表中的一列到文件系统中的一个文件的功能。然而,它只提供了在列单元和引用文件间N对1的引用模型,而如同前面描述的,存在单元和文件间1-1模型的需要。“数据链接”特性因为下面附加的原因也有不利之处:(i)编程模型不允许连同在用户定义类型内部的常规关系数据一起具有统一的单独文件的存储和查询,和(2)DB2的“数据链接”特性不允许经由文件系统对存储在引用文件中的列数据的更新。

Oracle公司的“IFS”产品使用中间层软件来提供在像SMB,HTTP,FTP,SMTP等许多协议上的数据的访问。数据最终存储在数据库中。尽管Oracle IFS提供了不同种类数据的“集成”观点,包括大型数据类型,解决方法在中间层软件中实现,和在关系数据库引擎相反,它不满足前面讨论的需求。

最后,ISO/IEC 9075-9:2003(aka SQL 2003 MED)提议“数据链接”为新的数据类型。根据提议的标准,数据链接是具有DATALINK数据类型的值。数据链接引用了不是部分SQL-环境的一些文件。这些文件被假定由一些外部文件管理器来管理。数据链接在概念上由组成到外部文件的引用的字符串来代表;引用通过调用定义在ISO/IEC 9075这部分操作符使其可访问。引用的字符集,称作数据链接字符集,是实现定义的。这个提议标准没有寻址前面讨论的理想特性。

因而,仍然需要一种可以提供对存储某些数据类型为用户定义类型(UDT)的定义字段的支持的系统方法,比如包括像数字图像,视频,音频等的大型数据类型。同样也可以经由传统文件系统调用(打开,关闭等)对那些大型数据类型提供“带外”访问。本发明满足这些需求。

概述

本发明主要集中在数据库存储中存储某些数据类型为用户定义类型的字段,比如包括像图像,视频,音频等的大型数据类型。根据本发明,能在数据库存储中持久保存的对象类型由用户来定义。类型定义包含字段和行为,每一字段有各自的数据类型。一个或多个类型定义的字段可能被指定为包含这样的一种类型的数据,该数据将要存储为数据库存储之外以及和具有类型定义的其他字段分离的文件。当接收到一个存储用户定义类型实例对象的请求时,在对象的任何一个这样指定的字段中的数据存储在数据库存储外部的文件中,更可取地是在数据库存储实行的计算机文件系统上。在每个对象的其他字段上的数据以平常方法存储在数据库存储中。数据库存储维持了一个在持久保存的对象和在数据库存储外部存储为文件的字段数据间的链接或引用。

根据发明的另一方面,经由计算机文件系统,提供应用程序对文件的访问,在该文件中给定字段的数据存储在数据库存储的外部。更具体地,应用程序经由计算机文件系统的应用程序编程接口可以产生一个对打开文件的调用,其中该调用在数据库存储中按对象字段的身份来标识它,包括字段数据的到文件的文件系统路径被确定。然后,打开文件的调用通过使用确定的路径来执行。

因而,本发明能够为持久保存在数据库存储中的对象的用户定义类型的字段被指定数据库存储外部的存储,也就是作为一个数据库存储在其上被实现的计算机的文件系统中的文件。而且,经由计算机文件系统提供了一个对包含用户定义类型的该字段的数据的文件的访问。

本发明的其他特性和优势在下面对发明的细节描述和附图中将变得清晰明白。

)附图简要说明

在前述总结中,同样在下面对发明的细节描述中,当结合附图阅读时,将会更好的得到理解。为了阐明发明,在图中显示了发明的各个方面的基本具体实施例;然而,发明没有被局限于特定的方法和公开的工具。在这些图中:

图1是显示用户定义类型的受管代码类定义的典型的代码段;

图2是阐明已经在受管代码中实例化的类型实例的序列化和反序列化的框图;

图3是一个阐明数据库表的图,用户定义类型的对象在表中已持久保存;

图4是一个阐明典型存储平台的框图,该平台能够利用本发明的特性;

图5阐明了在图4说明的存储平台的情况下在用户定义的持久保存的对象上执行查询的过程;

图6是一个阐明叫“Person”的用户定义类型的受管代码类型定义的典型,局部代码段;

图7是一张阐明本发明的系统和方法的一个具体实施例的图;

图8是一张框图,根据本发明其他方面的具体实施例,阐明了对包括用户定义类型实例字段的数据的文件的“带外”访问的系统和方法。

图9是一张代表具有各种计算机设备的典型网络环境的框图,本发明在这些设备中得以实现;和

图10是一张代表本发明得以在其中实现的典型计算机设备的框图。

发明详细描述

本发明的主题特别描述成能满足法定的要求。然而,描述本身并不意在限制本专利的范围。相反,发明者认为权利要求的主题也可能以其他方式实例化,包含类似于此文件描述的不同的步骤或元素,并结合其他当前或未来的技术。而且,尽管术语“步骤”可以在此用来表述使用方法的不同方面,但术语不应该被译成暗示在此公开的步骤之间的任一特定的顺序,除非当这个单独步骤的顺序被明确的描述。

如以上陈述,本发明贯注于存储某些数据类型为数据库存储中的用户定义类型字段的方法,这些数据类型如包含了像数字图像,视频,音频等的大型数据类型。根据本发明,在数据库存储中持久保存的对象类型由用户定义。类型定义包含字段和行为,每个字段有各自的数据类型。一个或多个类型定义的字段可以指定为包括类型数据,该类型数据将在数据库存储外部存储为文件并且和类型定义的其他字段相分离。当接收到存储用户定义类型实例的对象的请求时,在任一这样指定的对象字段中的数据存储在数据库存储外部的文件中,更适宜的是存在数据库存储得以执行的计算机文件系统中。对象的每个其他字段的数据以普通方式存在数据库存储中。数据库存储维持了在持久保存的对象和存储为数据库存储外部的文件之间的一个链接或引用。

图6是用户定义类型的定义的典型,部分代码列表,根据本发明的具体实施例,阐明了当对象实例持久保存在存储中时,类型字段指定为将要存储在数据库存储外部的字段。特别地,展示了叫做“Person”的用户定义类型的CLR类;在前面描述的本发明的背景下,参数通过SQL SERVER数据库引擎来使用。然而,可以理解为本发明决不会被来限制使用SQL SERVER数据库引擎,而是能在任一支持用户定义类型的数据库管理系统的背景下使用。

在图6中显示的CLR类定义了Person类型的两个字段,一个叫做“FirstName”,定义为具有数据类型SqlString,一个叫做“PhotoFS”,定义为具有数据类型SqlBytes。根据在前面的背景技术部分讨论的要求(并且如在图1中的示例代码列表阐明的)在SQL SERVER中的用户定义类型的完全CLR类定义会有附加的字段和方法,是可以理解的。PhotoFS的数据字段可能具有图像数据,该数据包含类型实例可能代表的Person的照片。这样的数据是本发明能够有利地应用的大型数据类型的例子。

根据本发明,在这个例子中,当类型实例持久保存在存储器中时,Person类型的PhotoFS字段被指定为将要存储在数据库存储外部的字段。明确地,在本具体实施例中,这通过使用提供指定的定制属性来注释UDT的CLR类定义字段的方法来完成。特别地,在前面的发明背景技术中描述的SqlUdtField()定制属性的新性质已经创建。新的性质称作“IsFilestream”。属性的“真”值(例如IsFilestream=true)指示Person类型的字段根据本发明应该在数据库之外存储为文件。然而,字段是这样指定在其中的特定方式没有限制于该示例机制。而是,可以使用由基础数据库系统辨认出的用户定义类型定义的任一形式注释。包括SqlUDTFiedl()定制属性的IsFilestream性质的对用户定义类型字段的注释定义了与定义类型相关的一系列元数据。

在本具体实施例中,IsFilestream性质只可以应用于SqlBytes类型的字段。然而,在其他具体实施例中,性质能够按希望应用于其他数据类型的字段。

更进一步的根据本发明,当UDT的CLR类被数据库服务器编译和注册时,例如,使用如前面所述的T-SQL脚本命令CREATE TABLE,数据库引擎为了维持对数据库内部的UDT实例字段的结构布局的了解,把注释中获得的元数据存储到系统目录的类型定义中。特别地,元数据将反映任何已注释成IsFilestream=true属性的字段。

参考图7,显示了数据库存储内部的表的示例行600。例如,表可能用来存储由图6阐明的CLR类定义的Person UDT的实例。表格包含了一个包括表内特定行唯一标识符(即“row_id”)的列604,一个包括与UDT实例相联的唯一标识符的列605(例如,和WinFS条目类型实例相关联的Item_ID),和一个包括UDT实例字段真实序列化值的列602。除其他列之外,表还可能包括一个定义来保持传统的SQL SERVER FILESTREAM数据的列606。

占有表的该行的UDT列602的UDT的实例的序列化数据在一系列片段608中被安排。在本实施例中,这些片段的布局由SqlUdtField()和SqlUdtProperty()属性来控制,使用这些属性能如上所述地注释UDT的字段和行为。

在本实施例中,每一个指定为应该在数据库存储外部和其他UDT序列化数据分开存储的UDT字段分配在UDT的存储布局上的独立片段中。例如,如果UDT的2个字段是这样指定的,那些字段就可能各自作为片段612和614来分配。另外,在本实施例中,那些片段每一个分配一个唯一的指示符,例如片段IDs 610。例如,片段612可能分配片段ID“xx”,而片段614可能分配片段ID“yy”。只是为了讨论的方便,根据本发明,已经被指定为和其他UDT字段分离地。存储为数据库外部的文件的UDT字段应该在下文中被称为UDT的“文件流字段”。这样的引用并不想以任何方式作出限制。

更进一步地根据本发明,代替把UDT实例的每个这些字段的数据存储在数据库存储表内部的分配的片段中,这些字段数据存储在数据库存储外部,计算机文件系统内部的一个文件中。数据库存储实现在该计算机上。在本实施例中,片段只存储一个对文件的引用,该引用定义一个到文件的链接。例如,分配在片段612中的字段的数据代替地被存储在文件616中。如箭头620指示的那样,片段包括一个到文件系统内部文件616的位置的引用。相同地,分配在片段614中的字段数据代替存储在文件618中。同样地,如箭头622指示的那样,片段614包括一个到文件的引用。许多字段可能已经以这样的方式指定,并且每个这样的字段数据将要以这种方式存储在文件系统目录内部的各自的文件中。

在本实施例中,每个在计算机文件系统内UDT分配一个不同的的列-层次的目录。对于包括给定UDT实例的文件流字段的数据的文件名的命名转换是[row_guid].[fragment_ID]。在所示的例子中,Person UDT实例的序列化数据存储在分配row_guid为“AABB”的表中的一列。片段612分配一个“xx”的片段ID,并且片段614分配一个“yy”的片段ID。因此,被片段612引用的文件的文件名为“AABB.xx”,而由片段614引用的文件的文件名为“AABB.yy”。

需要重要注意的是,即使相应的UDT实例文件流属性的数据存为数据库存储外部的文件,他们也好像是存储在数据库表内部一样接收数据库引擎的操作。例如,如在SQL SERVER数据库引擎中的实现的,T-SQL命令INSERT和UPDATE可以用来插入新数据或更新现有的数据到一文件中,该文件存储UDT实例的文件流字段的数据,就像数据字段被存储在数据库表内那样。同样地,T-SQL DELETE命令能够用来删除一个包括具有存储在分开文件中的一个或多个文件流字段的UDT的行;删除行也删除了引用文件。存储在分开文件的UDT内的文件流字段也可以像任一其他列一样被查询。

也如在图7中阐明的一样,上述本发明的方法也能够和传统的提供在SQLSERVER中的文件流列类型共存。例如,如图7所示,表的列606能够被定义为“文件流”(FS)类型。当一列被定义为“文件流”类型,那列的给定单元中的数据存储在和表中的那列相关联的列-层次目录的单独文件中。值得重视的是,本发明通过提供把UDT对象的单独字段数据存储在数据库存储外部的单独文件中的能力来改进这一性能。

已经存在单独文件中的UDT对象的文件流字段数据根据本发明能够以两种方法来检索。第一种,如上面提到的,数据可以用传统的T-SQL查询来访问。例如,假定其中存储了Person类型(在图6中定义)的实例的表命名为“Person_sql”,并且包括Person UDT的实例的序列化数据的列602命名为“Person_col”。下面的查询将要返回实例的名为PhotoFS的字段数据,该实例根据本发明已存储在一单独文件中:

SELECT Person_col.PhotoFS FROM Person_SQL WHERE FirstName=“STEVE”当数据库引擎接收到这样的一个查询,它获得到达其中存储了Person类型实例的PhotoFS字段的文件的文件系统路径名。路径名是从满足查询的Person UDT对象相应的片段中获得的。当然,Person UDT的多个对象可以满足这样的查询。对于满足查询的每个对象,数据库引擎会用包括了PhotoFS字段的数据的文件的所获得的路径名调用合适的文件系统的应用程序编程接口(例如,Win32 API的CreateFile)。数据库引擎然后读文件,返回数据到应用程序,然后关闭文件。

根据发明的其他方面,应用程序也能够经由计算机文件系统直接访问这样的文件。特别地,应用程序能够经由到文件系统的应用程序编程接口,产生一个直接打开这样的文件的调用。调用将按数据库存储内部的身份识来标识对象相应的文件流属性。基于数据库存储内部的对象字段的身份,确定了包括字段数据的文件的文件系统路径。通过使用确定的路径对打开的文件执行调用。

本发明的该方面的具体实施例在图8中阐明。在该例中,本发明的该方面在前面背景技术部分描述的WinFS存储平台的背景下执行。这样的性能在WinFS平台上特别有利。然而,可以理解为,本发明的该方面能够在任一这样的环境中执行,在该环境中对包含用户定义类型实例的字段的数据的文件的直接访问是必须的。

参见图8,根据本发明,客户机程序800可以期望对包含用户定义类型实例的文件流字段数据的文件的直接访问,该字段已经存储在计算机系统的文件系统804内的文件中,WinFS存储平台808在该系统上执行。如上所述,WinFS存储平台实现在数据库引擎810上,比如SQL SERVER数据库引擎。

根据本发明的更进一步的方面,客户机应用程序能够使用WinFS APIs以另外方式访问在数据库存储(没有显示)中持久保存为UDT对象的WinFS条目的字段。客户机应用程序经由文件系统804的应用程序编程接口802,可以替代该请求对已经分开存在文件系统804的条目(即UDT)的文件流字段的直接访问。在图8显示的典型实施例中,客户机应用程序通过调用Win32 API的CreateFile接口在第(1)步中初始化该进程,传输路径名到Win32 API来基于在持久保存的条目(UDT)实例中的相应字段的身份来标识请求数据。例如,根据WinFS名字转换,标识数据库存储中条目字段的路径名(包括根据上述方法已经独自存在文件系统内部的文件中的字段)可以具有以下形式:

\\?\UNC\machinename\sharename\Item_IdValue\[typename].fieldname.(locator).[typename].fieldname

然而,可以理解为,这个形式仅仅是作为示例的,在没有偏离本发明范围的情况下,实际的分隔符和格式可能在其他实施例中也会有不同。

根据对上述示例格式的引用,路径名格式的开始部分如下:

\\?\unc\machinename\defaultstore\...

其中machinename是WinFS平台在其上运行的机器名称,并且defaultstore是和Item实例存储其中的数据库根目录相关联的共享名。由于WinFS支持多种数据库存储,defaultstore将被替换为和特定数据库相关联的或和数据库的部分相关联的共享名。路径的...\\?\unc\...部分用来允许保持路径的字符串长度直到32KB,而不是限制在正常路径名服从的256字节限制(大约)。路径名必须是Unicode编码以在格式下工作。这部分路径名因而提供了在特定机器上对某些数据库/共享的定向。

下面部分的路径名(...\Item_IdValue...)标识对象类型为“Item”,紧接着相关的对象的Item_ID值。注意本发明也应用于在WinFS中的条目扩展和关系,因为条目扩展和关系也映射到WinFS数据库存储中的UDT上。在条目扩展的例子中,这部分路径名将会被(...\Extension_IdValue...)取代。在关系例中,这部分路径名将会被(...\Relationship_IdValue...)取代。

最后一部分路径名...\[typename].fiedlname.(locator).[typename].Fieldname标识了条目,条目扩展或从属于调用的关系UDT的特定字段。它包括了重复的类型名-字段名-定位符三元组。类型名用方括号[]围住,而定位符如果存在是用圆括号围住。类型名是字段的类型名或对象根的类型名。字段名是字段的名字。并且,如果字段有多种实例,如数组或集合,定位符指示字段内的哪一个条目。如果UDT由对象的嵌套层组成,附加的类型名-字段名-定位符三元组将存在以指定字段内的字段,最终停止在具有IsFilestream=true属性的字段处。

继续图6和7的例子,Person UDT实例的PhotoFS字段的路径名可以指定如下:

\\?\UNC\localhost\defaultstore\ItemID\Person.PhoteFS

其中ItemID是分配给Person类型的特定实例的全局唯一指示符(guid)。

因为已经在数据库存储外部持久保存为单独文件的条目的文件流字段的WinFS路径名不能通过计算机文件系统合理地解决,根据本发明,它会转化成等价的文件系统路径名。在本实施例中,该过程通过叫做“FS代理”的软件组件来初始化。当然,在其他的具体实施例中,其他软件组件也可以用来执行该功能。如步骤(2)阐明的,当文件系统API802接收到一个来自包括WinFS路径名的客户机应用程序的CreateFile命令,认出它是这样来自于WinFS路径名的“machinename/defaultstore”部分。所有用那些路径名接收的文件请求都被转送到FS代理。

在步骤(3),FS代理发出“打开”对WinFS API 808的调用,传送条目字段的WinFS路径名。在步骤(4),WinFS平台从WinFS路径名中标识了条目和字段,然后在GetPathName()请求中传送这些信息给数据库引擎。GetPathName()是一个返回UDT对象文件流字段的Win32文件系统路径名的数据库引擎函数。该文件流字段已经以上述的方式与数据库存储分开地存储。WinFS平台也实施任何对条目字段访问的安全性约束。

在步骤(5),数据库引擎通过在受请求主体的UDT对象存储的表中执行表的查找来对GetPathName()作出反应。数据库引擎决定表中的正确行和该行UDT对象的序列化片段的位置。为了所论的文件流字段,数据库引擎从相应片段中取出到其中存储了该字段的数据的文件的真实系统路径。数据库引擎把真实路径送回WinFSAPI 808。在步骤(6)中,WinFS把文件系统路径传回FS代理806,在步骤(7)中,FS代理调用文件系统API802以打开文件,在请求中传输真实文件系统路径。在步骤(8)中,文件系统API802获得一个文件句柄并将它传回客户机(步骤(9))如同当CreateFile在文件系统API802中调用时它会正常传输的那样。

在这点上,客户机应用程序800能够通过正常的文件系统API调用(例如Win32API文件I/O调用)来读写文件。当客户机应用程序800用文件终止,它对该文件系统API发出关闭调用I。该调用再次被FS代理806截取。FS代理806对WinFS API 808发出“关闭”调用以请求关闭文件。WinFS平台808模拟该操作为对持久保存的条目的更新,执行任一相关联的变化跟踪和与更新相关联的其他功能。一旦该过程完成,控制返回给FS代理806,该代理调用文件系统API802来执行代表客户机应用程序800的正常文件关闭操作。

因而,通过上述的方法,提供客户机应用程序对持久保存的UDT的文件流字段的“带外”访问,该UDT的字段在数据库管理系统得以实现的计算机文件系统的内部存储为单独文件。

从上述看出这是显然的,本发明的各种系统,方法和方面的所有或者一部分可以以硬件,软件或两者的组合实施。当在软件中实施时,本发明的方法和装置,或者它的某些方面或部分,可以程序代码(例如指令)的方式实施。该程序代码可以存在计算机可读的介质上,比如磁性,电子或光学存储介质,包括但不限于软盘,CD-ROM,CD-RW,DVD-ROM,DVD-RAM,磁带,闪存,硬盘驱动器或者任何其他机器可读的存储介质。在其中,当程序代码装载到机器比如计算机或者服务器并由它执行时,机器变成了实践发明的装置。程序代码在其上执行的计算机一般包括处理器,处理器可读(包括易失性和非易失性存储器和/或储存元件)的存储介质,至少一个输入设备,和至少一个输出设备。程序代码可以用高级结构化的或面向对象的语言来实现。作为替代,程序代码可以用汇编或机器语言来实现。在任一情况中,语言可以是编译语言或解释语言。

本发明也可以程序代码的形式实施,该代码在一些传输介质上传送,比如在电线或电缆上,通过光纤,在网络上,包括局域网,广域网,因特网或内联网,或经由任一其他形式的传输,其中,当程序代码由诸如计算机这样的机器接收,装载和执行时,机器变成实践发明的一种装置。

当用通用处理器上实现时,程序代码可以与处理器组合以提供独特的装置以模拟特定的逻辑电路操作。

而且,本发明能结合任一计算机或其他可以部署成计算机网络一部分的客户机或服务器设备或者分布式计算环境来实现。在这点上,本发明适合于任一具有任何数目的内存或存储单元以及在任何数目的存储单元或卷上发生的任何数目的应用程序和进程的任一计算机系统或环境。根据本发明,结合数据库存储中的持久保存的对象的进程使用这些存储单元和卷。本发明可适用于具有配置在网络环境或分布式计算环境中的服务器计算机和客户计算机的环境,具有远程或本地存储器。本发明也适用于独立的计算设备,具有编程语言功能性,解释和执行能力并连同远程或本地服务产生,接收和传输信息。

分布式计算通过计算设备和系统间的交换方便了计算机资源和服务的共享。这些资源和服务包括,但是不限制于,信息交换,高速缓冲存储器,文件的磁盘存储。分布式计算利用网络连通性,允许客户机来发挥他们集体的力量来使整个企业得益。在这点上,各种设备可以具有应用程序,对象或资源,该资源暗示了结合本发明的对象持久保存方法来执行的进程。

图9提供了典型的网络化或分布计算环境的示意图。分布式计算环境包含了计算对象10a,10b等和计算对象或设备110a,110b,110c等。这些对象可能包含程序,方法,数据存储,可编程逻辑等。对象可以包含像个人数字助理,电视,MP3播放器,个人电脑等的相同或不同的部分设备。每个对象能通过通信网络114来和另外的对象通信。网络自身包含其他计算对象并提供服务给图9的系统的计算设备。根据发明的一个方面,每个对象10a,10b等,或者110a,110b,110c等可以包含了一个应用程序,该应用程序可能使用API,或者其他对象,软件,固件和/或硬件,来请求对用来实现本发明的对象持久保存方法的进程的使用。

也需要重视的是,对象如110c可以主宿在其他计算设备10a,10b等上或110a,110b等上。因而,即使描述的物理环境可以显示连接设备为计算机,这样的阐明仅仅是示例性的而且物理环境可以用另一种方式描述或形容为包括各种数字设备,比如个人数字处理,电视,MP3播放器等,软件设备比如接口,COM对象和类似物。

存在支持分布式计算环境的各种系统,组件和网络配置。例如,计算系统可以通过有线或者无线系统,通过局域网或广域分布网络连接起来。当前,许多网络被耦合到因特网,因特网为广域分布式计算提供了基础设施,并包含了许多不同的网络。任一基础设施可以用来与本发明关联的示例性通信。

因特网通常指使用TCP/IP协议套件的网关和网络的集合,该协议套件在计算机网络中是众所周知的。TCP/IP是“传输控制协议/互联网协议”的缩写。因特网能够被描述成一个通过由计算机执行允许用户在网络上互动和共享信息的网络协议来使地理上分散分布的远程计算机网络互相连接的系统。因为这样的大范围信息共享,像国际互联网这样的远程网络从而已经进化成一个开发者能够在上面设计用于执行专门的操作或服务的软件程序的开放系统,本质上没有限制。

因而,网络基础设施使能够主宿像客户机/服务器结构、对等结构、或者混合结构的网络拓朴。“客户机”是使用另外的不相关的类或组的服务的类或组中的一员。因而,在计算中,客户机是一个进程,即大概说是请求由其他程序提供的服务的一组指令集或任务。客户机进程在不必“知道”任何关于其他程序或者服务本身的工作细节的情况下利用所请求的服务。在客户机/服务器体系中,特别是一个网络系统中,客户机通常是一台访问其他计算机比如服务器提供的共享网络资源的计算机。在图9的例子中,计算机110a,110b等被认为是客户机,并且计算机10a,10b等也能被认为是服务器,尽管任何计算机能被认为是客户机,服务器,或者都是,这取决于环境。任一这样的计算设备可以以蕴含发明的对象持久保存技术的方法来处理数据。

服务器是典型的在远程或本地网络上可访问的远程计算机系统,比如因特网。客户机进程可以在第一个计算机系统中是活动的,服务器进程可以在第二个计算机系统中是活动的,可以在通信介质上互相通信,因而提供了分布式函数并且允许多种客户机来利用服务器的信息收集性能器。任何按照本发明的持久保存机制使用的软件对象可以在跨越多种计算设备上分布。

客户机和服务器可以使用协议层提供的功能来互相通信。举例来说,超文本传输协议(HTTP)是结合万维网或者“Web”使用的公共协议。典型地,计算机网络地址比如互联网协议(IP)地址或其他引用比如统一资源定位器(URL)能用来互相标识服务器或者客户机。网络地址可以指URL地址。能够在任何可用的通信介质上提供通信。

因而,图9阐明了示例性的网络或分布式环境,具有经网络/总线与客户计算机通信的服务器,本发明可以在其中使用。根据本发明,网络/总线14可以是LAN,WAN,企业内联网,因特网或其他网络介质,具有许多客户机或远程计算设备110a,110b,110c,110d,110e等,比如手持电脑,便携式电脑,瘦客户机,网络化电器用具,或者其他设备,比如VCR,TV,烤炉,灯,加热器和类似物。本发明可以应用于任何计算设备,它需要结合该设备来维持持久保存的对象。

在通信网络/总线14是因特网的网络环境中,服务器10a,10b等可以是经多个已知协议的任一一个比如HTTP和客户机110a,110b,110c,110d,110e通信的服务器。服务器10a,10b等也可以用作为客户机110a,110b,110c,110d,110e等,这些可以是分布式计算环境的特征。

通信系统可以是有线或无线的,在合适的地方。客户机设备110a,110b,110c,110d,110e等可以或者可以不经由通信网络/总线14来通信,并且可以具有与之相关联的独立的通信系统。例如,在TV或VCR的情况下,可能或可能不存在控制它的网络化特征。每个客户计算机110a,110b,110c,110d,110e等和服务器计算机10a,10b,10c等可以装备各种应用程序模块或对象135,并且连接或接入到各种类型的存储元件或对象,文件或数据流可以存储在这些元素或对象上,或者部分文件或数据流可以下载、传输或移动到这些存储元件或对象上。任何计算机10a,10b,110a,110b等可以负责对数据库,内存,或其它存储元件20用来存储根据发明处理好的数据。因而,本发明可以用在具有客户计算机110a,110b等的计算机网络环境中,该客户计算机能够对计算机网络/总线14和服务器计算机10a,10b等访问并互动,服务器计算机10a,10b等可以对客户计算机110a,110b和其它类似设备以及数据库20访问并互动。

图10和下面的讨论旨在为提供一个合适的计算设备的简明通用描述,发明可以结合该设备来执行。举例来说,任一在图9中阐明的客户机和服务器计算机或设备可以采用这种形式。然而,应该理解的是,手持,手提和其他计算设备和所有类型的计算对象设想为结合本发明使用,即,任何从该处数据可以在计算环境中产生,处理,接收和/或传输的地方。当一个通用计算机如下描述的时候,这仅仅是一个例子,本发明可以用具有网络/总线互操作性和交互作用的瘦客户机来实现。因而,本发明可以在网络化主机服务的环境中实现,在该服务中隐含了很小或最小的客户机资源,例如,一个客户机设备仅仅用作为对网络/总线的接口的网络环境,比如放置在电器设备中的对象。在本质上,存储数据或检索数据或传输数据到另一台计算机的任何地方对发明的对象持久保存方法的操作来说是值得的或合适的环境。

尽管不要求,发明能够通过操作系统来实现。由设备或对象的服务开发者来使用,和/或包括在根据本发明操作的应用程序或服务器软件中。软件可以在比如程序模块这样的计算机可执行指令的通用背景下描述,被一个或多个计算机执行,比如客户机工作站,服务器或者其他设备。一般地,程序模块包括线程,程序,对象,组件,数据结构和执行特定任务或者实现特定抽象数据类型的类似事物。典型地,程序模块的功能性可以按希望被组合或分布在各种实施例中。而且,本发明可以用其他的计算机系统配置和协议来实践。其他公知的计算系统,环境,和/或对使用发明合适的配置包括,但是不限于此,个人计算机(PCs),自动售货机,服务器计算机,掌上或膝上设备,多处理器系统,基于微处理器的系统,可编程消费品电子设备,网络PCs,应用程序,灯,环境控制元件,微型计算机,大型计算机和其他类似物。

图10阐明了本发明得以实现的相配的计算机系统环境100的一个例子,尽管如同上面的解释,但计算机系统环境100只是相配的计算机环境的一个例子而不限制本发明的使用或功能范围。计算机环境100都不应解释为具有任何涉及任一在示例操作环境100中阐明的组件或其结合物的从属物或必需物。

参考图10,实现发明的示例性系统包括计算机110形式的通用计算设备。计算机110组件可以包括,但不限于处理单元120,系统存储器130,和耦合包括系统存储器到处理单元120的各种系统组件的系统总线121。系统总线121可以是几种总线结构的任一种,包括存储器总线或存储器控制器,外围设备总线,和使用多种总线结构的任一种的本地总线。作为例子,但不局限于此,这样的体系包括工业标准结构(ISA)总线,微通道结构(MCA)总线,增强型工业标准结构(EISA)总线,视频电子标准协会(VESA)本地总线和外围元件互连接口(PCI)总线(也被认为是夹层总线)。

计算机110典型包括多种计算机可读介质。计算机可读介质可以是任一能够被计算机110访问的可用介质,包括易失性和非易失性的介质,可移动和不可移动的介质。作为例子,但不局限于此,计算机可读介质可以包含计算机存储介质和通信介质。计算机存储介质包括用任何方法或技术为像计算机可读指令,数据结构,程序模块或其他数据的信息而实现的易失性和非易失性,可移动和不可移动的介质。计算机存储介质包括RAM,ROM,EEPROM,闪存或其他内存技术,CDROM,数字化视频光盘(DVD)或其他光学磁盘存储器,磁盒,磁带,磁盘存储器或其他磁盘存储设备,或任何其他能用来存储需要的信息以及能被计算机110访问的介质,但并不局限于此。通信介质典型地具体化为可读指令,数据结构,程序模块或其他在已调制的数据信号,比如载波或其它传输机制中的数据。并且介质包括任何信息传输介质。术语“已调制数据信号”意思是一种按照在信号中编码信息这样的方式使信号的一个或多个其特征被设置或者改变的信号。作为例子,且不限于此,通信介质包括有线介质,比如有线网络或直接有线连接,和无线介质,比如声学,无线电频率,红外和其他无线介质。上面的任一结合应该也包括进计算机可读介质的范围。

系统内存130包括以易失性和/或非易失性的内存为形式的计算机存储介质,比如只读存储器(ROM)131和随机存取存储器(RAM)132。一个基本输入/输出系统133(BIOS),包含比如在开机时候,帮助在计算机110内部的元件间传输信息的基本线程被典型的存储在ROM131中。RAM132典型的包含了可由处理单元120立即访问的数据和/或当前正被操作的数据程序模块。作为例子,且不限制于此,图10阐明了操作系统134,应用程序135,其他程序模块136和程序数据137。

计算机110也可以包括其他可移动/不可移动,易失性/非易失性的计算机存储介质。仅作为例子,图8阐明了读写不可移动,非易失性的磁性介质的硬盘驱动器141,读写不可移动,非易失性的磁盘152的磁盘驱动器151,和读写可移动,非易失性的光盘156比如CD-RW,DVD-RW或其他光盘的光盘驱动器155。其他能用在示例性操作环境中的可移动/不可移动,易失性/非易失性的计算机存储介质包括,但不限制于此,磁带盒,闪存卡,数字视频光盘,固态ROM和类似物。硬盘驱动器141通过像接口140这样的不可移动的存储接口典型地耦合到系统总线121,并且磁盘驱动器151和光盘驱动器155通过像接口150这样的可移动的存储接口典型的耦合到系统总线121。

驱动器和他们相关的在上面讨论和图10阐明的计算机存储介质提供了对计算机可读指令,数据结构,程序模块和计算机110的其他数据的存储。在图10中,例如,硬盘驱动器141阐明为存储操作系统144,应用程序145,其他程序模块146和程序数据147。注意到这些组件可以和操作系统134,应用程序135,其他程序模块136和程序数据137一样也可以不同。操作系统144,应用程序145,其他程序模块146和程序数据147给了不同的数字至少阐明了他们是不同的拷贝。用户可以通过像键盘162这样的输入设备,像鼠标,轨迹球或触模板这样的定点设备161来键入命令和信息。其他输入设备(没有显示的)可能包括麦克风,操纵杆,游戏垫,圆盘式卫星电视天线,扫描器,或者类似物。这些和其他输入设备经常通过耦合到系统总线121的用户输入接口160来连接到处理单元120,但也可能通过其他接口和总线结构来连接,比如并行端口,游戏端口或通用串行总线(USB)。图像接口182也可以连接到系统总线121。一个或多个图形处理单元(GPUs)184可以和图形接口182通信。显示器191或其他类型的显示设备也可以通过接口连接到系统总线121,比如通过视频接口190,该接口依次和视频内存186通信。除显示器191之外,计算机也可以包括外围输出设备比如扬声器197和打印机196,该设备可以通过输出外围接口195来连接。

计算机110使用对一个和多个远程计算机比如远程计算机180的逻辑连接可以在网络化或分布式环境中操作。远程计算机180可以是个人计算机,服务器,路由器,网络PC,对等设备或其他公共的网络节点,并且典型地包括上述的和计算机110有关的许多或所有的元件,尽管只有存储器存储设备181已经在图10中阐明。在图10中描述的逻辑连接包括局域网(LAN)171和广域网(WAN)173,但也可以包括其他网络/总线。这样的网络环境在家庭,办公室,企业范围计算机网络,内联网和因特网中是常见的。

当在局域网网络环境中使用时,计算机110通过网络接口或适配器170来连接到局域网171。当在广域网网络环境中使用时,计算机110典型地包括调制解调器172或其他在广域网比如因特网上建立通信的方法。调制解调器172,可以是内置或外置的,可以通过用户输入接口160或其他合适的机制连接到系统总线121。在网络环境中,所述的关于计算机110的程序模块,或其中的一部分,可以存储在远程存储器存储设备中。作为例子,但不局限于此,图10阐明了远程应用程序185驻留在存储驱动器181中。值得重视的是,所示的网络连接是示例性的并且可以使用在计算机之间建立通信连接的其他方法。

如前述阐明的,本发明贯注于存储和检索用户定义类型实例字段的系统和方法。该用户定义类型持久保存在数据库存储中,在数据库存储外部存储为数据库存储得以实现的计算机文件系统内的独立文件。本发明对在数据库管理系统内部存储大型数据类型作为用户定义类型字段是特别有利的。可以理解,在不脱离它的宽泛的发明概念的情况下可以对上述实施例作出改变。举例来说,当本发明的具体实施例已经在前面描述成在微软的SQL SERVER数据库管理系统中实现的时候,本发明可以在任何支持用户定义类型创建的数据库管理系统中实施化,这是可以理解的。附加地,当本发明的某些方面已经描述成在上述的WinFS存储平台的背景下实施化时,本发明的那些方面决不限制在那个环境中实现。而是,本发明的方法和系统能够在用户定义类型实例的字段的存储和检索是值得需要的任何系统中实施化。因此,本发明并不限制于所公开的具体实施例中,而是旨在覆盖由所附权利要求书定义的发明的精神和范围内的所有修改。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号