具体实施方式
本申请书中所使用的术语“组件”、“***”、“接口”、“模式”等等意指与计算机有关的实体,可以是硬件、硬件和软件的组合、软件(例如,执行中的软件)和/或固件。例如,组件可以是运行在处理器上的进程、处理器、对象、可执行程序、程序和/或计算机。作为例示,运行在服务器上的应用程序和服务器本身都可以是组件。一个或多个组件可以驻留在一个进程中,并且,组件可以位于一台计算机内和/或分布在两台或更多的计算机之间。
参考附图描述本发明主题,附图中,始终用相同的参考数字来指示相同的元素。在下列描述中,出于解释的目的,阐明了很多具体细节,以提供对本发明主题的全面理解。然而,显然,本发明主题可以不需要这些具体细节就能实现。在其他实例中,以框图的形式显示众所周知的结构和设备,以便于描述本发明。
现在转到附图,图1示出便于存储与数据模型相关联的类型实例的***100。数据模型可以是允许存储、查找和相关信息的文件存储数据模型102。例如,信息类型可以是,但不限于,文档、图像、视频、联系人、消息、电子邮件、音频剪辑等等。信息类型可以被认为是能被表示为复杂类型的实例的信息单元,这些复杂类型是支持继承的类型***的一部分。继承可以被定义为其中某些特征从一个上下文传递到另一个上下文的情况。尤其是在面向对象的编程中,对象从其他对象继承属性和/或行为。应当明白,继承可以被认为是分层结构和/或格式。
类型存储***104可以存储类型实例并且进行查询,以便高效地且有效地查找项目、文档和/或联系人的至少其中之一。类型存储***104可以接收数据,其中数据可以包括类型、准则、模式、查询准则……。具体来说,存储与消息类型(例如,文件、图像、视频、联系人、消息、电子邮件、音频剪辑)有关的类型实例可以提供以下的至少其中之一:1)在文件存储数据模型102中查找满足特定准则的至少一个项目;2)在文件存储数据模型102中查找满足特定准则的至少一个文档;以及3)查找满足特定准则的至少一个联系人(例如,包括个人、组织和群)。
类型存储***104可以利用关联到关系存储和关系查询的关系型数据库技术。应当明白,这些性能可以由数据库引擎提供(未示出)。关系型数据库技术可以关联到关系型数据库,其中关系型数据库是被组织为一组规范描述的表的数据项目的集合。表中的数据不需要重新组织数据库表就能以各种方式访问和/或重新汇编。此外,可以容易地扩展关系型数据库,如增加类别而无需修改现有的应用程序和/或数据。应该明白,本发明不限于关系型数据库和/或相关技术,可以利用任何适当的技术。
***100还包括接口组件106,接口组件106提供各种适配器、连接器、信道、通信路径等等,以将类型存储***104集成到实际上任何操作***。另外,接口组件106可以提供规定与数据和类型存储***104的交互的各种适配器、连接器、信道、通信路径等等。应该明白,尽管接口组件106被合并到类型存储***104中,但不限于这种实现。例如,接口组件106可以是接收或发送与***100有关的数据的单独组件。
图2示出便于存储类型实例和/或查询以便查找与数据模型202项关联的项目、文档和联系人的***200。数据模型202可以是利用分层特性和/或继承的文件存储***的模型表示。类型可以包括文档、图像、视频、联系人、消息、电子邮件、音频剪辑等等。然而,应该明白,类型可以是被存储在由数据模型202表示的***中的典型信息类型。类型存储***204可以存储类型实例并提供能够高效地查找以下的至少其中之一的查询:数据模型202中的项目、数据模型202中的文档以及数据模型202中的联系人。类型存储***204可以接收数据,其中数据可以是查询准则、模式、准则、模式定义、数据模型、类型……。***200还可以使用接口206以便于提供各种适配器、连接器、信道、通信路径等等,以将类型存储***204集成到实际上任何操作***并便于通信。
类型存储***204还可以包括能够存储类型实例的存储组件208(“存储208”)。该存储可以是数据模型202的映射,其中该存储映射可以描述基于模式定义所创建的数据库对象,以及该模式中所描述的类型实例如何被存储和/或访问。换言之,存储208可以存储该类型的实例以及与将类型声明映射到数据库对象相关联的至少一个规则。
类型存储***204可以包括提供数据查询的查询组件210(“查询210”)。查询210可以获得以下的至少其中之一:由数据模型202表示的***中的项目;由数据模型202表示的***中的文档;以及由数据模型202表示的***中的联系人(例如,包括个人、组织和群)。应该明白并理解,查询可以基于经由接口206获得的至少一个特定准则和/或查询准则。此外,查询210不限于项目、文档和联系人,且可以利用存储在由数据模型202表示的***中的任何适当的信息类型。
图3示出便于利用关系型存储和关系型查询性能的***300。类型存储***304可以存储类型实例并查询以便高效地且有效地查找项目、文档和联系人,其中这些元素被关联到由数据模型302表示的文件***。应该明白,该文件***可以是利用分层结构和/或继承特性的存储文件***。类型存储***304实质上可以类似于分别如图1和2所描述的类型存储***104、204。类型存储***304可以调用接口306以便于通信和/或接收要根据本发明进一步利用的数据。
类型存储***304可以包括存储组件308(存储308)和查询组件310(“查询310”)。存储308可以提供任何适当的存储技术以存储类型实例。查询310能够提供可以高效地且有效地获得以下的至少其中之一的查询:***中满足准则的至少一个项目;***中满足准则的至少一个文档;以及符合准则的至少一个联系人。应该明白并理解,存储308和查询310实质上可以类似于如图2所描述的存储208和查询210。
类型存储***304还可以包括关系组件312(“关系312”)。关系组件312利用数据库技术(例如,利用数据库引擎)建立关系型存储和/或提供关系型查询性能以便于存储类型实例和/或查询。关系组件312可以结合与关系型数据库相关联的技术,其中关系型数据库是如上所述被组织为一组规范描述的表的数据项目的集合。应该明白,本发明不限于关系型数据库和相关技术,可以利用任何适当的技术。
图4示出便于结合数据模型402来映射和/或查看的***400。数据模型402可以表示允许存储、查找和相关信息的文件存储***。能够存储在该***中的典型信息类型可以包括文档、图像、音乐、视频、联系人、消息等等。该信息类型可以被表示为复杂类型的实例,这些复杂类型是支持继承的类型***的一部分。类型存储***404可以存储类型实例并提供查询以便查找满足特定准则的项目、文档和联系人。***400还可以使用接口406来便于通信和/或接收数据,这类数据可以包括准则、类型、模式模型和查询准则。
类型存储***404还可以包括映射组件408以便于存储类型实例。映射组件408提供将模式中所描述的类型映射到所定义的类型和数据库对象。映射组件408可以是描述至少一个数据库对象和/或模式中所描述的类型实例如何被存储和/或访问的存储映射,其中数据库对象可以基于模式定义来创建。换言之,可以存储类型的实例并可以利用规则,以将类型声明映射到数据库对象中。模式中的每个类型映射到存储中的一个类(例如,公共语言运行库(CLR))。
类型存储***404可以包括视图组件410以便提供视图投影。视图投影可以展示所查看的类型实例。应该明白,类型可以采用至少利用继承的分层结构。换言之,每个类型是类型层次的一部分。视图可以与一给定的类型相关联,并可以投影与其基本类型相关联的相应类型视图的子集。该视图可以将相关联的实例投影到特定类型。例如,对于类型“消息”,至少基于该分层结构,只有其消息是其父节点的实例才可以被查看。
视图组件410能够提供各种类型的用户界面,以便于用户和耦合到类型存储***404的任何组件之间的交互。如上所述,视图组件410是被合并到类型存储***404中的单独实体。然而,应该明白,视图组件410和/或类似视图组件可以是独立于类型存储***404的单独组件和/或独立单元。视图组件410可以提供一个或多个图形用户界面(GUI)、命令行界面等等。例如,GUI可以被实现为向用户提供加载、导入、读取数据等的区域或方法,并可以包括呈现这些结果的区域。这些区域可以包括已知文本和/或图形区域,包括对话框、静态控件、下拉菜单、列表框、弹出式菜单以及编辑控件、组合框、单选按钮、复选框、下压按钮和图形框。另外,可以使用实用程序来便于显示用于导航的这类垂直和/或水平滚动条,以及确定区域是否可查看的工具栏按钮。例如,用户可以与耦合到类型存储***404的一个或多个组件交互。
用户也可以与区域交互以便经由各种设备来选择和提供信息,这些设备如鼠标、滚动球、小键盘、键盘、笔和/或语音激活。通常,可以在输入信息以便开始搜索之后使用像下压按钮或键盘上的Enter键这样的机制。然而,应该明白,本发明不限于此。例如,仅仅突出显示复选框就可以启动信息传送。在另一个例子中,可以使用命令行界面。例如,命令行界面可以通过提供文本消息来提示用户(例如,通过显示器上的文本消息和音频音调)输入信息。于是用户可以提供适当的信息,如对应于界面提示中所提供的选项或对提示中所提出问题的字母或数字输入。应该明白,命令行界面可以与GUI和/或API结合一起使用。另外,命令行界面可以与具有有限的图形支持和/或低带宽通信信道的硬件(例如,视频卡)和/或显示器(例如,黑白以及EGA)一起使用。
图5示出利用智能来便于存储与数据模型502相关联的类型实例的***500。***500包括类型存储***504、接口506和数据模型502,它们实质上可以类似于前面的图中所描述的组件。接口506能够便于与数据相关联的通信,包括准则、类型、模式、数据模型和查询准则。***500能够提供存储类型、查询的存储和/或提供视图。应该明白并理解,数据库引擎能够向***500提供关系型存储和关系型查询。
***500还包括智能组件508。智能组件508可以被类型存储***504用来便于存储和/或查询***500。例如,智能组件508可以用来便于确定要存储的用户定义类型。结合用户概况,历史数据可以允许智能组件508确定存储该类型和/或以特定准则进行查询。
应该理解,智能组件508能够从通过事件和/或数据所捕捉的一组观察结果中推断或推理***、环境和/或用户的状态。例如,可以使用推理来标识特定上下文或动作,或者可以产生状态的概率分布。推理可以是概率性的,即,所关心的状态的概率分布的计算以对数据和事件的考虑为基础。推理也可以是用于从一组事件和/或数据构成更高级事件的技术。这类推理导致从一组所观察的事件和/或所存储的事件数据中构造新事件,而无论诸事件是否有在时间上密切相关,也无论事件和数据是来自一个还是多个事件和数据源。各种分类(显式和/或隐式地训练的)方案和/或***(例如,支持矢量机、神经网络、专家***、贝斯信任网络、模糊逻辑、数据融合引擎……)能结合本发明用于执行自动和/或推理的动作。
分类器是将输入属性矢量x=(x1,x2,x3,x4,xn)映射到其输入属于一类的置信度的函数,即,f(x)=confidence(class)。这样的分类可以应用基于概率和/或基于统计的分析(例如,包括分析效用和成本)来预测或推理用户想要自动执行的动作。支持矢量机(SVM)是可以应用的分类器的一个例子。SVM通过在可能输入的空间查找超曲面来进行工作,该超曲面尝试将触发准则从非触发事件分离开来。直观上,这使得分类对于接近但不相同的测试数据是正确的。可采用其他有向和无向模型分类方法,包括,例如,单纯贝叶斯、贝叶斯网络、决策树、神经网络、模糊逻辑模型和提供不同的独立性模式的概率分类模型。此处使用的分类也包括用来开发优先级模型的统计回归。
此外,智能组件508能利用数据存储510存储用户概况和/或历史数据。数据存储510可以是,例如,易失性存储器或非易失性存储器,或者可以包括易失性存储器或非易失性存储器两者。作为例示而非限制,易失性存储器可以包括只读存储器(ROM)、可编程只读存储器(PROM)、电可编程只读存储器(EPROM)、电可擦写可编程只读存储器(EEPROM)或闪存。易失性存储器包括担任外部缓冲存储器的随机存取存储器(RAM)。作为例示而非限制,随机存取存储器以许多形式获得,例如静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、同步DRAM(SDRAM)、双倍数据速率SDRAM(DDR SDRAM)、增强型SDRAM(ESDRAM)、同步链路DRAM(SLDRAM)、Rambus直接随机存储器(RDRAM)、直接Rambus动态随机存储器(DRDRAM)以及Rambus动态随机存储器(RDRAM)。本发明的***和方法的数据存储510旨在包括但不限于这些和任何其他适当类型的存储器。另外,应该明白,数据存储510可以是服务器和/或数据库。
图6示出存储的高层结构。可以提供一种模式,其中类型的各种实例可以取决于其类型而存储在表中。类型可以是,但不限于,项目、项目扩展、项目片段和链接。每个类型都可以有一个相应的表,该表可以包括在其中有对象实例的列。例如,项目表中的一列可以包含存储器中的所有项目的实例。对每一行,该列可以包含表示项目类型实例的CLR类实例的串行化表示。应该明白,对于项目扩展、项目片段和链接,类型实例可以用类似的结构表示。内联类型实例可以存储在父对象实例中而不是存储在独立的表和/或列中。对于项目、项目扩展、项目片段和链接,可以创建展示该类型的所有实例的视图。每个类型都是类型层次的一部分。例如,项目视图投影存储中的所有项目。
简短地转到图7,描述项目702。项目702的表704可以包含存储中所有项目的实例(未示出)。该表704可以包含对象实例706(“文档”)和对象实例708(“联系人”)。应该明白,模式中的每个类型都映射到存储中的一个CLR类。对象实例706可以包括名称、摘要、打印、作者和与对象实例706相关联的其他各种元数据。同样,对象实例708可以包括各种元数据,如名字、地址、电子邮件等等。
图8示出类型层次800和相应的视图投影820。类型层次800可以包括项目802、联系人804、文档806、消息808、个人810、组织812、电子邮件814、传真816和语音818。应该明白,类型层次800是一个例子,可以根据本发明利用任何适当的层次和/或类型。正如所示的那样,项目802被认为是其中所包括的每个类型的父节点。因此,联系人804是个人810和组织812的父节点,消息808是电子邮件814、传真816的父节点以及语音818的父节点。此外,相应的视图投影820可以反映类型层次800。与给定类型相关联的视图可以投影与其基本类型相关联的视图的项目的一个子集。例如,项目视图投影存储中的所有项目。联系人视图只投影类型联系人(Contact)的项目。个人视图只投影把个人(person)作为最底层派生类型的联系人。
返回到图6,可以提供类型映射,该类型映射利用一种算法来将该类型映射到用于描述存储中相应存储结构的类型。应该明白,该映射可以关联到任何文件存储***(例如,基于***的数据模型,其利用类型的复杂实例来描述和/或表示信息单元)。在模式中所声明的每个类型被映射到一支持SQL UDT契约的CLR类。应该明白,尽管在下列例子中使用SQL,但是可以使用任何适当的数据库管理***。类型属于一名字空间,其名字对应于附加有“.Store(存储)”后缀的模式的名字空间。给定名字空间中的类型被编译为用作该模式的部署单元的单个程序集。CLR类型的名字等同于模式中所声明的名字。对于该类型的所声明的每一特性,以下被添加到相应的CLR类型:1)具有等同于模式中所指定名字的名字的私有字段,前缀为“m_”。该字段用UDT专用属性System.Data.SqlTypes.SqlUdtField来设置属性;2)具有等同于模式中所指定名字的名字的公有属性以及相应的get(获取)/set(设置)语句。该属性用UDT专用属性System.Data.SqlTypes.SqlUdtProperty来设置属性;以及3)该字段的类型和属性是对应于模式中所声明类型的CLR类型。如果该类型是标量类型的其中之一,就将其映射到标量SQL类型的其中之一(在下面讨论)。
下表描述将文件存储***标量类型映射到相应的SQL受管类型:
表1
文件存储***类型 |
受管SQL类型 |
描述 |
String |
SqlString |
具有最大长度为2^31字符长度的可变长度Unicode数据。该长度可以固定为1-4000个字符或不受限制地使用“max(最大)”关键字。 |
Binary |
SqlBinary |
具有最大长度为2^31字符长度的可变长度二进制数据。该长度可以固定为1-8000字节或不受限制地使用“max(最大)”关键字。 |
Boolean |
SqlBoolean |
可为空的布尔值 |
Byte |
SqlByte |
单个无符号字节 |
Int16 |
SqlInt16 |
从-2^15(-32,768)到2^15-1(32,767)的整数数据。 |
Int32 |
SqlInt32 |
从-2^31(-2,147,483,648)到2^31-1(2,147,483,647)的整数数据。 |
Int64 |
SqlInt64 |
从-2^63(-9223372036854775808)到2^63-1(9223372036854775807)的整数数据。 |
Single |
SqlSingle |
从-3.40E+38到3.40E+38的浮动精度数数据。 |
Double |
SqlDouble |
从-1.79E+308到1.79E+308的浮动精度数数据。 |
Decimal |
SqlDecimal |
具有固定精度和标度的数值数据类型。应用于十进制类型特性的精度和标度属性。精度定义十进制数的十进制数字最大个数。这包括小数点左边和右边的数字。精度属性的值是一个在1和28之间的整数。标度定义小数点右边的十进制数字最大个数。标度属性的值必须在0和精度属性之间。注意,对里程碑B:在这一里程碑中不支持这些属性。精度被固定为28,而标度被固定为14。 |
DateTime |
SqlDateTime |
从1753年1月1日到9999年12月31日的日期和时间,精确度为三百分之一秒或3.33毫秒。 |
Guid |
SqlGuid |
全局唯一标识符(GUID)。 |
Xml |
SqlString |
XML通常被存储为字符串字段。正在考虑将本地Xml类型支持用于后Beta1。 |
Stream |
TBD |
为后Beta1所设计的支持。如果获得支持,它可以代替string(max)(字符串(最大))和binary(max)二进制(最大)声明。 |
在文件存储***存储中所创建的数据库对象可以按SQL模式名字存储,该SQL模式名字由该文件存储***模式名字派生而来。后缀“.Store”被附加到文件存储***模式名字来生成该SQL模式名字。例如,文件存储system.storage模式生成“[System.Storage.Store]”SQL模式中的对象,如“[System.Storage.Store].Item”。
能够通过视图来访问文件存储***内的内容。下面所描述的视图是只读的,但由于该视图可以允许写,本发明没有这样的限制。每个项目类型可以被映射到一个类型化视图。在文件存储***存储器中可以使用命名约定[<模式名>.Store].[<项目类型名>]来标识每个类型化项目视图。类型T的类型视图可以返回类型为T以及从T派生的所有类型的所有项目。对应于System.Storage.Item类型的视图是[System.Storage.Store].[Item]。这一视图能够返回文件存储***存储器中的所有项目。下表描述的一个项目类型视图的列:
表2
列名 |
类型 |
描述 |
ItemId |
[System.Storage.Store].ItemId |
项目的ItemId |
TypeId |
[System.Storage.Store].TypeId |
模式化类型id |
NamespaceName |
nvarchar(255) |
该项目的唯一名字 |
ContainerId |
[System.Storage.Store].ItemId |
容器项目的id |
Item |
Item type |
项目类型的实例 |
EntityState |
[System.Storage.Store].EntityState |
项目的状态信息 |
ObjectSize |
Bigint |
项目对象的大小(持久列) |
ChangeInformation |
[System.Storage.Store].ChangeInformation |
改变跟踪信息 |
ItemSyncMetadata |
[System.Storage.Store].ItemSyncMetadata |
同步元数据 |
PathHandle |
[System.Storage.Store].BinPathHandle |
到项目的路径句柄 |
PromotionStatus |
Int |
项目的升级状态 |
每一链接类型被映射到一个类型化视图。在文件存储***存储中使用命名约定[<模式名>.Store].[<链接类型名>])来标识每一类型化链接视图。对应于System.Storage.Link类型的视图是[System.Storage.Store].[Link]。这一视图可以包含文件存储***存储中的所有链接。下表描述链接类型视图的诸列:
表3
列名 |
类型 |
描述 |
SourceRef |
[System.Storage.Store].ItemId |
源项目的ItemIdLinkId |
LinkId |
[System.Storage.Store].LinkId |
链接的Id |
TargetRef |
[System.Storage.Store].ItemId |
目标项目的ItemIdTypeId |
TypeId |
[System.Storage.Store].TypeId |
链接实例的最底层派生类型的TypeId |
Link |
Link type |
链接类型的实例 |
EntityState |
[System.Storage.Store].EntityState |
链接的状态信息 |
ObjectSize |
Bigint |
链接对象的大小(持久列) |
ChangeInformation |
[System.Storage.Store].ChangeInformation |
改变跟踪信息 |
LinkSyncMetadata |
[System.Storage.Store].ItemSyncMetadata |
同步元数据 |
PathHandle |
[System.Storage.Store].BinPathHandle |
到链接源项目的路径句柄 |
所有项目片段可以通过单个视图[System.Storage.Store].[ItemFragment]来访问。下表描述全局项目片段视图的诸列:
表4
列名 |
类型 |
描述 |
ItemId |
[System.Storage.Store].ItemId |
持有项目的ItemId |
SetId |
[System.Storage.Store].SetId |
项目片段的用法 |
FragmentId |
[System.Storage.Store].FragmentId |
片段实例的Id |
TypeId |
[System.Storage.Store].TypeId |
ItemFragment实例的最底层派生类型的TypeId |
ItemFragment |
[System.Storage.Store].[ItemFragment] |
ItemFragment类型的实例 |
EntityState |
[System.Storage.Store].EntityState |
链接的状态信息 |
ChangeInformation |
[System.Storage.Store].ChangeInformation |
改变跟踪信息 |
PathHandle |
[System.Storage.Store].BinPathHandle |
到链接的源项目的路径句柄 |
每个存储器提供一个称为[System.Storage.Store].[ItemExtension]的全局扩展视图。所有扩展类型的实例可以通过这一视图来访问。下表描述全局扩展视图中的诸列:
表5
列名 |
类型 |
描述 |
ItemId |
[System.Storage.Store].ItemId |
扩展的ItemId |
TypeId |
[System.Storage.Store].TypeId |
模式化类型id |
ItemExtension |
[System.Storage.Store].ItemExtension |
扩展类型实例 |
EntityState |
[System.Storage.Store].EntityState |
扩展的状 |
| |
态信息 |
ObjectSize |
Bigint |
扩展对象的大小(持久列) |
ChangeInformation |
[System.Storage.Store].ChangeInformation |
改变跟踪信息 |
PathHandle |
[System.Storage.Store].BinPathHandle |
到拥有扩展的项目的路径句柄 |
每个扩展类型被映射到一个类型化视图。文件存储***存储中使用命名约定[<模式名>.Store].[<扩展类型名>])来标识每个类型化扩展视图。下表描述扩展类型视图的诸列:
表6
列名 |
类型 |
描述 |
ItemId |
[System.Storage.Store].ItemId |
扩展的ItemId |
TypeId |
[System.Storage.Store].TypeId |
模式化类型id |
ItemExtension |
Extension type |
扩展类型实例 |
ObjectSize |
Bigint |
扩展对象的大小(持久列) |
EntityState |
[System.Storage.Store].EntityState |
扩展的状态信息 |
ChangeInformation |
[System.Storage.Store].ChangeInformation |
改变跟踪信息 |
PathHandle |
[System.Storage.Store].BinPathHandle |
到拥有扩展的项目 |
在文件存储***中,内联类型实例可以被存储在实体类型实例中。应该明白并理解,它们是通过查询适当的搜索视图来访问的。
所有项目被存储在称为[System.Storage.Store].[Table!Item]的单个项目表中。下表中的唯一关键字是ItemId:
表7
列名 |
类型 |
描述 |
ItemId |
[System.Storage.Store].ItemId |
项目的ItemId |
TypeId |
[System.Storage.Store].TypeId |
模式化类型id |
NamespaceName |
Nvarchar(255) |
项目的唯一名字 |
ContainerId |
[System.Storage.Store].ItemId |
容器项目的id |
Item |
Item type |
项目 |
EntityState |
[System.Storage.Store].EntityState |
包含关于项目的元信息的EntityState udt |
SDId |
Int |
仅供内部使用(由安全子***使用) |
SDLastUpdateLocalTS |
Bigint |
SDId最后一次改变的时间标记。用于改变跟踪。 |
ChangeInformation |
[System.Storage.Store].ChangeInformation |
改变跟踪信息 |
ItemSyncMetadata |
[System.Storage.Store].ItemSyncMetadata |
用于全局标识符的同步元数据 |
TombstoneStatus |
Int |
墓碑状态 |
LastUpdateLocalTS |
Bigint |
仅供内部使用 |
| |
(用于索引)。这一列实际上被映射到ChangeInformation.LastUpdateLocalTS。需要将其映射以便创建其索引。 |
MaxOrd |
int |
仅供内部使用(用于为被添加到这一容器项目的新项目计算PathHandle) |
TypePath |
Hierarchical_Type_Id |
仅供内部使用(持久列) |
ObjectSize |
Bigint |
项目对象的大小(持久列) |
PathHandle |
[System.Storage.Store].BinPathHandle |
到这一项目的路径句柄 |
PromotionStatus |
Int |
该项目的升级状态 |
LastAccessTime |
DateTime |
与项目相关联的文件流的最后访问时间。 |
StreamSize |
Bigint |
与项目有关的流大小 |
AllocationSize |
Bigint |
与项目相关联的流所分配的大小 |
在下表中描述项目表的索引:
表8
列 |
唯一 |
聚集 |
所包括的列 |
TypePath,ItemId |
是 |
是 | |
ItemId |
是 |
否 |
TombstoneStatus,TypePath,SDId |
PathHandle |
是 |
否 |
SDId,TombstoneStatus |
ContainerId,NamespaceName |
是 |
否 |
SDId,TombstoneStatus |
LastUpdateLocalTS |
否 |
否 |
SDId,TombstoneStatus,PathHandle |
所有链接将被存储在被命名为[System.Storage.Store].[Table!Link]的链接表中。下表中唯一关键字是ItemId、LinkId:
表9
列名 |
类型 |
描述 |
SourceRef |
[System.Storage.Store].ItemId |
源项目的ItemId |
LinkId |
[System.Storage.Store].LinkId |
链接的Id |
TargetRef |
[System.Storage.Store].ItemId |
目标项目的ItemId |
TypeId |
[System.Storage.Store].TypeId |
模式化类型id |
TypePath |
Hierarchical_Type_Id |
仅供内部使用(持久列) |
Link |
Link type |
链接对象 |
EntityState |
[System.Storage.Store].EntityState |
关于链接的状态信息 |
SDId |
Int |
仅供内部使用 |
TombstoneStatus |
Int |
墓碑状态 |
ObjectSize |
Bigint |
链接对象的大小(持久列) |
ChangeInformation |
[System.Storage.Store].ChangeInformation |
改变跟踪信息 |
LinkSyncMetada |
[System.Storage.Store].LinkSyncMet |
同步元数据 |
ta |
adata | |
LastUpdateLocalTS |
Bigint |
仅供内部使用(用于索引)。这一列实际上被映射到ChangeInformation.LastUpdateLocalTS。需要将其映射以便创建其索引。 |
PathHandle |
[System.Storage.Store].BinPathHandle |
到作为链接源的项目的路径句柄 |
链接表的索引在下表中描述:
表10
列 |
唯一 |
聚集 |
所包括的列 |
SourceRef,LinkId |
是 |
是 | |
TypePath |
否 |
否 |
SDId,TombstoneStatus |
SourceRef,TypePath |
否 |
否 |
SDId,TombstoneStatus |
PathHandle |
否 |
否 |
SDId,TombstoneStatus |
TargetRef |
否 |
否 |
SDId,TombstoneStatus |
LastUpdateLocalTS |
否 |
否 |
SDId,TombstoneStatus,PathHandle |
所有EntityExtension被存储在被称为[System.Storage.Store].[Table!ItemExtension]的单个表中。下表描述项目扩展表:
表11
列名 |
类型 |
描述 |
ItemId |
[System.Storage.Store].ItemId |
扩展的ItemId |
TypeId |
[System.Storage.Store].TypeId |
模式化类型id |
TypePath |
Hierarchical_Type_Id |
仅供内部使用 |
| |
(持久列) |
ItemExtension |
[System.Storage.Store].ItemExtension |
ItemExtension对象 |
EntityState |
[System.Storage.Store].EntityState |
包含关于EntityExtension的元信息的EntityState udt。 |
SDId |
Int |
仅供内部使用 |
TombstoneStatus |
Int |
墓碑状态 |
ObjectSize |
Bigint |
EntityExtension对象的大小(持久列) |
ChangeInformation |
[System.Storage.Store].ChangeInformation |
改变跟踪信息 |
LastUpdateLocalTS |
Bigint |
仅供内部使用(用于索引)。这一列实际上被映射到ChangeInformation.LastUpdateLocalTS。需要将其映射以便创建其索引。 |
PathHandle |
[System.Storage.Store].BinPathHandle |
到拥有这一EntityExtension的项目的路径句柄 |
下表中描述ItemExtension表的索引:
表12
列 |
唯一 |
聚集 |
所包括的列 |
TypePath,ItemId,TypeId |
是 |
是 | |
ItemId,TypeId |
否 |
否 |
SDId,TombstoneStatus,PathHandle |
PathHandle |
是 |
否 |
SDId,TombstoneStatus |
LastUpdateLocalTS |
否 |
否 |
SDId,TombstoneStatus,PathHandle |
所有ItemFragment类型实例被存储在一个名为[System.Storage.Store].[Table!ItemFragment]的单个表中。下表描述ItemFragment类型:
表13
列名 |
类型 |
描述 |
ItemId |
[System.Storage.Store].ItemId |
持有项目的ItemId |
SetId |
[System.Storage.Store].SetId |
项目片段的用法 |
FragmentId |
[System.Storage.Store].FragmentId |
片段实例的Id |
ItemFragment |
[System.Storage.Store].ItemFragment |
ItemFragment对象 |
TypeId |
[System.Storage.Store].TypeId |
模式化化类型id |
TypePath |
Hierarchical_Type_Id |
仅供内部使用(持久列) |
EntityState |
[System.Storage.Store].EntityState |
包含关于片段的元信息的EntityState udt。 |
SDId |
int |
仅供内部使用 |
TombstoneStatus |
int |
墓碑状态 |
ObjectSize |
bigint |
ItemFragment对象的大小(持久列) |
ChangeInformation |
[System.Storage.Store].ChangeInformation |
改变跟踪信息 |
LastUpdateLocalTS |
bigint |
仅供内部使用(用于索引)。 |
| |
这一列实际上被映射到ChangeInformation.LastUpdateLocalTS。需要将其映射以创建其索引。 |
PathHandle |
[System.Storage.Store].BinPathHandle |
到主项目的路径句柄 |
下表中描述ItemFragment表的索引:
表14
列名 |
唯一 |
聚集 |
所包括的列 |
TypePath,ItemId,SetId,FragmentId |
是 |
是 | |
ItemId,SetId,FragmentId |
是 |
否 |
SDId,TombstoneStatus,PathHandle |
PathHandle |
是 |
否 |
SDId,TombstoneStatus |
LastUpdateLocalTS |
否 |
否 |
SDId,TombstoneStatus,PathHandle |
图9-10例示根据本发明主题的方法。出于简化解释的目的,这些方法被描写和描述为一系列的动作。应该理解并明白,本发明主题不受所示的动作和/或动作顺序所限制,例如动作可以按各种顺序发生和/或与此处未呈现和描述的其它动作同时发生。此外,并非需要所有示出的动作来实现根据本发明主题的方法。另外,本领域的技术人员可以理解并明白,这些方法可以替换地通过状态图表示为一系列相互联系的状态或事件。
图9示出便于存储映射到数据模型和/或提供查询的类型实例的方法900。该数据模型可以是允许存储、查找以及相关信息的文件存储数据模型。信息类型可以是,但不限于,文件、图像、视频、联系人、消息、电子邮件、音频剪辑等等。这些信息类型(例如,信息单元)可以被表示为复杂类型的实例,这些复杂类型是支持继承的类型***的一部分,其中继承允许对象从其他对象继承属性和/或行为。应该明白,继承可以被认为是分层结构和/或格式。
在参考标号902,可以接收数据,其中数据可以包括类型、准则、模式、查询准则……。在参考标号904,可以存储类型实例以便映射到数据模型(例如,文件存储数据模型)。例如,该模型能将模式中所描述的类型映射到用户定义的类型和数据库对象。存储器映射可以描述基于模式定义所创建的数据库对象,以及模式中所描述的类型实例如何被存储和/或访问。在一个例子中,可以设计数据库结构以使得可以提供类型实例以及将类型声明映射到数据库对象中的规则。
在参考标号906,可以调用满足至少一个准则的查询以便高效地且有效地查找项目、文档和联系人。例如,存储与诸信息类型有关的类型实例可以利用该查询来提供以下的至少其中之一:1)查找文件存储数据模型102中满足特定准则的至少一个项目;2)查找文件存储数据模型102中满足特定准则的至少一个文档;以及3)查找满足特定准则的至少一个联系人(例如,包括个人、组织和群)。
图10示出便于存储类型实例和/或提供查询的方法1000。在参考标号1002,获得和/或接收数据。该数据可以包括类型、准则、模式、查询准则等等。在1004,可以利用数据库引擎来提供用于存储类型实例和/用于查询的至少一个机制。例如,可以利用关系型数据库引擎来提供关系型存储和关系型查询性能。该关系型数据库引擎可以利用被组织为一组规范描述的表的数据项目的集合。表中的数据不需要重新组织数据库表就能以各种方式访问和/或重新汇编。此外,关系型数据库可被容易地扩展,如增加新的类别而无须修改现有的应用程序和/或数据。
在参考标号1006,存储类型实例以便映射到数据模型,其中该数据模型可以是文件存储***。存储器映射描述基于模式所创建的数据库对象以及模式中所描述的类型实例如何被存储和/或访问。映射可以是模式中所描述的类型,其中这样的映射是映射到用户定义的类型和数据库对象。在参考标号1008,可以提供查询以便查找项目、文件和联系人的至少其中之一。该查询可以被用来至少部分地基于准则来搜索。而且,在参考标号1010,可以使用视图来展示类型的实例。例如,该类型***可以是分层结构的,其中可以创建视图来展示任何特定的类型实例。换言之,由于分层结构,该视图与一给定类型相关联,其中该视图投影与其基本类型相关联的视图的特定类型的一个子集。
为了提供用于实现本发明各方面的附加的环境,图11-12以及下面的讨论提供可以在其中实现本发明各方面的合适计算环境的简要概括描述。尽管前面已经在运行在本地计算机和/或远程计算机上的计算机程序的计算机可执行指令的一般上下文中描述本发明,本领域的技术人员将认识到,本发明也可以与其他程序模块结合实现。一般地,程序模块包括执行特定任务或实现特定抽象数据类型的例程、程序、对象、数据结构等等。
而且,本领域内的技术人员将会明白,本发明的方法可以与其他计算机***配置一起实施,这些其他计算机***配置包括单处理器或多处理器计算机***、小型计算机、大型计算机以及个人计算机、手持式计算设备、基于微处理器的和/或可编程的消费性电子产品等等,其中的每一个都可以在操作上与一个或多个相关联的设备通信。本发明的示例性方面也可以在分布式计算环境中实施,在分布式计算环境中,特定任务由通过通信网络连接的远程处理设备执行。然而,本发明一些方面(如果不是全部方面)可以在独立计算机上实施。在分布式计算环境中,程序模块可以置于本地和/或远程的存储器设备。
图11是可以与本发明交互的示例计算环境1100的示意性框图。***1100包括一个或多个客户机1110。客户机1110可以是硬件和/或软件(例如,线程、进程、计算设备)。***1100也包括一个或多个服务器1120。服务器1120可以是硬件和/或软件(例如,线程、进程、计算设备)。服务器1120可以主存线程用于例如通过使用本发明来执行转换。
在客户机1110和服务器1120之间的一种可能的通信能够以适合在两个或多个计算机进程之间传输的数据包形式进行。***1100包括可以用来帮助客户即1140和服务器1110之间通信的通信框架1120。客户机1110可在操作上耦合到一个或多个可以用来存储客户机1110的本地信息的客户机存储1150。同样地,服务器1120可在操作上耦合到一个或多个可以用来存储服务器1140的本地信息的服务器存储1130。
参照图12,实施本发明的各个方面的示例性***包括计算机1212。计算机1212包括处理单元1214、***存储器1216和***总线1218。***总线1218将包括但不限于***存储器1216在内的***组件耦合到处理单元1214。处理单元1214可以是各种可用处理器中的任意几种。双微处理机和其他多处理器结构也可以用作处理单元1214。
***总线1218可以是多种类型总线的总线结构中的任意几种,包括存储器总线或存储器控制器、***总线或外部总线、和/或使用任意多种可用总线体系结构的局部总线,这些总线体系结构包括但不限于工业标准体系结构(ISA)、微通道体系结构(MCA)、增强型ISA(EISA)、智能驱动器电路(IDE)、VESA局部总线(VLB)、***组件互连(PCI)、插件总线、通用串行总线(USB)、加速图形接口(AGP)、个人计算机存储卡国际协会总线(PCMCIA)、火线(IEEE 1394)以及小型计算机***接口(SCSI)。
***存储器1216包括易失性存储器1220和非易失性存储器1222。基本输入/输出***(BIOS)1226存储在非易失性存储器1222中,它包含比如在启动过程中帮助在计算机1212内的元件之间传输信息的基本例程。作为例示而非限制,非易失性存储器1222可以包括只读存储器(ROM)、可编程只读存储器(PROM)、电可编程只读存储器(EPROM)、电可擦写可编程只读存储器(EEPROM)或闪存。易失性存储器1220包括担任外部高速缓冲存储的随机存取存储器(ROM)。作为例示而非限制,RAM以许多形式获得,例如静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、同步DRAM(SDRAM)、双倍数据速率SDRAM(DDR SDRAM)、增强型SDRAM(ESDRAM)、同步链路DRAM(SLDRAM)、Rambus直接随机存储器(RDRAM)、直接Rambus动态随机存储器(DRDRAM)以及Rambus动态随机存储器(RDRAM)。
计算机1212也包括可移动的/不可移动的、易失性/非易失性的计算机存储介质。例如,图12示出磁盘存储1224。磁盘存储1224包括但不限于,像磁盘驱动器、软盘驱动器、磁带驱动器、Jaz驱动器、Zip驱动器、LS-100驱动器、闪存卡或记忆棒那样的设备。另外,磁盘存储1224可以包括单独的或与其他存储介质组合的存储介质,包括但不限于光盘驱动器,如只读光盘设备(CD-ROM)、可记录CD驱动器(CD-R驱动器)、可重复刻录CD驱动器(CD-RW驱动器)或只读数字多功能盘驱动器(DVD-ROM)。为了便于将磁盘存储设备1224连接到***总线1218,通常使用可移动或不可移动的接口,如接口1226。
应该明白,图12描述担当在用户和在适当的操作环境1200中所描述的基本计算机资源之间的中介的软件。这类软件包括操作***1228。操作***1228可以被存储在磁盘存储器1224上,它控制和分配计算机***1212的资源。***应用程序1230利用操作***1228通过存储在***存储器1216中或在磁盘存储1224上的程序模块1232和程序数据1234的资源管理。应该明白,本发明可以与各种操作***或操作***的组合一起实现。
用户通过输入设备1236将命令或信息输入到计算机1212中。输入设备1236包括但不限于,如鼠标、跟踪球、指示笔、触摸板等定位设备、键盘、话筒、操纵杆、游戏垫、圆盘式卫星天线、扫描仪、电视调谐器、数码相机、数码摄像机、网络摄像头等等。这些和其他的输入设备经由接口端口1238通过***总线1218连接到处理单元1214。接口端口1238包括,例如,串行端口、并行端口、游戏端口和通用串行总线(USB)。输出设备1240使用一些与输入设备1236相同类型的端口。因此,例如,USB端口可以用来提供到计算机1212的输入,以及从计算机1212到输出设备1240的输出信息。提供输出适配器1242,以示出在其他输出设备1240中有某些输出设备1240,如监视器、扬声器和打印机需要特殊的适配器。输出适配器1242包括,作为例示而非限制,提供输出设备1240和***总线1218之间的连接手段的显卡和声卡。应该注意,其他设备和/或***设备信息也提供输入和输出性能,如远程计算机1244。
计算机1212可以使用到一个或多个远程计算机,如远程计算设备1244的逻辑连接在网络化环境中操作。远程计算机1244可以是个人计算机、服务器、路由器、网络PC、工作站、基于微处理器的装置、对等设备或者其他常见的网络节点等等,而且一般包括许多或者所有上文相对于计算机1212所描述的元件。尽管为简单起见,只与远程计算机1244一起示出存储器存储设备1246。远程计算机1244在逻辑上通过网络接口1248被连接到计算机1212,然后在物理上经由通信连接1250被连接。网络接口1248包括有线和/或无线通信网络,如局域网(LAN)和广域网(WAN)。LAN包括光纤分布式数据接口(FDDI)、铜缆分布式数据接口(FDDI)、以太网、令牌环等等。WAN技术包括但不限于,点对点链路、如综合业务数字网(ISDN)及其变种等电路交换网、分组交换网和数字用户线(DSL)。
通信连接1250是指用于将网络接口1248连接到总线1218的硬件/软件。尽管为了清楚例示而示出通信连接1250在计算机1212内部,但它也可以在计算机1212外部。仅出于示例目的,到网络接口1248的连接所必需的硬件/软件包括内部和外部技术,如包括常规电话等级调制解调器、电缆调制解调器和DSL调制解调器、ISDN适配器器的调制解调器和以太网卡。
上面已经描述的内容包括本发明的例子。当然,不可能为了描述本发明而描述组件或方法的每一个可以想到的组合,但本领域内的普通技术人员应该认识到,本发明的许多进一步的组合和排列都是可能的。因此,本发明包括所有这些落入所附权利要求书的精神和范围内的改变、修改和变动。
尤其关于由上面所描述的组件、设备、电路、***等等所执行的各种功能,除非另外指出,否则用于描述这些组件的术语(包括对“装置”的引用)旨在对应于执行所描述组件(例如,功能等效)的指定功能的任何组件,即使在结构上不等同于所公开的、执行在此所示的本发明示例性方面的功能的结构。在这方面,也应该认识到,本发明包括***和计算机可读介质,该计算机可读介质具有用于执行本发明各种方法的动作和/或事件的计算机可执行指令。
另外,尽管只参考若干实现中的一种公开本发明的具体特征,但在需要及有利于任何给定或特定应用时,这样的特征可以和其他实现的一种或多种特征结合。此外,在具体实施方式或权利要求书中使用术语“包含”的意义上,这样的术语是指以类似于术语“包括”的方式为包括性的。