用于存储平台中的锁定和隔离的系统和方法

文档序号:6462531阅读:122来源:国知局
专利名称:用于存储平台中的锁定和隔离的系统和方法
用于存储平台中的锁定和隔离的系统和方法本申请是申请日为2004年7月29日、国际申请号为PCT/US2004/024435、中国 国家申请号为200480001696.4、发明名称为"用于存储平台中的锁定和隔离的系统和 方法"的专利申请的分案申请。发明领域本发明涉及数据检索和操作领域,尤其涉及存储平台中的锁定和隔离。 发明背景近来计算领域中的一种发展是计算机操作系统可以用于构建在关系型引擎上的存 储平台。这种存储平台可以是,例如,来自华盛顿州雷蒙德市的微软公司的MICRSOFT WINDOWS FILE SYSTEM ( "WinFS" ) 。 WinFS构建在在来自上面提到的微软公 司的SQL SERVER 之上。WinFS平台的数据模型以项目、项目扩展和关系定义数据存储单元。项目是存储 信息的基本单元。该数据模型提供了一种用于声明项目和项目扩展,以及用于建立项 目之间的关系的机制。项目是可以使用诸如复制、删除、移动、打开等的操作来存储 和检索的单元。项目旨在表示数据的真实世界和易于理解的单元,诸如联系人、人、 服务、位置、文档(各种类型的)等。项目扩展是扩展现有项目的定义的一种方法, 而关系定义了项目之间的联系。在WinFS中,定义了不同的项目类型用于存储信息。例如,为联系人、人、服务、 位置、文档等定义了项目类型。每个项目类型由定义给定项目的属性和特性的模式 (schema)描述。例如,"Location (位置)"项目可以被定义为具有诸如EAddresses (电子地址)、MetropolitanRegion(大城市地区)、Neighborhood(街区)和Postal Addresses (邮政地址)等属性。 一旦为给定的项目类型定义了模式,在数据存储中创建对应的 用户定义类型(UDT)。存储在数据存储中的项目类型的每个实例具有与它相关联的 唯一标识符(例如,Item ID (项目ID));在一个实施例中,每个项目标识符是全局唯一标识符(GUID)。如同SQL SERVER中的UDT的任何实例一样,WinFS项 目的实例最终被以分离的UDT列存储在数据存储的表中。WinFS的构件块之一是它结合了来自SQL Server的文件流技术。文件流是关系型 数据表的一个列,其中该列的每个单元的数据被存储在与存储着该表的其它列的文件 相分离的文件中。WinFS的一个重要特性是WinFS项目的每个字段可以被指定为文件 流字段。文件流技术对于包括具有大量数据的字段的项目特别有利。例如,Person(人) 项目可以具有"照片"字段,它包括对应的人的数字照片。该照片字段可以包括不适 合存储在数据表中的大量数据。WinFS的另一个重要特性是它能够允许对文件流字段进行"带外"访问,因此它 们可以通过传统的文件系统调用(打开、读/写、关闭等)来访问,而不必使用数据库 存储的底层查询语言。用于提交传统文件系统调用的文件系统应用程序接口 (API) 可以是,例如,来自上面提到的微软公司的Win32 ,而数据库存储的底层査询语言 可以是,例如,事务处理结构化查询语言(T-SQL)。因为WinFS允许对文件流字段 进行带外访问,所以包含这种文件流字段的项目可以通过两种不同的通道操作T-SQL 和Win32。T-SQL和Win32的一个不同之处是T-SQL具有定义完善的事务和锁定模型,而 Win32没有。如本文中所使用的,术语"事务"指T-SQL中的事务处理模型是以语句 的概念建立的。 一个T-SQL语句表示对数据存储的一种操作,诸如"SELECT"或 "UPDATE"语句。T-SQL语句可以被作为单语句事务或多语句事务的一部分被包括。 在单语句事务中,单个被执行的T-SQL语句在数据存储上创建一个事务,该事务在语 句成功执行时被提交。事务的生命期由语句限定。在多语句事务中, 一个应用程序发 出"开始事务"和"提交事务"的T-SQL语句,以便明确地开始并对数据存储提交(或 中止)事务。开始(begin)和提交(commit)括号内的所有语句作为数据存储上的同 一个多语句事务的一部分来执行。T-SQL具有用于事务锁定的定义完善的语义。 一般地,"SELECT"语句将获得 行上的读锁,而"UPDATE"语句将获得行上的写锁。写锁被保持直到事务被提交或 中止为止,而读锁可以被较早地释放。如果事务具有行上的写锁,则其它事务被阻塞 获得对该行的读和/或写访问。如果事务试图获得对另一个事务已经获得了写锁的行的 读和/或写访问,则会发生冲突。可以使用标准的冲突分解方法来分解该冲突。与使用语句的概念相反,Win32使用传统的文件系统共享模式来定义操作(打开、读/写、关闭)之间的隔离。文件共享读标志使得能够进行读共享,这意味着对一个文 件的打开可以与对同一文件的另一个打开共享读。文件共享写标志使得能够进行写共 享,这意味着对一个文件的打开可以与对同一文件的另一个打开共享写。另外,文件 共享读标志和文件共享写标志两者可以被设置为既允许读共享也允许写共享。此外,两种文件共享标志都不能被设置为拒绝共享。重要的是,传统的Win32 API和其它传 统文件系统API不能够使操作能在事务的环境中执行。因此,本领域需要一种用于存储平台中的锁定和隔离的系统和方法,所述的系统 和方法统一了查询语言事务和锁定模型以及文件系统共享模型。事务模型的统一将在 诸如WinFS等存储平台中提供一种用于操作包含文件流字段的项目的总体事务模型。 还希望该总体框架使得文件系统操作能够在事务环境中执行。发明概述本发明针对用于存储平台中的锁定和隔离的系统和方法。根据本发明,用于文件 系统操作的共享模型与用于查询语言语句的事务和锁定模型统一为一体,以便提供一 种用于存储平台中的文件流的锁定和隔离的总体框架。此外,为文件系统操作提供了 对事务的支持,从而它们可以在事务环境中执行。因此,单个事务可以包括单个文件 系统语句、单个查询语言语句、多个文件系统语句、多个查询语言语句以及文件系统 和查询语言语句的组合。此外,提供了对非事务文件系统操作的支持,从而文件系统 操作不必在事务环境中执行。根据本发明的一个方面,文件系统语句可以包括对打开项目的调用,读或写操作 以及对关闭项目的调用。文件系统语句可以获得包括对应于该项目的用户定义类型 (UDT)的数据表的行上的隔离。事务处理的写语句获得该事务的生命期中行上的独 占锁。事务处理读语句获得行的读已提交视图。文件系统共享模式可以用于定义事务 之间以及一个事务内的语句之间的隔离。此外,非事务处理的语句也可以基于共享模 式获得隔离。根据本发明的另一个方面,在存储平台处可以接收多个査询语言语句和/或文件系 统语句。所述语句可以与事务相关联。可以确定该事务的开始是否将产生冲突。如果 是的,则该冲突可以根据诸如阻塞等标准冲突分解技术来分解。如果没有冲突,则通 过获得用于事务内的查询语言语句和/或文件系统语句的适当的读和/或写锁,开始该事 务。通过下面参考附图对说明性实施例的详细描述,本发明的其它特性和优点将变得 显而易见。附图的简要说明在参考附图阅读下面的详细描述之后,将会更好地理解说明性实施例,附图中

图1是根据本发明包括用于项目实例的数据的示例性数据库表; 图2是根据本发明的示例性存储平台环境的框图;图3是根据本发明用于在事务环境中执行文件系统语句的示例性方法的流程图; 图4是根据本发明用于非事务处理读文件系统语句的锁定和隔离的示例性方法的 流程图;图5是根据本发明用于非事务处理写文件系统语句的锁定和隔离的示例性方法的 流程图;图6是表示具有可在其中实现本发明的各种计算设备的示例性网络环境的框图;以及图7是表示可在其中实现本发明的示例性计算设备的框图。 说明性实施例的详细描述为了满足法定要求以细节描述了本发明的主题。然而,该描述本身并不旨在限制 本专利的范围。相反,发明人构想,结合其它当前的或未来的技术,所提出的主题也 可以用其它的方式实施,以便包括不同的步骤或与本文档中所描述的相类似的元素。如上所述,本发明针对用于诸如上面提到的WinFS等存储平台中的锁定和隔离的 系统和方法。本发明使得诸如上面提到的Win32等文件系统操作能够在事务环境中执 行。此外,本发明统一了用于文件系统操作的模型和用于诸如上面提到的T-SQL等查 询语言的事务和锁定模型,从而在存储平台中提供了一种用于操作包含文件流字段的 项目的总体模型。现在参考图1,存储平台项目的实例可被存储在诸如示例表200的关系型数据库 表内。表200包括两个列ID列202a和用户定义类型(UDT)列202b。列202a中的 每个ID提供了用于对应的UDT的唯一标识符。列202b中的每个UDT对应于项目类 型的一个实例。例如,列202b中的每个UDT可以对应于与Person项目类型相关联的 特定的人。UDT1-3的字段204a-c分别被指定为文件流字段,意味着该字段的数据被存储在与表200相分离的文件中。文件流字段204a-c对于存储诸如数字照片等包括大 量数据的字段是有利的。例如,Person项目可以具有对应的"照片"字段,它是包括 人的数字照片的文件流字段。如下详细所述,本发明能够锁定和隔离行,诸如表200 的行1-3的每个行。图2示出了一种示例性存储平台环境。如上所述,客户机应用程序300可以直接 通过存储平台308,或经由通过文件系统API302的"带外"访问来操作数据存储310 中的项目。如果客户机应用程序300直接通过存储平台308操作项目,则这种操作可 以使用诸如T-SQL等查询语言来执行。在另一方面,如果客户机应用程序300经由通 过文件系统API302的"带外"访问来操作项目,则这种操作可以使用诸如Win32等 文件系统API来执行。"带外"访问仅对包括文件流字段的项目可用。客户机应用程序300可以通过使用存储平台方法直接访问存储平台308来启动数 据存储310上的查询。继续Person项目类型的例子,客户机应用程序300可以使用存 储平台308的"FindAll"方法来启动对Person类型中"Birthday"字段的值大于特定 日期(例如,1999年12月31日)的所有实例的查询。然后存储平台308将"FindAll" 操作翻译为T-SQL中的查询或另一种查询语言,并且将它提交给底层数据存储310。 然后数据存储310对Person UDT的对应的实例执行该査询,并且返回Person UDT的 每个匹配实例的被存储的值。然后存储平台308包装Person UDT对象并且将它们作为 Person类型的项目返回给应用程序。除了上面提出的能够对项目进行直接访问之外,存储平台308允许通过文件系统 API 302对项目内的文件流字段进行"带外"访问。在图2的示例性环境中,客户机 应用程序300通过例如调用存储平台308的CreateFile (创建文件)接口并且将路径名 传递给存储平台308来发起带外访问,所述路径名基于持久存储的项目(UDT)的实 例内的对应字段的标识来标识所请求的数据。当文件系统API 302从客户机应用程序 300接收到包括存储平台路径名的CreateFile命令时,文件系统API 302就这样识别它, 并且将它转发到FS代理306。然后FS代理306向存储平台308发出"OPEN (打开)" 调用,传递项目字段的存储平台路径名。然后存储平台308从存储平台路径名中标识 项目和字段,并且然后将这种信息传递给数据库引擎310。存储平台308可以传递一 数据库引擎函数,该函数返回以上面所述的方式与数据库存储相分离地存储的UDT 对象的文件流字段的文件系统路径名。数据库引擎310通过在表200中执行表查找来响应所述请求,表200中储存了作为请求主题的UDT对象。数据库引擎310定位到表200的正确的行,并且然后定位到 该行内的UDT对象的序列化的片段。对于所述的文件流字段,数据库引擎310从它的 对应片段中提取出其中存储了该字段的数据的文件的真实文件系统路径。数据库引擎 310将该真实路径发送回存储平台308。然后存储平台308将文件系统路径传递回FS 代理106, FS代理106进而调用文件系统API 302以便打开文件、传递请求中的真实 文件系统路径。然后如同向文件系统API302做出CreateFile调用时通常所做的,文件 系统API 302获得该文件的句柄,并且将它传递回客户机应用程序300。此时,客户机应用程序300可以通过正常的文件系统API调用(例如Win32 API 文件I/0调用)来读和写文件。当客户机应用程序300结束对该文件的操作时,它向 文件系统API发出CLOSE (关闭)调用。这个调用再次被FS代理306拦截。FS代理 306向存储平台308发出"CLOSE"调用以便请求关闭该文件。存储平台308将这种 操作建模为对持久存储的项目的更新,执行任何相关联的改变跟踪和其它与更新相关 联的功能。然后数据库引擎310在持久存储的UDT对象上执行它自己的更新处理。一 旦处理结束,控制被返回给FS代理306, FS代理306调用文件系统API 302以便代 表客户机应用程序300执行其正常的文件关闭操作。因此,在上面所述的环境中,存储平台308能够使用诸如T-SQL等查询语言直接 访问文件流字段,或是使用诸如Win32等文件系统API进行"带外"访问。如上所述, 在査询语言事务和锁定模型以及文件系统共享模型之间有多种不同之处。 一个这种不 同之处是文件系统不具有如同查询语言中所具有的语句的概念。相反,文件系统生成 诸如打开、读、写和关闭等操作。本发明使得打开可以在事务环境中执行。被打开的 文件可以在打开过程中与所提供的事务环境相关联。随后的读和/或写发生在事务环境 中。如同査询语言中的事务一样,在任意给定时刻对一个文件只能有一个事务处理的 写程序。此外,事务处理读程序得到该文件的读已提交视图,意味着它们观看到了在 打开时刻处于其巳提交状态的文件。非事务处理读程序和写程序可以基于指定的共享模式获得隔离。当文件被打开时, 打开的目的可以被指定。文件可以为下面3个目的中的一个打开为读目的打开、为 写目的打开或为读和写目的打开。此外,可以使用共享模式指定所希望的隔离模型 文件共享读、文件共享写、既文件共享读又文件共享写或是既不文件共享读又不文件 共享写。对于文件系统操作,如果基于共享冲突拒绝对文件的访问,则打开失败而不 是被阻塞。可以在稍后的时刻重试打开,希望共享冲突不再发生。共享模式可以提供两个级别的隔离,g卩,事务之间和事务内的打开之间。所有非 事务处理的打开可以如同它们全部位于总是活动的单个全局事务内那样运行,并且为 每个非事务处理写自动提交。非事务处理读不能得到对应文件的读已提交视图,并且 仅被提供用共享模式请求的隔离。在存储平台308中,隔离的单元可以是项目、与项目相关联的扩展或与项目相关 联的关系。在这3种情况的每种情况下,底层表示都是适当的表内的UDT的实例,并 且隔离的单元对应于表的行。这映射到查询语言锁定模型,其中以每行为基础获得适 当的锁。因此,存储平台308内的锁定的粒度直接映射到查询语言内的行粒度。如上所述,除了为文件系统操作提供事务支持之外,本发明针对统一用于文件系 统操作和查询语言语句的模型。与文件系统语句(它们仅为对文件流项目的带外访问 而处理)不同,査询语言语句可以在文件流和非文件流项目两者上执行。为了统一查 询语言的事务模型和文件系统的共享模型,必须定义文件系统语句的概念。这种文件 系统语句可以包括打开操作、读或写操作以及关闭操作。因此,包括打开、读以及关 闭操作的文件系统语句在语义上等效于查询语言中的SELECT文件流语句,而包括打 开、写以及关闭操作的文件系统语句在语义上等效于查询语言中的UPDATE文件流 语句。如同查询语言语句那样,文件系统语句可以出现在多语句事务或单语句事务环境 中,其中在语句的处理过程中存在事务。因此,根据本发明的事务可以包括单个查询 语言语句、单个文件系统语句、多个查询语言语句、多个文件系统语句或是查询语言 和文件系统语句的组合。在单个査询语言语句的情况下,项目中的字段被更新并且更新图(updategram) 被发送到服务器。项目中的所有值可以是内嵌的,包括文件流的值。作为更新图执行 的一部分,事务可以在服务器上即刻创建和提交。在单个文件系统语句的情况下,事务作为打开的一部分而创建。然后读或写发生 在事务环境内。然后事务作为关闭的一部分被提交。存储平台308可以跨过<打开、写、 关闭>边界创建和管理事务的生命期。在多个查询语言语句的情况下,事务在服务器上开始,项目字段被更新,并且一 个或多个更新图被发送到服务器。然后事务在服务器上提交。在多个文件系统语句的情况下,事务在服务器上开始,并且文件系统语句在事务 环境中执行。然后事务在服务器上提交。在査询语言和文件系统语句组合的情况下,事务在服务器上开始,并且然后可以 发出修改项目中的非文件流字段的更新图。可以为文件系统操作指定事务环境,以便获得对应行上的适当的锁。如果为读而 打开,则事务将获得包含文件流的行上的读锁。如果为写而打开,则事务将获得包含 文件流的行上的写锁。FS代理306可以代表事务获得行锁,并且锁可以基于事务的隔离级别来释放,并且绑定到事务的生命期。为了模拟査询语言隔离模型,可以为写程序获得独占打开,而可以为读程序获得 共享打开。独占和共享打开分别对应于査询语言模型中的独占行级别锁和共享行级别锁。因此,某种共享模式标志可能与这个模型相抵触,并且可能不会被兑现。例如,文件共享写标志与这种模型相抵触,因为它允许两个打开共享对同一文件 的写。因此,文件共享写标志可以被禁止并且不被兑现。例如,文件共享写可以被安 静地重新映射或以适当的错误代码拒绝。因此,如果事务包括多个文件系统写语句, 则写操作可以被序列化。事务内的序列化与査询语言语义相一致,其中在同一事务环 境中不允许多个并发的更新。此外,如果两个非事务处理的文件系统语句试图同时执 行,则它们也可以被序列化。非事务处理语句的序列化与査询语言语句语义相一致,其中两个UPDATE语句不能并发地执行。此外,在事务环境中为写而打开必须指定文 件共享读。如果没指定有,则该打开可能以无效操作错误代码失败。这实施了查询语 言语义,即UPDATE不阻碍同一事务环境中的SELECT。图3中示出了根据本发明在事务环境中执行文件系统语句的示例性方法的流程 图。在动作410,存储平台308从客户机应用程序300接收语句以便在存储在数据存 储310内的项目上执行。这种语句可以是从客户机应用程序300接收的査询语言语句, 或通过文件系统API 802和FS代理804从客户机应用程序300接收的带外文件系统语 句。查询语言语句可以在文件流和非文件流项目上执行,而文件系统语句仅可以在文 件流项目上执行。如上所述,查询语言语句可以包括,例如SELECT语句或UPDATE语句。査询 语言语句可以是单或多语句事务的一部分。如果査询语言语句是多语句事务的一部分, 则它以开始事务和提交事务命令加扩号。文件系统语句可以包括打开操作、读操作或写操作以及关闭操作。每个文件系统 语句可以在事务环境中被提交。在动作412,在动作410接收的每个语句与事务相关 联。应当理解,文件系统语句不必在事务环境中提交。下面参考图4和5详细讨论了用于非事务处理文件系统语句的锁定和隔离。在动作414,确定事务的启动是否将导致冲突。例如,如果事务内的任何语句对 应于这样的行,在该行上另一事务已经获得了写锁,则将发生冲突。如果在动作414确定将发生冲突,则在动作416分解该冲突。可以根据标准冲突 分解惯例来分解冲突。 一般地,即使只有一个冲突被检测到,整个事务可以被回退。在动作418,启动事务。通过获得适当行上的读锁和写锁启动事务。如前面提到 的,获得对应于读操作并且对应于SELECT语句的行上的读锁。对应于读操作的读锁 获得该行的读已提交视图。读锁是共享的行锁。在对应于写操作并且对应于UPDATE语句的行上获得写锁。写锁是在事务生命期 中获得的独占锁。写锁将防止当事务被处理时另一个事务访问(通过读访问或写访问) 对应的行。写锁还防止当事务被处理时,非事务处理文件系统语句访问(通过读访问 或写访问)对应的行。然而写锁不防止事务内的其它语句读对应的行。图4中示出了根据本发明用于非事务处理文件系统读语句的锁定和隔离的示例性 方法的流程图。在动作420,存储平台308从客户机应用程序300接收将在存储在数 据存储310内的项目上执行的非事务处理文件系统读语句。如上所述,文件系统读语 句包括打开操作、读操作和关闭操作。在动作422,确定读访问是否可用于对应于该项目的数据表的一个行。该行可以 包括对应于该项目的用户定义类型。如果在动作422确定读访问可用,则在动作424获得该行上的读锁。读锁可以提 供该行的读己提交视图。如果在动作422确定读访问不可用,则在动作426打开失败。图5示出了根据本发明用于非事务处理文件系统语句的锁定和隔离的示例性方法 的流程图。在动作520,存储平台308从客户机应用程序300接收将在存储在数据存 储310内的项目上执行的非事务处理文件系统写语句。如上所述,文件系统写语句包 括打开操作、写操作和关闭操作。在动作522,确定写访问是否可用于对应于该项目的数据表的一个行。该行可以 包括对应于该项目的用户定义类型。如果,例如一个事务或另一个非事务处理语句己 经具有了该行上的写锁,则写访问可以被拒绝。如果在动作522确定写访问可用,则在动作524获得该行上的写锁。写锁可以防 止一个事务或另一个非事务处理语句在该语句被处理时获得该行上的写锁。如果在动作522确定读访问不可用,则在动作526打开失败。如从上述可以清楚了解的,本发明的各种系统、方法和方面的全部或部分可以用 硬件、软件或两者的结合来实施。当用软件实施时,本发明的方法和装置或其某些方 面或部分可以用程序代码(即,指令)的形式来实施。这种程序代码可以被存储在诸 如磁的、电子的或光学存储介质的计算机可读介质上,包括但不限于软盘、CD-ROM、 CD-RW、 DVD-RW、 DVD-ROM、 DVD-RAM、磁带、闪存、硬盘驱动器或任何机器 可读存储介质,其中当程序代码被装入并由机器(诸如计算器或服务器)执行时,该 机器成为实现本发明的装置。程序代码在其上执行的计算机通常包括处理器、处理器 可读的存储介质(包括易失/非易失存储器和/或存储元件)、至少一个输入设备以及至 少一个输出设备。程序代码可以用高级过程语言或面向对象编程语言来实现。可替换 地,程序代码可以用汇编语言或机器语言实现。在任何情况下,所述的语言可以是编 译或解释语言。本发明还可以用程序代码的形式来实施,该程序代码通过某种传输介质传输,诸 如通过电线或电缆、通过光纤、通过包括局域网、广域网、因特网或内联网的网络、 或通过任何其它的传输形式,其中当程序代码被接收并被装入且由机器(诸如计算机) 执行时,该机器成为实现本发明的装置。当在通用处理器上实现时,程序代码可以与处理器相结合,以便提供与专用逻辑 电路相类似地运行的唯一装置。此外,本发明可以结合任何计算机或其它客户机或服务器设备来实现,这些计算 机或其它客户机或服务器设备可以作为计算机网络的一部分部署,或部署在分布式计 算环境中。就此而言,本发明适合于具有任何数目的存储器或存储单元,以及发生在 任何数目的存储单元或巻上的任何数目的应用程序和进程的任何计算机系统或环境, 所述的存储单元或巻可以被用于与根据本发明在数据库存储中持久存储对象有关的处 理。本发明可以适用于具有被部署在网络环境或分布式计算环境中的服务器计算机或 客户机计算机的环境,所述的环境具有远程或本地存储。本发明还适用于独立的计算 设备,所述的独立的计算设备具有用于生成、接收和发送关于远程或本地服务的信息 的编程语言功能、解释和执行功能。分布式计算设备通过在计算设备和系统之间进行交换便于计算机资源和服务的 共享。这些资源和服务包括,但不限于,信息交换、高速缓存存储和用于文件的盘存 储。分布式计算利用了网络互连,允许客户机发挥它们的集体能力,以便使整个企业受益。就此而言,各种设备可以具有可以牵涉到结合本发明的对象持久存储方法所执 行的处理的应用程序、对象或资源。图6提供了示例性的联网或分布式计算环境的示意图。该分布式计算环境包括计 算对象10a、 10b等,以及计算对象或设备110a、 110b、 110c等。这些对象可以包括 程序、方法、数据存储、可编程逻辑等。这些对象可以包括一部分相同的或不同的设 备,诸如PDA、电视机、MP3播放器、个人计算机等。每个对象可以通过通信网络 14与另一个对象通信。网络本身包括为图6的系统提供服务的其它计算对象和计算设 备,并且本身可以代表多个互连的网络。根据本发明的一个方面,每个对象10a、 10b 等或110a、 110b、 110c等可以包含可利用API或其它对象、软件、固件和/或硬件来 请求使用用于实现本发明的对象持久存储方法的过程的应用程序。还应当理解,诸如110c等对象可以被主宿在另一个计算设备10a、 10b等或110a、 110b、 110c等之上。因此,虽然给出的物理环境可以将连接的设备示为计算机,但是 这种说明仅是示例性的,并且可替换地,该物理环境可以被描绘或描述为包含诸如 PDA、电视机、MP3播放器等的各种数字设备,以及诸如接口、 COM对象等的软件 对象。存在各种支持分布式计算环境的系统、组件和网络配置。例如,计算系统可以被 通过有线或无线系统、通过局域网或广泛地分布的网络连接在一起。当前,许多网络 被耦合到因特网,因特网提供了广泛分布的计算的基础结构并且包含许多不同的网络。 任何基础设施可以用于附属于本发明的示例性通信。因特网一般指使用计算机联网领域内公知的TCP/IP协议套件的网络和网关的集 合。TCP/IP是"传输控制协议/互联网协议"的首字母縮写。因特网可以被描述为由执 行联网协议的计算机互连的在地理上分布的远程计算机网络,该联网协议允许用户通 过网络进行交互或共享信息。因为这种广泛的信息共享,因此诸如因特网等远程网络 迄今已发展为一种开放系统,开发者可以为它设计软件应用程序以便执行专门的操作 或服务,基本上没有限制。因此,网络基础结构启用了大量的网络拓扑,如客户机/服务器、对等或混合体系 结构。"客户机"是它所不相关的另一类或组的服务的类或组的成员。因此在计算中,客户机是一个进程,即粗略地说是一组指令或任务,它请求由另一程序提供的服务。 客户机进程使用所请求的服务而不用"了解"关于其它程序或该服务本身的任何工作 细节。在客户机/服务器体系结构中,特别是联网的系统中,客户机通常是访问由另一计算机(例如,服务器)提供的共享网络资源的计算机。在图6的例子中,计算机110a、 110b等可以被认为是客户机,而计算机10a、 10b等可以被认为是服务器,尽管取决 于环境,任何计算机可以被认为是客户机、服务器或是这两者。任何这些计算设备可 以用牵涉本发明的对象持久存储技术的方式来处理数据。服务器通常是可以通过远程或本地网络(诸如因特网)访问的远程计算机系统。 客户机进程可以在第一计算机系统中是活动的,并且服务器进程可以在第二计算机系 统中是活动的,它们通过通信介质彼此通信,因此提供了分布式的功能并且允许多个 客户机利用服务器的信息聚集能力。按照本发明的持久存储机制使用的任何软件对象 可以分布在多个计算设备上。(多个)客户机和(多个)服务器可以使用由协议层提供的功能彼此通信。例如, 超文本传输协议(HTTP)是与万维网(WWW)或"Web"结合使用的常见的协议。 典型地,诸如互联网协议(IP)地址等计算机网络地址或诸如统一资源定位器(URL) 等其它引用可以用于彼此标识服务器或客户机。网络地址可以被称为URL地址。可以 通过任何可用的通信介质提供通信。因此,图6示出了一种其中可使用本发明的示例性联网或分布式环境,其中服务 器通过网络/总线与客户机计算机通信。根据本发明,网络/总线14可以是LAN、WAN、 内联网、因特网或某些其它的网络介质,它具有依照本发明的多个客户机或远程计算 机设备110a、 110b、 U0c、 U0d、 110e等,诸如便携计算机、手持计算机、瘦客户机、 联网设备或其它设备,诸如VCR、 TV、烤箱、电灯、加热器等。因此可以构想本发 明可以适用于任何这样的计算设备,对所述的计算设备而言希望保持持久存储的对象。例如,在通信网络/总线14是因特网的网络环境中,服务器10a、 10b等可以是客 户机110a、 110b、 110c、 110d、 110e等通过多种已知协议中的任意一种(诸如HTTP) 与其通信的服务器。如可以是分布式计算环境的特征,服务器10a、 10b等还可以用作 客户机110a、 110b、 110c、 110d、 110e等。通信可以是(在适合的地方)有线的或无线的。客户机设备110a、 110b、 110c、 110d、 110e等可以通过或可以不通过通信网络/总线14通信,并且可以具有与它相关 联的独立的通信。例如,在TV或VCR的情况下,可以有或没有关于其控制的联网的 方面。每个客户计算机110a、 110b、 110c、 110d、 110e等和服务器10a、 10b等可以 配备有各种应用程序模块或对象135,并且具有到各种类型的存储元件或对象的连接 或访问,文件或数据流可以跨所述的存储元件或对象被存储,或是部分的文件或数据流可以被下载到、传输到或移往所述的存储元件或对象。任何计算机10a、 10b、 110a、 110b等可以负责用于存储根据本发明处理的数据的数据库、存储器或其它存储元件20 的维护和更新。因此,本发明可以用于这样的计算机网络环境中,它具有可以访问计 算机网络/总线14并与其交互的客户计算机110a、 110b等,以及可以与客户计算机 110a、 110b等交互的服务器10a、 10b等,以及其它类似的设备和数据库20。图6和下面的讨论旨在提供对可结合其实现本发明的适合的计算设备的简要的概 括描述。例如,图6中示出的任何客户机和服务器计算机或设备都可以采用这种形式。 然而应当理解,手持的、便携的和其它的计算设备和各种类型的计算对象也被构想用 于本发明,即,计算环境中可以生成、处理、接收和/或发送数据的任何地方。虽然下 面描述了通用计算机,但这只是例子,并且本发明可以用具有网络/总线协同工作能力 和交互作用的瘦客户机来实现。因此,本发明可以在联网主宿的服务的环境中实现, 其中只涉及非常少的或最少的客户机资源,例如, 一种联网的环境,其中客户设备仅 起到网络/总线的接口的作用,诸如被放置在设备中的一个对象。本质上,可以存储数 据的任何地方或可以从中检索数据或将其发送到另一计算机的任何地方都是用于运行 本发明的对象持久存储方法的理想的或适合的环境。虽然没有要求,本发明可以通过操作系统实现,以便由设备或对象的服务开发者 使用,和/或被包括在根据本发明运行的应用程序或服务器软件中。软件可以在计算机 可执行指令的一般上下文中描述,所述的计算机可执行指令诸如由一个或多个计算机 (诸如客户工作站、服务器或其它设备)执行的程序模块。 一般地,程序模块包括例 程、程序、对象、组件、数据结构等,它们执行特定的任务或实现特定的抽象数据类 型。典型地,程序模块的功能可以按照所希望的被结合进或分布到各种实施例中。此 外,本发明可以用其它计算机系统配置和协议来实现。适用于本发明的其它的公知的 计算系统、环境和/或配置包括,但是不限于,个人计算机(PC)、自动柜员机、服务 器计算机、手持或膝上设备、多处理器系统、基于微处理器的系统、可编程消费者电 子设备、网络PC、电器、电灯、环境控制元件、小型计算机、大型机等。因此,图7给出了其中可实现本发明的适合的计算系统环境100的一个例子,虽 然如上所述可以清楚了解的,计算系统IOO仅是适合的计算环境的一个例子,并且不 旨在暗示着对本发明的使用范围或功能的任何限制。计算环境IOO也不应被解释为具 有与示例的操作环境100中示出的组件中的任意一个或其组合相关的任何依赖性或要 求。参考图7,用于实现本发明的示例性系统包括计算机110形式的通用计算设备。 计算机110的组件可以包括但不限于处理单元120、系统存储器130和系统总线121, 系统总线121将包括系统存储器在内的各种系统组件耦合到处理单元120。系统总线 121可以是多种总线结构中的任意一种,包括存储器总线或存储器控制器、外围总线 和使用多种总线体系结构中的任何一种的局部总线。作为例子而不是限制,这种体系 结构包括工业标准体系结构(ISA)总线、微通道体系结构(MCA)总线、增强ISA (EISA)总线、视频电子技术标准协会(VESA)局部总线和外围组件互连(PCI)总 线(也被称为Mezzanine总线)。计算机IIO典型地包括各种计算机可读介质。计算机可读介质可以是可由计算机 110访问的任何可用介质,并且包括易失和非易失介质,可移动和非可移动介质。作 为例子而不是限制,计算机可读介质可以包括计算机存储介质和通信介质。计算机存 储介质包括以用于存储诸如计算机可读指令、数据结构、程序模块或其它数据的信息 的任何方法或技术实现的易失和非易失介质,可移动和非可移动介质。计算机存储介 质包括,但是不限于,RAM、 ROM、 EEPROM、闪存或其它存储器技术、CDROM、 数字多功能盘(DVD)或其它光盘存储、盒式磁带、磁带、磁盘存储或其它磁存储设 备,或可以被用于存储所希望的信息并且可以由计算机110访问的任何其它介质。通 信介质典型地包括已调制数据信号(诸如载波或其它传输机制)形式的计算机可读指 令、数据结构、程序模块或其它数据,并且包括任意的信息传递介质。术语"已调制 数据信号"的含义是它的一个或多个特征以在信号中对信息进行编码的方式被设置或 改变的信号。作为例子,并且不是限制,通信介质包括诸如有线网络或直接连线连接 的有线介质,和诸如声学、RF、红外线或其它无线介质的无线介质。上面所述的任何 的组合也应被包括在计算机可读介质的范围内。系统存储器130包括诸如只读存储器(ROM) 131和随机访问存储器(RAM) 132 的易失和非易失存储器形式的计算机存储介质。包含(诸如在启动过程中)帮助在计 算机110内的元件之间传递信息的基本例程的基本输入/输出系统133 (BIOS)典型地 被存储在ROM 131中。RAM 132典型地包含可以立即由处理单元120访问的和/或当 前正由处理单元120处理的数据和/或程序模块。作为例子但不是限制,图7示出了操 作系统134、应用程序135、其它程序模块136和程序数据137。计算机110还可以包括其它的可移动/不可移动,易失/非易失的计算机存储介质。 仅作为例子,图8示出了从不可移动、非易失磁介质读或向其写的硬盘驱动器141,从可移动、非易失磁盘152读或向其写的磁盘驱动器151,以及从可移动、非易失光 盘156诸如CD-RW、 DVD-RW或其它光学介质读或向其写的光盘驱动器155。可以 被用于该示例性操作环境中的其它可移动/不可移动、易失/非易失计算机存储介质包 括,但是不限于,磁带、盒式磁带、闪存卡、数字多功能盘、数字视频带、固态RAM、 固态ROM等。硬盘驱动器141通常通过不可移动存储器接口,诸如接口140连接到 系统总线121,而磁盘驱动器151和光盘驱动器155通常通过可移动存储器接口,诸 如接口 150连接到系统总线121。上面讨论并且在图7中示出的驱动器和它们相关联的计算机存储介质为计算机 110提供了计算机可读指令、数据结构、程序模块和其它数据的存储。在图7中,例 如,硬盘驱动器141被示出为存储操作系统144、应用程序145、其它程序模块146 和程序数据147。注意这些组件可以与操作系统134、应用程序135、其它程序模块136 和程序数据137相同或不同。此处给予操作系统144、应用程序145、其它程序模块 146和程序数据147不同的标号以便示出,至少它们是不同的副本。用户可以通过输 入设备,诸如键盘162和定位设备161 (诸如鼠标、轨迹球或触摸垫)向计算机110 输入命令和信息。其它输入设备(没有示出)可以包括麦克风、游戏杆、游戏垫、圆 盘式卫星天线、扫描仪等。这些和其它输入设备通常被通过耦合到系统总线121的用 户输入接口 160连接到处理单元120,但是也可以通过其它接口和总线结构连接,诸 如并行端口、游戏端口或通用串行总线(USB)。 一个或多个图形处理单元(GPU) 184可以与图形接口 182通信。监视器191或其它类型的显示设备也可以通过诸如视 频接口 190的接口连接到系统总线121,所述接口进而与视频存储器186通信。除了 监视器191之外,计算机还可以包括其它的外围^^出设备,诸如扬声器197、打印机 196,它们可以通过输出外部接口 195连接。使用到一个或多个远程计算机,诸如远程计算机180的逻辑连接,计算机110可 以在联网的或分布式环境中运行。远程计算机180可以是个人计算机、服务器、路由 器、网络PC、对等设备或其它的普通网络节点,并且通常包括上面关于计算机110 所描述的许多或全部元件,虽然在图7中仅示出了存储器存储设备181。图7中给出 的逻辑连接包括局域网(LAN) 171和广域网(WAN) 173,但是还可以包括其它网 络/总线。这种联网环境在家庭、办公室、企业范围计算机网络、内联网和因特网中是 常见的。当用于LAN联网环境中时,计算机110通过网络接口或适配器170连接到LAN171。当用于WAN联网环境中时,计算机110通常包括调制解调器172或用于通过 WAN173 (诸如因特网)建立连接的其它装置。调制解调器172 (可以是内置的或外 置的)可以通过用户输入接口 160或其它适合的机制连接到系统总线121。在联网的 环境中,就计算机110给出的程序模块或其部分可以存储在远程存储器存储设备内。 作为例子,但是不是限制,图7示出了驻留在存储器设备181上的远程应用程序185。 应当理解,示出的网络通信是示例性的,并且可以使用在计算机之间建立通信链路的 其它装置。结论因此,己经公开了用于存储平台中的锁定和隔离的系统和方法。用于文件系统操 作的共享模型与用于查询语言语句的事务和锁定模型统一在一起,以便提供用于存储平台中的锁定和隔离的总体框架。此外,为文件系统操作提供了事务支持,从而它们 可以在事务环境中执行。因此,单个事务处理可以包括单个文件系统语句、单个査询 语言语句、多个系统语句、多个查询语言语句以及文件系统和查询语言语句的组合。 此外,提供了对非事务处理文件系统语句的支持,从而文件系统语句不必在事务环境 中执行。虽然已经以各附图的优选实施例描述了本发明,应当理解,可以使用其它类似的 实施例,或对所述的实施例进行修改和添加,以便执行本发明相同的功能,而不脱离 本发明。因此,本发明不应被限于任意的单个实施例,而是应当被解释为在所附权利 要求的宽度和范围内。
权利要求
1.一种用于文件系统语句的锁定和隔离的方法,所述方法包括接收文件系统语句,所述文件系统语句包括对打开项目的调用、对从项目读的调用、以及对关闭项目的调用,所述文件系统语句与采用数据库的查询语言的任何数据库命令无关;响应于接收所述与任何数据库应用程序接口请求无关的文件系统语句,确定读锁对于对应于所述项目的数据表的行是否可用;如果读锁对于对应于所述项目的数据表的行不可用,则使所述打开失败;以及如果读锁对于对应于所述项目的数据表的行可用,则获得所述行上的读锁。
2. 如权利要求1所述的方法,其特征在于,包括确定所述读锁对于包括相应于所 述项目的用户定义类型的数据表的行是否可用。
3. 如权利要求1所述的方法,其特征在于,获得所述行上的读锁包括获得所述行 的读已提交视图。
4. 如权利要求1所述的方法,其特征在于,包括获得所述行的文件流字段上的读锁。
5. —种用于文件系统语句的锁定和隔离的方法,所述方法包括-接收文件系统语句,所述文件系统语句包括对打开项目的调用、对写到项目的调用、以及对关闭项目的调用,所述文件系统语句与采用数据库的查询语言的任何数据 库命令无关;响应于接收所述与任何数据库应用程序接口请求无关的文件系统语句,确定写锁 对于对应于所述项目的数据表的行是否可用;如果写锁对于对应于所述项目的数据表的行不可用,则使所述打开失败;以及 如果写锁对于对应于所述项目的数据表的行可用,则获得所述行上的写锁。
6. 如权利要求5所述的方法,其特征在于,包括确定所述写锁对于包括对应于所 述项目的用户定义类型的数据表的行是否可用。
7. 如权利要求5所述的方法,其特征在于,获得所述行上的写锁包括获得在所述 语句被处理时防止另一语句访问所述行的写锁。
8. 如权利要求5所述的方法,其特征在于,包括通过获得所述行的文件流字段上 的写锁启动所述事务。
全文摘要
用于文件系统操作的共享模型与查询语言语句的事务和锁定模型统一在一起,以便提供用于存储平台中的锁定和隔离的总体框架。此外,为文件系统操作提供了事务支持,从而它们可以在事务环境中执行。因此,单个事务处理可以包括单个文件系统语句、单个查询语言语句、多个系统语句、多个查询语言语句以及文件系统和查询语言语句的组合。此外,提供了对非事务处理文件系统语句的支持,从而文件系统语句不必在事务环境中执行。
文档编号G06F17/30GK101266617SQ20081009587
公开日2008年9月17日 申请日期2004年7月29日 优先权日2004年3月10日
发明者B·S·拉曼, R·B·拉杰弗 申请人:微软公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1