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

基于片段的串行化系统与方法技术方案

技术编号:2854156 阅读:186 留言:0更新日期:2012-04-11 18:40
一种基于片段的串行化方法与系统将一个或多个对象成员放到片段中。片段可包含一头部及一净荷。头部可提供关于该片段的有用信息,诸如片段类型的指示和片段长度的指示。净荷可包含对象的一个或多个成员。原语成员可用一记录格式净荷存储在一二进制片段中。LOB和FS成员可存储在具有用于阐明该片段的附加属性的值类型字段的片段中。集合可以存储在一系列片段中,第一片段指示集合的开始,一个或多个第二片段来将集合元素串行化,一终止符片段指示集合的结束。片段串行化的对象使存储额外开销最小化,而同时提供快速实例化与低成本的定位与更新。

【技术实现步骤摘要】
【国外来华专利技术】
本专利技术涉及计算,尤其涉及数据对象的存储与发送。(2)
技术介绍
串行化可被定义为将对象实例的状态存储到存储介质的过程。在此过程中,对象的公有字段和私有字段以及类名被转换成字节流,随即写到数据流中。当对象随后被反串行化时,可创建原始对象的一个精确复制。考虑活动计算机存储器中的对象,例如具有描述人物的数据的对象。该人物对象有若干子组件成员,例如名字、地址、社会保险号、电话号码、配偶、身高及体重。此人的名字对于一特定应用程序可能是重要的,而身高与体重可能不是。因而,名字可以驻留在活动存储器中,在那里它可被修改,而诸如体重及身高等其它字段被驱出活动存储器来为其它数据腾出空间。最后,该应用程序可能不再需要此人物对象,可将其持久化或发送到另一计算机。要持久化或发送一对象,该对象必须被串行化,这是指以有用的、可检索的方式来格式化对象。在上例中,对象(例如人物对象)的成员对于同一个类的所有对象通常是统一的。例如,每个人物对象有名字、地址、社会保险号、电话号码、配偶、身高与体重。这些信息随着人物不同而变化,且对于某些人来说信息可能是不可用的(“空”),但对于人物类的所有人物对象通常呈现同样的成员字段的存在。由此,人物类可被认为是类属人物对象。人物对象是人物类的一个实例。类及类的实例的这一概念存在于许多编程语言中。无论牵涉到哪种编程语言,串行化通常都是在类的实例上进行的,从而生成串行化的对象。对象可由具有各种类型数据的成员组成。成员可以是原语的或复合的。原语成员的例子有“串”,例如人物对象的名字成员,它是一串字母;及“整数”,例如人物对象的社会保险号,它是一个整数。复合成员的例子有“集合”,例如电话号码成员,它包含一个以上原语——在本例中,一个以上整数;“嵌套”,它是具有超越简单原语成员的某一结构的成员,例如电话号码的集合,或指向另一人物对象的配偶成员;以及“子类型”,诸如假定的“美国地址”类型,它可以是地址类型的子类型,从而假定地声明附加的成员,诸如美国区域或美国邮政信箱。成员可以用许多不同的方式来描述,且以任何数量的模式彼此相关。因而,将诸如人物对象等对象串行化涉及有效地处理可能包括在对象中的各个成员及那些成员的关系。对象的串行化在业界提出了若干挑战。串行化的对象应尽可能少地消耗存储空间。如果对象的大小在串行化时大大增长,则该对象的存储成本可能太高。因此,压缩表示是串行化格式的一个重要方面。串行化的对象也应被有效地实例化到活动存储器中。如果寻找和同化串行化对象的各个成员的处理成本高的话,会耗尽贵重的处理器资源。类似地,串行化应当虑及在无需实例化整个对象的情况下对象的成员的实例化和更新。例如,将整个人物对象实例化只为读或更新该人物的社会保险号,是当名字、电话号码、地址等成员未涉及在操作中时对存储这些成员所需的活动存储器的一种浪费。串行化格式还应支持可包含在对象中的所有数据类型。一种十分基本的串行化格式可能只支持原语,但较复杂的格式应当支持复合成员,诸如上述的嵌套成员、集合成员及子类型成员。尽管串行化格式对于具有很少嵌套与继承级别的对象应是最优的,因为大多数对象具有这个特性,但它也应当支持多级嵌套与继承,以确保串行化可灵活地用于大范围的类。串行化格式还应能灵活处理非常大的成员。例如,某些成员可以是音乐文件、照片或电影,诸如此类的大成员造成串行化的一个难题,这将在下文详尽地解释。以前的串行化格式有几个显著的不足。一种此类格式被称为XML串行化。XML串行化为每个成员提供一个记号(token)。该记号包含标识成员的元数据,成员通常紧跟在令牌之后。因此,XML串行化可形象化为如下(记号1)成员1;(记号2)成员2;(记号3)成员3;等等。这一串行格式的问题是,首先,冗长每个成员的元数据记号的存储消耗大量磁盘空间。其次,这一格式削弱了检索,因为为了找到期望的成员必须搜索记号。这可能牵涉高活动存储器成本,因为读或更新以此方式串行化的对象的最有效方法可能是将整个对象实例化。另一种串行化格式是“存储引擎记录”格式,也称“SE记录”,或简称“记录”格式。这是一种典型的数据库系统记录格式。在此串行化格式中,给定类的对象的成员存储于统一格式化的记录中。不是提供描述每个成员的元数据,而是有描述一特定类的对象的所有记录的内容的元数据。这可如图10所提供的形象化。SE记录串行化格式不对每个单独成员要求元数据,因此是一种较紧凑的串行化技术。相反,它要求访问描述各成员在磁盘上的布局的元数据,诸如图10的人物对象元数据表。SE记录格式的一个弱点是它不能灵活地处理可变长度的成员,诸如当今随对象保存的许多音乐文件、电影及图像。更确切地说,SE记录串行化中的灵活性来自高处理成本。如果使用偏移量表来表示可变长度数据在记录中的位置,那么可变长度的成员可以此类格式存储。存储偏移量表的后果是,无论何时更新了一可变长度成员,就必须更新跟在其后的所有可变长度数据的位置。这可以比喻为在一数组中间插入字节——插入点右边的一切必须右移来为插入的新字节腾出空间。此外,已设计出各种存储格式以允许数据库用户在数据库内有效地存储对象。以更灵活的串行化格式能更好地支持这些存储格式。例如,应与本文提供的串行化格式区别。例如美国专利申请第10/692,225号,代理卷号MSFT 2852/306819.01,题为“System and method for object persi stence in a database store”(数据库存储中对象持久化的系统与方法),针对允许用户将用如C#等面向对象语言所写的类与方法导入数据库。它还允许用户在数据库中存储C#对象,以及对该对象调用方法。它向用户提供多种风格的持久化。用户能够定义自己的串行化格式、使用公共语言运行库(“CLR”)串行化(C#自身提供)、或让SQL服务器以其自己的格式存储对象。这些选项,尤其是后者,提供了性能优势,因为MICEOSOFT SQLSERVER无须真正实例化一C#对象,即可检索或更新对象的某些些字段。当然某些操作,诸如方法调用,仍然要求C#对象的实例化。类似的背景及相关技术描述可在美国专利申请第10/692,227号,代理卷号MSFT-2850/306820.1,题为“System and method for storing and retrieving afield of a user defined type outside of a database store”(在数据库存储外保存及检索用户定义类型的字段的系统与方法)中找到。此申请讨论了UDT中的文件流,它可依照本文描述的技术来串行化。诸如此类的高级数据库技术将受益于更灵活和更高性能的串行化格式。类型地,对串行化对象进行操作的改良技术将更好地支持诸如此类的高级数据库技术。因而,串行格式所牵涉的权衡是该格式的元数据盘上存储器额外开销、定位成员的活动存储器额外开销、定位成员的处理成本、进行更新的额外开销、处理大字段的灵活性之间的权衡。根据这些权衡,在业界对于消除关于串行化技术的障碍的有正行成中且迄今未能解决的需求(3)
技术实现思路
一种基于片段的串行化方法与系统将一个或多个成员放到片段中。片段可包含头部及净荷。头部能提供关于片段的有用信本文档来自技高网
...

【技术保护点】
一种作为一数据对象存储在一起的一个或多个数据成员,其特征在于,包含:多个顺序地存储的字节;以及在所述多个顺序地存储的字节中表示的至少一个数据成员,其中,所述至少一个数据成员与一数据类型相关;以及在所述多个顺序地存储的字节中用来标识所述至少一个数据成员的数据类型的至少一个类型字节,其中,所述至少一个类型字节处于充分接近所述至少一个数据成员之处。

【技术特征摘要】
【国外来华专利技术】US 2004-4-9 10/821,6871.一种作为一数据对象存储在一起的一个或多个数据成员,其特征在于,包含多个顺序地存储的字节;以及在所述多个顺序地存储的字节中表示的至少一个数据成员,其中,所述至少一个数据成员与一数据类型相关;以及在所述多个顺序地存储的字节中用来标识所述至少一个数据成员的数据类型的至少一个类型字节,其中,所述至少一个类型字节处于充分接近所述至少一个数据成员之处。2.如权利要求1所述的一个或多个数据成员,其特征在于,所述至少一个数据成员以一种记录格式存储,且其中,所述记录格式定义了所述至少一个数据成员关于所述至少一个类型字节的可预测位置。3.如权利要求所述的一个或多个数据成员,其特征在于,还包含所述多个顺序地存储的字节的至少一个长度字节,用于标识所述至少一个数据成员的长度。4.如权利要求1所述的一个或多个数据成员,其特征在于,所述至少一个数据成员指示与所述数据对象相关的数据的位置,且所述位置与一位置类型相关,且所述多个顺序地存储的字节中至少一个位置字节用来标识所述位置类型。5.如权利要求1所述的一个或多个数据成员,其特征在于,所述至少一个类型字节是所述多个顺序地存储的字节中的第一字节,并指示所述数据对象的开始。6.如权利要求5所述的一个或多个数据成员,其特征在于,所述至少一个类型字节指示数据对象的类型。7.如权利要求1所述的一个或多个数据成员,其特征在于,所述数据类型是从一组中选出的,该组包含除大对象(“LOB”)外的原语数据类型、大对象(“LOB”)数据类型、文件流(“FS”)数据类型及集合元素数据类型。8.如权利要求7所述的一个或多个数据成员,其特征在于,如果所述至少一个数据成员与除LOB外的原语数据类型相关,那么所述至少一个数据成员以记录格式存储,其中,所述记录格式定义了所述至少一个数据成员关于所述至少一个类型字节的可预测位置。9.如权利要求1所述的一个或多个数据成员,其特征在于,所述至少一个类型字节指示所述至少一个数据成员是所述数据对象仅有的一个或几个成员。10.如权利要求1所述的一个或多个数据成员,其特征在于,还包括所述多个顺序地存储的字节中的至少一个集合起始字节,其中,所述至少一个集合起始字节用于指示一系列相关数据成员的开始,所述数据成员存储在充分接近所述至少一个集合起始字节之处。11.如权利要求1所述的一个或多个数据成员,其特征在于,还包括所述多个顺序地存储的字节中的至少一个终止符字节,其中,所述至少一个终止符字节用于指示一系列数据成员的结束。12.如权利要求1所述的一个或多个数据成员,其特征在于,还包括所述多个顺序地存储的字节中的至少一个字节,该字节与作为一数据成员集合的一部分的第一数据成员相关,其中,所述少一个字节提供关于作为所述数据成员集合的一部分的第二数据成员的信息。13.如权利要求1所述的一个或多个数据成员,其特征在于,还包括存储在充分接近所述至少一个数据成员之处的至少一个二叉树(“b树”)号码。14.一种用于存储或发送由至少一个数据成员组成的数据对象的方法,其特征在于,包括在多个顺序地存储的字节内表示至少一个数据成员,其中,所述至少一个数据成员与一数据类型相关;以及将所述多个顺序地存储的字节内的至少一个字节专用于标识所述至少一个数据成员的类型信息,其中,所述至少一个字节位于充分接近所述至少一个数据成员之处。15.如权利要求14所述的方法,其特征在于,标识所述至少一个数据成员是用记录格式来完成的,且所述记录格式定义了所述至少一个数据成员关于所述至少一个类型字节的可测位置。16.如权利要求14所述的方法,其特征在于,还包含了将所述多个顺序地存储的字节中的至少一个字节专用于标识所述至少一个数据成员的长度。17.如权利要求14所述的方法,其特征在于,所述至少一个数据成员指示与所述数据对象相关的数据位置,且所述位置与一...

【专利技术属性】
技术研发人员:FS特瑞克A卡尔汉N波内坎蒂S兰加拉杰MJ兹威林
申请(专利权)人:微软公司
类型:发明
国别省市:US[美国]

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

1