当前位置: 首页 > 专利查询>微软公司专利>正文

用于数据库存储中的对象持久存储的系统和方法技术方案

技术编号:2920871 阅读:307 留言:0更新日期:2012-04-11 18:40
一种用于在数据库存储中储存用户定义类型的对象的新的持久存储格式使得关于类型的结构的信息可以被传递给存储。这种信息使得可以进行多种存储优化,包括对类型的成员的直接结构化访问。特别地,元数据在类型实现器和数据存储之间交换。该存储使用该元数据来确定用于类型的实例的存储布局。有了这种信息,该存储能够检测可以被优化的访问模式,以便在存储表示上直接操作而不用对该对象进行水合(反序列化)。

【技术实现步骤摘要】
【国外来华专利技术】
本专利技术涉及计算机系统中的数据存储,尤其涉及用于在数据库存储中持久存储(persist)对象的系统和方法。背景MICROSOFT SQL SERVER是一种综合性数据库管理平台,它提供了广泛的管理和开发工具、强大的提取、转换及加载(ETL)工具、商业智能和分析服务以及其他性能。最近实现了对SQL SERVER的两种改进。首先,Microsoft Windows.NET框架公共语言运行库(CLR)最近被集成到SQL SERVER数据库中,其次,现在可用CLR环境中的受管代码创建被称为用户定义类型(UDT)的新对象,并将其持久存储在数据库存储中。CLR是Microsoft.NET框架的中心内容,它为所有.NET代码提供执行环境。因而,在CLR内运行的代码被称为“受管代码”。CLR提供程序执行所需的各种函数及服务,包括即时(JIT)编译、分配和管理存储器、强制类型安全、异常处理、线程管理和安全。如今,在首次调用.NET例程时,CLR由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)-一种使得开发者能够扩展数据库的标量类型系统的新的机制的支持。从应用程序体系结构的角度来说,UDT提供了两种关键的益处它们提供了内部状态和外部行为之间的坚固的封装(在客户机和服务器两者内),并且它们提供了与其它相关服务器特性的深度集成。一旦定义了UDT,它就可以用于系统类型能够在SQL SERVER中使用的所有环境中使用,包括在列定义、变量、参数、函数结果、游标、触发器和复制(replication)。在数据库服务器上定义UDT的过程如下完成a)在受管代码中创建类,所述的类符合UDT创建规则;b)使用CREATE ASSEMBLY语句将包含该UDT的程序集(Assembly)装入服务器上的数据库中;以及c)使用CREATE TYPE语句在数据库中创建一个揭示所述受管代码UDT的类型。此时,该UDT可以用于表定义中。当在受管代码中创建UDT定义时,类型必须满足下面的要求a)它必须被标记为是Serializable(可序列化);b)它必须被以SqlUserDefinedTypeAttribute(SQL用户定义类型属性)修饰;c)通过实现Inullable(不可为空)接口,该类型应该明白NULL;d)该类型必须具有不带参数的公有构造函数;以及e)通过实现以下的方法,该类型应当支持转换到串和从串转换1.Public String ToString();以及2.Public Shared<type>Parse(SqlString s)。附图说明图1是根据上面所述的过程定义UDT的一个类的例子。根据上面所述的步骤,这个类然后被编译成动态链接库(dll)。然后使用下面的T-SQL脚本命令来创建包含所编译的类的程序集create assembly testfrom‘c:
est.dll’go然后使用下面的T-SQL脚本命令在服务器上创建UDTcreate type BaseItemexternal name:go一旦在服务器上创建了UDT,一个表(例如“MyTable”)可以被如下创建,将该表的一个属性定义为UDT类型create table MyTable(Item BaseItem,ItemId as item::ID)go新的项目可以被如下那样添加到该表内declare@I BaseItemset@I=convert(BaseItem,”)insert into MyTable values(@i)go然后该UDT表示可以用于诸如SELECT Item.Name FROM MyTable的查询中。随着CLR集成到SQL SERVER中,以及从受管代码中的类定义来定义UDT的能力,应用程序现在可以实例化由所述受管代码类所定义的类型的对象,并且将这些对象作为所述UDT的实例持久存储在关系型数据库存储中。此外,定义所述UDT的类还可以包括在该类型的对象上实现特定行为的方法。因此应用程序可以实例化被定义为UDT的类型的对象,开且可以在它们之上调用受管的行为。当在CLR中实例化被定义为UDT的类的对象时,该对象可以通过对象序列化过程被持久存储在数据库存储内,其中所述类的变量的值被传递到物理存储(例如,硬盘)。图2示出了存储器中的一个对象到它的磁盘上的持久存储形式的序列化。该对象可以以图3中示出的格式的传统关系型数据库表持久存储在数据库存储中。如图所示,该表包含被指定为UDT的一列。所指定的UDT的持久存储对象的序列化的值占据该UDT列的一个单元。再次参考图2,当应用程序生成包括引用已经被持久存储在数据库存储内的UDT对象的受管行为(例如,返回所述UDT对象的一个字段的值的行为)的谓词或表达式的查询时,该持久存储的对象必须被反序列化(某些时候也被称为“水合(hydrating)”),并且CLR必须为整个对象分配存储器以便接收其被存储的值。然后CLR必须调用实现该应用程序所希望的行为的实际方法。不幸的是,与在运行时分配存储器以便存储完整的对象、反序列化并填充该对象的所有部分、以及调用实现所请求的行为的方法相关联的处理开销会是繁重的。因此,需要提供被持久存储在数据库存储中的对象的更有效的存储和检索的系统和方法。本专利技术满足这种需要。概述本专利技术针对一种提供用于数据库存储中的用户定义类型(UDT)的新的持久存储格式的系统和方法,所述新的持久存储格式能够使得关于UDT的结构的信息被传递到底层数据存储。这种信息使得能够进行多种存储优化,包括对类型的成员的直接结构化访问。特别地,本专利技术能够在类型实现器和数据存储之间进行元数据交换。该存储使用元数据来确定用于该类型的实例的存储布局。使用这种信息,该存储能够检测可以被优化的访问模式,以便直接在该存储表示上进行操作而不用进行对象的水合(反序列化)。此外,通过了解仅能进行结构化访问的操作,该系统可以构件数据分布统计和各个成员上的索引,而不需所计算的值的冗余的持久存储。通过下面对本专利技术以及附图的详细说明,本文档来自技高网
...

【技术保护点】
一种在数据库存储中持久存储对象的方法,包括:定义可以被持久存储在数据库存储中的对象的类型,其中,所述类型定义包括字段和行为;以及用定义用于所述类型的实例的所述数据库存储中的存储布局的属性注释所述的类型定义,其中,所述数据库存 储使用所述类型定义中的注释来控制数据库存储中的所述类型的实例的存储布局。

【技术特征摘要】
【国外来华专利技术】...

【专利技术属性】
技术研发人员:R凡卡特施B塞兹金JA布莱克雷DY阿尔图多夫
申请(专利权)人:微软公司
类型:发明
国别省市:US[美国]

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1