管理请求数据库系统中不存在的索引键的事务的制作方法

文档序号:17943377发布日期:2019-06-18 23:20阅读:176来源:国知局
本申请要求2016年12月14日提交系列号为62/433,944的美国临时专利申请、2017年1月13日提交的系列号为15/405,841的美国专利申请和2017年1月13日提交的系列号为15/405,846的美国专利申请,题为“用于在数据库中分配锁的系统和方法(systemsandmethodsforassigninglocksindatabases)”的权益和优先权,其中每一个专利都通过引用整体结合于此。本公开涉及数据库系统领域,并且具体涉及包括索引的事务型数据库系统。
背景技术
::数据库管理系统可以在数据库中存储、处理和保护数据。数据库读取和写入事务被定向到数据库管理系统,数据库管理系统处理事务并在数据库上执行任务以执行接收到的事务。在一些实施方式中,为了维护并发性,数据库管理系统可以向接收到的事务发布锁,以锁定事务需要访问的数据库的一部分。如果事务请求的数据库的一部分已被锁定,则该事务将暂停,直到锁变为可用。一旦事务完成,数据库的该部分就会被解锁。在一些实施方式中,数据库可以是被索引的,其具有多个键(key)和与多个键中的每一个相关联的记录。系统接收的事务可以查询或更新与索引的多个键中的一个或多个键相关联的一个或多个记录。技术实现要素:根据一个方面,本公开中描述的主题涉及一种数据库管理系统,该系统包括具有索引的存储器,该索引包括多个键和与多个键中的每一个相关联的至少一个记录。该系统还包括可通信地耦合到存储器的控制器,其中控制器被配置为接收用于访问与多个键中的任何一个都不匹配的第一请求的键的第一事务。控制器还被配置为从多个键中确定第一键,其中第一键的值最接近第一请求的键的值,并且是小于和大于第一请求的键的值中的一个。控制器还被配置为使用k分区函数(k-partitionfunction)来将k个分区中的第一分区分配给第一请求的键,并向第一事务发布用于第一分区的第一锁。控制器还被配置为接收用于访问与多个键中的任何一个都不匹配的第二请求的键的第二事务,其中,第二请求的键的值与第一键的值之间的小于或大于关系与第一请求的键的值与第一键的值之间的关系相同。控制器还被配置为使用k分区函数将k个分区中的第二分区分配给第二请求的键。控制器附加地被配置为基于确定第二分区与第一分区不同,向第二事务发布用于第二分区的第二锁。k分区函数可以包括模k函数(modulo-kfunction)或可以将其输入映射到k个分区中的一个的散列函数(hashfunction)。在完成第一事务之前接收第二事务。索引可以是主索引。或者,索引可以是基于主索引的属性形成的辅索引(secondaryindex)。控制器还可以被配置为从多个键中确定第二键。第二键可以具有最接近并且大于第一键的值的值。控制器可以被配置为维护第一键和第二键之间的键值范围的范围锁。第一锁可以是共享锁或独占锁。第一事务可以包括访问除第一请求的键之外的至少一个以上键的请求,并且控制器可以被配置为对包括至少一个以上键的k个分区中的一个或多个发布除第一锁之外的一个或多个锁。根据另一方面,本公开中描述的主题涉及一种用于管理访问数据库的事务的方法。该方法包括接收用于访问索引的第一事务,该索引包括多个键和与多个键中的每一个相关联的至少一个记录,其中第一事务请求访问与多个键中的任何一个都不匹配的第一请求的键。该方法还包括从多个键中确定第一键,其中第一键的值最接近第一请求的键的值,并且是小于和大于第一请求的键的值中的一个。该方法还包括使用k分区函数将k个分区中的第一分区分配给第一请求的键,并且向第一事务发布用于第一分区的第一锁。该方法附加地包括接收用于访问与索引的多个键中的任何一个都不匹配的第二请求的键的第二事务,其中,第二请求的键的值与第一键的值之间的小于或大于关系与第一请求的键的值与第一键的值之间的关系相同。该方法还包括使用k分区函数将k个分区中的第二分区分配给第二请求的键。该方法还包括基于确定第二分区不同于第一分区,向第二事务发布用于第二分区的第二锁。k分区函数可以包括模k函数。k分区函数可以包括可以将其输入映射到k个分区中的一个的散列函数。接收第二事务可以发生在第一事务完成之前。该索引可以是主索引,也可以是辅索引。辅索引可以基于主索引的属性来形成。该方法可以包括从多个键中确定第二键。第二键可以具有最接近并且大于第一键的值的值。可以为第一键和第二键之间的键值范围维护范围锁。第一锁可以是共享锁或独占锁。除第一请求的键之外,第一事务可以请求访问至少一个以上的键。该方法还可以包括对包括至少一个以上键的k个分区中的一个或多个发布除第一锁之外的一个或多个锁。本说明书中描述的主题的一个或多个实施方式的细节在附图和以下描述中阐述。根据说明书、附图和权利要求,其他特征、方面和优点将变得显而易见。请注意,下图中的相对尺寸可能未按比例绘制。附图说明图1示出了示例计算系统的表示。图2a-图2c示出了示例主索引和辅索引的表示。图3示出了对应于图2a所示的主索引中的b树索引。图4示出了请求的索引键所在的、两个存在的键之间的不存在的索引键值列表。图5描绘了分区锁定技术的结果。图6示出了用于分区请求的不存在的索引键另一分区技术。图7示出了用于在图1所示的数据库管理系统中处理传入的事务(incomingtransaction)的示例过程的流程图。图8示出了用于在图1所示的数据库管理系统中处理传入的事务的另一示例过程的流程图。图9示出另一示例计算系统的表示。各个附图中相同的附图标记和名称表示相同的元件。具体实施方式上面介绍和下面更详细讨论的各种概念可以以多种方式中的任何一种来实施,因为所描述的概念不限于任何特定的实施方式。具体实施方式和应用的示例主要是为了说明的目的而提供的。图1示出了示例计算系统100的表示。系统100包括服务器102、数据库存储104、网络106和设备108。服务器102主控(host)数据库管理系统110,数据库管理系统110又包括事务引擎112、索引引擎114和锁管理器116。数据库存储104包括一个或多个存储卷118,存储卷118可以包括物理存储器,诸如磁盘存储器、固态存储器等。设备108可以包括能够通过诸如网络106的网络通信的任何计算设备。在一些实施方式中,设备108可以包括台式计算机、膝上型计算机、平板计算机、移动通信设备、大型计算机(mainframecomputer)、服务器等。在一些实施方式中,设备108可以向一个或多个用户提供用户界面以允许用户提供输入、接收输出,并且与在设备108上运行的一个或多个应用进行总体的交互。在一些实施方式中,设备108可以包括一个或多个应用,该一个或多个应用允许设备108通过网络106与诸如服务器102的其他计算设备通信。例如,在一些实施方式中,设备108可以运行诸如客户端应用的应用,该客户端应用允许用户或在设备108上运行的其他应用与服务器102和数据库管理系统110通信。设备108还可以运行服务器应用,该服务器应用可以允许在其他设备上运行的其他客户端应用与设备108通信。网络106可以包括无线网络和/或有线网络。在一些实施方式中,网络106可以包括互联网、内联网或可以允许设备108之间以及设备108和服务器102之间的通信的任何其他网络技术。服务器102可以包括可以通过网络106通信的任何计算设备。在一些实施方式中,服务器102可以包括类似于上面关于实施设备108所讨论的那些设备。服务器102还可以经由网络和/或外围接口与数据库存储104通信。服务器102可以运行便于在一个或多个应用上运行的操作系统(未示出),诸如数据库管理系统110。数据库管理系统110可以允许一个或多个用户同时访问数据库。此外,数据库管理系统110可以在数据库中存储、处理和保护数据。在一些实施方式中,数据库可以存储在数据库存储104中,数据库存储104可以在服务器102的内部和/或外部。在一些实施方式中,数据库存储104可以是服务器102的本地存储、分布在网络上的存储、或者他们的任意组合。用户可以是通过设备108或服务器102与数据库管理系统110交互的用户和/或应用。用户可以通过向数据库管理系统110发送请求来访问数据库。这些请求可以是数据库管理系统110指定的查询语言中的查询形式,诸如例如结构化查询语言(structuredquerylanguage,sql)。数据库管理系统110还可以将处理请求的结果传送回用户。数据库管理系统110可以将用户发送的请求分割成任务和子任务。在一些实施方式中,可以将这些任务和子任务分配给服务器102线程。事务引擎112可以处理请求以生成存储器事务以执行请求。例如,事务引擎112可以生成与诸如从用户接收的查询和更新的请求相对应的存储器读取和/或写入事务。在一些实施例中,这些事务可以读取和/或修改与数据库相关的数据库表和索引。索引引擎114管理数据库管理系统110的一个或多个数据库表和索引。具体地,索引引擎114可以响应于由事务引擎112生成的事务来操纵数据库表和索引的元素。锁管理器116为需要对存储在数据库中的数据执行受保护操作的客户端线程提供共享锁和独占锁。锁管理器116还可以提供附加的锁或锁模式,诸如增量锁、意图锁等。图2a示出了对应于数据库表的示例主索引200的表示,图2b示出了示例第一辅索引202的表示,图2c示出了示例第二辅索引204的表示。主索引200包括几条记录,即:雇员id、名(firstname)、邮政编码和电话。其中一条记录(雇员id)用作主键(primarykey)。主键的值是唯一的,并且主索引200根据主键值排序。在一些实施方式中,主索引200可以不包括所有记录的值,而是包括对应于每个主键值的指针,其中指针指向存储记录值的数据库表或数据文件中的位置。在该示例中,主键(雇员id)可用于在主索引200中执行搜索。第一辅索引202和第二辅索引204是相对于主索引200的非唯一属性排列的非唯一索引。例如,第一辅索引202相对于名记录排列(也称为“对名排列”),而第二辅索引204相对于电话记录排列(也称为“对电话排列”)。通常,辅索引便于对除主键之外的属性进行查询应答。这里,第一辅索引202便于对名进行查询应答,第二辅索引204便于对电话进行查询应答。因此,对名值“jerry”的第一辅索引202的查询将返回两个主键值90和95,它们可用于访问对应于名为“jerry”的雇员的记录。类似地,对电话值9999的第二辅索引204的查询将返回主键值90,主键值90可用于访问具有电话号码9999的雇员的记录。在一些实施方式中,可以组合对辅索引的查询以提供多属性搜索的记录。例如,为了搜索名为“jerry”且电话号码为“9999”的一个或多个雇员的雇员记录,可以确定对第一辅索引202查询的结果集(90和95)和对第二辅索引204查询的结果集(90)的交集(90),以在主索引200中获得适当的一个或多个主键。还可以形成主索引200的其他属性上的附加辅索引。在一些实施方式中,主索引和辅索引中的条目的数量可以与图2a-图2c中所示的条目的数量不同。例如,在一些实施方式中,条目的数量,特别是对于大型数据库,可以达到数百、数千或数十万。本文的讨论不受索引大小的限制。图3示出了对应于图2a所示的主索引200中的b树索引300。b树索引是用于表示主索引200的示例数据结构。b树索引包括根节点302、一组中间节点304和一组叶节点306。b树索引300中的每个节点包括至少一个搜索键值和指向子节点或指向记录的至少两个指针。例如,根节点302包括一个搜索键93和两个指针:指向第一中间节点304a的左指针和指向第二中间节点304b的右指针。b树索引300被构造成使得:经由左指针到达树的一部分中的所有节点具有的搜索键值小于根节点302中的搜索键值93,并且经由右指针到达的树一部分中的所有节点具有的搜索键值大于或等于根节点302的搜索键值93。类似地,第一中间节点304a包括搜索键值90,并且指向具有小于搜索键值90的搜索键80的第一叶节点306a和具有大于或等于搜索键值的搜索键值90的第二叶节点306b的两个指针。此外,第二中间节点304b包括搜索键值95,并且包括指向具有搜索键值93的第三叶节点306c的指针和指向具有两个搜索键值95和97的第四叶节点306d的另一指针。叶节点中的每一个可以包括或指向与其各自的搜索键相关联的记录(或列)。例如,第一叶节点306a包括或指向与主索引200中的雇员id(或主索引键)80相关联的记录(图2a)。类似地,第四叶节点306d包括或指向与雇员id95和雇员id97相关联的记录。叶节点306中的搜索键以从左到右的递增顺序排序。在一些实施方式中,一个叶可以包括指向其直接(immediate)右侧的叶的指针。应当理解,图3所示的b树索引300仅仅是主索引200的一个示例b树表示,b树的其他配置或其他索引数据结构可以用于表示主索引200。类似于b树索引300,b树索引也可以用于表示第一辅索引202和第二辅索引204。索引的b树表示,诸如主索引200和辅索引202和204,可以提供用于搜索和操纵索引的有效工具。在一些实施方式中,索引引擎114可以通过从事务引擎112接收操作来管理b树索引以读取或修改b树索引。然而,本文讨论的用于向请求不存在的索引键的事务发布锁的技术不限于索引的特定表示,并且可以应用于任何索引及其任何表示。如上面关于图1所提到的,锁管理器116为需要对存储在数据库中的数据执行受保护操作的事务提供锁,诸如共享锁、独占锁、增量锁、意图锁等。在一些实施方式中,请求事务从锁管理器116获取对该事务需要访问或更新的行(row)的锁。在执行事务期间,该行可以为该事务而被独占地锁定。如果该行的锁已经由不同的事务获取,则该请求事务一直等到不同事务的执行完成并且与该行相关联的锁再次解锁之后,才获取锁。事务可以包括例如查询和更新事务。查询事务包括利用索引键搜索索引(诸如辅索引和主索引)。更新事务修改、添加或删除索引(诸如辅索引和主索引)中的记录。查询和更新事务都可以在多个索引上运行。例如,查询事务可以首先查询一个或多个辅索引以获得一组主索引键,该组主索引键或该组索引键的子集可以用于访问主索引中的记录。更新事务可以对主索引的记录以及一个或多个辅索引中的相关记录进行更新。在接收到查询或更新事务时,事务引擎112可以调度对一个或多个索引的一个或多个操作。另外,事务引擎112可以为一个或多个操作中的每一个操作向锁管理器116请求锁。如果接收到锁,事务引擎112可以通过与索引引擎114协调来继续操作。在事务完成时,事务引擎112通知锁管理器116解锁或释放与事务相关联的锁。在一些实施方式中,锁管理器116直到事务完全完成都可以不解锁为事务授予的锁。因此,如果该锁所请求的索引行先前已由仍在执行的其他事务锁定,则锁管理器116可以不授予该锁。在这种情况下,事务引擎112可以暂停事务,并等待其他事务完成以及锁管理器116解锁相关的锁。在一些实施方式中,事务可以请求或更新索引中可能尚不存在的数据。例如,查询操作可以请求读取与主索引200或b树索引300中的主索引键#84相关联的记录。然而,主索引中不存在主索引键#84。因此,查询事务将不会成功,或者可能产生空结果。然而,为了维护可串行性和可重复计数(serializabilityandrepeatablecount),希望在查询事务完成之前防止另一个事务对具有主索引键#84的条目的操作。还需要防止对辅索引(诸如图2b-图2c中所示的索引)的类似条目的操作,以维护可串行性和可重复计数。在一些实施方式中,可以通过分配锁来防止对该条目的操作。在一些实施方式中,由于请求的索引键不存在,锁管理器116可以将锁分配给大于和小于请求的索引键的两个键条目之间的不存在的索引键的整个范围。例如,图4示出了请求的索引键所在的、两个存在的键之间不存在的索引键值列表。具体地,图4示出了存在的主索引键#80与另一存在的主索引键#90之间的索引键值的列表400。上面讨论的查询事务请求读取与不存在的主键#84相关联的记录。在一些实施方式中,可以授予对大于和小于请求的不存在的主索引键#84的两个存在的主索引键之间的不存在的主索引键(或者如果查询事务请求不存在的辅索引键,则为辅索引键)的整个范围的锁。然而,这种方法可能会导致执行延迟,因为请求位于#81-#89的锁定范围内的除#84以外的不存在的主索引键的事务将无法继续。换句话说,在上述方法中,不仅那些请求不存在的主索引键#84的事务被阻止,而且那些请求值不是#84但是值在#81-#89范围内的不存在的主索引键的事务也被阻止。这可能会影响数据库的性能。图5描绘了分区锁定技术的结果。具体地,类似于图4所示的列表400,图5示出了两个存在的主索引键值#80和#90之间不存在的主索引键值的列表500。然而,锁管理器116并不是锁定#80和#90之间不存在的主索引键的整个范围,而是将列表划分区成k个分区,并向k个分区中的一个或多个分区提供锁。具体地,在图4的示例中,不存在的主索引键的列表500被分成四个分区:包括键#81、#85和#89的第一分区502;包括键#82和#86的第二分区504;包括键#83和#87的第三分区506;和包括键#84和#88的第四分区508。然后,锁管理器116仅向包括请求的不存在的主索引键#84的第四分区508授予锁。因此,直到事务完成都阻止对键#84和#88的访问。然而,列表500中的剩余键没有被锁定。也就是说,当当前事务保留第四分区的锁时,允许访问第一分区502、第二分区504和第三分区506内的键。因此,如果在请求访问键#84的事务完成之前接收到请求不存在的主索引键#86的另一事务,锁管理器116可以将锁分配给包括键#82和#86的第二分区504。这减少了可能被阻止的事务的数量,从而提高了数据库管理系统110的性能。在图5中,四个分区通过在不存在的主索引键范围内使用模k函数形成。具体地,四个分区由模4函数生成。然而,这种形成分区的方法仅是示例,因为也可以使用其他模函数或用于形成分区的其他技术。例如,也可以使用将不存在的索引键映射到k个分区中的一个分区的散列函数。在一些实施方式中,分区的大小可以是固定的,并且可以形成固定数量的分区,使得所有不存在的主索引键被包括在这些分区中的一个中。在一些实施方式中,可以基于期望的粒度级别来选择分区的大小。也就是说,可以增加分区的数量以提供精细的锁定粒度。例如,可以使用模8函数而不是模4函数来增加分区的数量,从而进一步减少可能必须被阻止的事务的数量。在一些实施方式中,事务可以包括范围谓词。也就是说,事务请求访问不存在的索引键的范围。在这种情况下,可以锁定在请求范围内包括不存在的索引键的所有分区。例如,如果事务的范围谓词包括键#82-84,则可以锁定第二分区504、第三分区506和第四分区508。然而,第一分区502保持解锁,可以允许请求第一分区502内的索引键的事务继续并获取对第一分区的锁。图6描述了另一方法,以分区不存在的键。在该方法中,锁管理器116确定大于或小于请求的不存在的键的值的最接近的存在的键。在图6所示的示例中,第一事务请求主索引中的索引键#84。锁管理器116通过将请求的索引键与主索引中的主键进行比较来确定请求的键是否存在于主索引中。如果与主索引中的任何存在的主键不匹配,则锁管理器116可以确定请求的索引键#84是不存在的键。然而,与上面关于图5所讨论的技术(其中锁管理器116确定请求的索引键#84所在的两个最近的存在的索引键#80和#90)不同,锁管理器116仅确定与请求的索引键#84最接近的较小和最接近的较大存在的索引键中的一个。在图6所示的示例中,锁管理器选择其值最接近并且小于请求的索引键#84的索引键#80。或者,锁管理器116可以选择其值最接近并大于请求的不存在的索引键#84的索引键#90。锁管理器116可以使用分区函数来将请求的不存在的索引键分配到分区中。例如,锁管理器116可以使用模k函数将请求的不存在的键#84分配给k个分区中的一个分区。在一些示例中,锁管理器116可以使用将不存在的索引键映射到k个分区中的一个分区的散列函数。参考图6所示的示例,锁管理器116可以使用模4函数作为分区函数,并将不存在的键#84分配给4个分区中的一个分区。对键值84的模4函数的结果是0。因此,锁管理器向第一不存在的键#84分配第一分区:分区0。锁管理器116可以向请求事务发布对不存在的键#84的锁或被分配有不存在的键#84的分区0的锁。锁管理器116可以接收对主索引中的索引键#87的第二请求。如上面关于第一请求所讨论的,锁管理器116可以确定请求的键#87是否是不存在的键。锁管理器116还可以确定索引中大于或小于第二请求的不存在的键#87的值的最接近的存在的键。在一些实施方式中,锁管理器116可以维护用于选择要么大于要么小于请求的不存在的键的最近的存在的键的一致策略。例如,锁管理器116可以总是选择值小于请求的不存在的键的最近的存在的键。在其他示例中,锁管理器116可以总是选择值大于请求的不存在的键的最近的存在的键。在图6所示的示例中,锁管理器116总是选择小于请求的不存在的键的最近的存在的键。因此,对于第二不存在的键,类似于第一不存在的键,锁管理器116选择存在的键#80。锁管理器116使用用于将分区分配给第一请求的不存在的键#84的相同分区函数来将分区分配给第二请求的不存在的键#87。例如,锁管理器116使用模4函数来确定可以分配给第二请求的不存在的键#87的分区。将模4函数应用于键值#87的结果为3。因此,锁管理器116将分区3分配给第二请求的不存在的键。锁管理器116确定分配给第二请求的键#87的分区先前是否已经为不同的事务而锁定。在这种情况下,对于请求第一不存在的键#84的第一事务,分区0已经被锁定。但是分配给第二请求的不存在的键#87的分区3没有被先前的事务锁定。因此,锁管理器116可以向第二事务发布对第二不存在的键#87的锁或分区3的锁。如果锁管理器116接收请求大于存在的键#80并且落入分区0或分区3的不存在的键的另一事务,那么对该不存在的键的请求将被拒绝。例如,如果另一事务请求不存在的键#83,对键#83进行模4将导致分区3的分配,那么对不存在的键#83的请求将被拒绝,因为分区3的锁已经被发布给第二事务。在这种情况下,在用于请求的键和分区的锁变得可用之后,可以暂停该事务并对该事务发布锁。在请求的不存在的键小于索引中的最小键值或大于索引中的最大键值的情况下,图6所示的示例特别有用。例如,如果#80是有序索引中最大的键,则有无限数量的可能不存在的键的值大于索引键#80。在这种情况下,锁管理器116基于对具有大于#80的值的每个请求的不存在的键所使用的分区函数来分配k个分区中的一个分区。应当注意,为值大于存在的索引键#80的不存在的键授予的锁不影响对值小于存在的索引键#80的不存在的索引键的锁的请求。锁管理器116可以单独和独立于管理值大于存在的索引键#80的不存在的键的锁来管理值小于存在的索引键#80的不存在的键的锁。在一个或多个实施方式中,锁管理器116可以作为单个组来管理对所有不存在的索引键的锁,而不管他们相对于存在的索引键的值。例如,当接收到对任何不存在的键的请求时,锁管理器116可以使用模k函数或任何其他分区函数来为该不存在的键分配分区。当接收到对另一不存在的键的请求时,锁管理器116使用相同的分区函数来确定分配给另一不存在的键的分区,并且如果该分区已经被先前的事务锁定,锁管理器可以拒绝对另一不存在的键的请求。在一些实施方式中,锁管理器116可以指定用于获取对不存在的键的锁的锁模式。在一些这样的实施方式中,锁管理器116可以指定和维护k+1个锁模式,其包括对应于k个分区的k个锁模式,以及锁定两个存在的键之间不存在的键的整个范围的附加锁模式。在一些实施方式中,锁管理器116可以通过组合独占(exclusive,“x”)、共享(shared,“s”)和非锁定(no-lock,“n”)模式来定义锁模式。独占锁通常被分配用于写入或更新事务,并且与任何其他锁不兼容。共享锁通常分配给读取或查询事务,并且可以与其他事务共享锁。在一个示例中,事务可以为图5所示的分区请求锁模式“nnns”。这意味着事务请求对第一分区502、第二分区504、第三分区506和第四分区508的非锁定,并且请求对键#80和#90之间不存在的键的整个范围的共享锁定。在另一示例中,事务可以请求锁模式“nnnxn”来锁定包括键#84的第四分区,并且第二事务可以请求锁模式“nxnnn”来锁定第二分区。由于请求的锁不重叠,因此这两个事务都可以被授予请求的锁并被允许继续。类似的锁模式请求可以用于上面关于图6讨论的四个分区。锁管理器116可以选择下一存在的键#90来定义键#80和#90之间不存在的键的范围,并且将范围锁分配给该范围的键。锁管理器116可以通过组合除上述锁模式之外的锁模式(诸如例如增量锁模式和意图锁模式)来定义锁模式。图7示出了用于在图1所示的数据库管理系统110处处理传入事务的示例过程700的流程图。具体地,过程700包括接收用于访问索引的第一事务,该索引包括多个键和与多个键中的每一个相关联的至少一个记录,其中第一事务请求访问与多个键中的任何一个键都不匹配的第一请求的键(阶段702)。上面已经关于图2a-图5讨论了该过程阶段的一个示例。具体地,图4示出了与接收到的事务相关联的请求的键#84,该请求的键#84与图2a所示的主索引200内的多个键中的任何一个都不匹配。该方法还包括从多个键中确定最接近并且具有比第一请求的键的值更小的值的第一键(阶段704),并且从多个键中确定值最接近并且大于第一请求的键的值的第二键(阶段706)。上面已经关于图5讨论了这些过程阶段的示例。例如,如图5所示,锁管理器116确定最接近且小于请求的键#84的存在的主索引键#80,并确定最接近且大于请求的键#84的存在的主索引键#90。该方法还包括将第一键和第二键之间的键值范围分成k个分区(阶段708)。上面已经关于图5讨论了该过程阶段的一个示例。例如,如图5所示,锁管理器116将范围#81-#89分成四个分区:第一分区502、第二分区504、第三分区506和第四分区508。该方法还包括向第一事务发布用于k个分区中包括第一请求的键的值的第一分区的第一锁(阶段710)。上面已经关于图5讨论了该过程阶段的一个示例。例如,锁管理器116向包括请求的键#84的第四分区508授予锁。图8示出了用于在图1所示的数据库管理系统110处处理传入事务的另一示例过程800的流程图。过程800包括接收首先接收用于访问索引的第一事务,该索引包括多个键和与多个键中的每一个键相关联的至少一个记录,其中第一事务请求访问与多个键中的任何一个键都不匹配的第一请求的键(阶段802)。上面已经关于图2a-图6讨论了该过程阶段的一个示例。具体地,图4和图6示出了与接收到的事务相关联的请求的键#84,该请求的键84与图2a所示的主索引200内的多个键中的任何一个都不匹配。该方法还包括从多个键中确定第一键,其中第一键的值最接近第一请求的键的值,并且是小于和大于第一请求的键的值中的一个(阶段804)。上面已经关于图6讨论了该过程阶段的一个示例。例如,锁管理器116选择最接近并具有小于第一请求的键#84的值的值的存在的索引键#80。如上面关于图6所提到的,锁管理器116可以选择最接近并且具有大于第一请求的键#84的值的值的存在的键#90。过程800还包括使用k分区函数将k个分区中的第一分区分配给第一请求的键(阶段806)。上面已经关于图6讨论了该过程阶段的一个示例。例如,锁管理器116对请求的不存在的键#84的值使用模4函数,并将作为四个分区中的一个的分区0分配给第一请求的键#84。过程800还包括向第一事务发布用于第一分区的第一锁(阶段808)。如上面关于图6所讨论的,锁管理器向请求的不存在的键#84发布锁或者向分配有请求的不存在的键#84的分区0发布锁。过程800还包括接收用于访问与索引的多个键中的任何一个不匹配的第二请求的键的第二事务,其中,第二请求的键的值与第一键的值之间的小于或大于关系与第一请求的键的值与第一键的值之间的关系相同(阶段810)。上面已经关于图6讨论了该过程阶段的一个示例。例如,第二事务请求第二不存在的索引键#87。第二不存在的索引键#87的值也大于存在的索引键#80的值。也就是说,第二请求的不存在的键#87与第一请求的不存在的键#84在存在的键#80的同一侧。因此,第二不存在的键#87的值与存在的键#80的值具有与第一不存在的键#84的值与存在的键80的值的“大于”关系相同的“大于”关系。应当注意,即使存在的键#90被选择作为第一键,第二存在的键#87的值与存在的键#90的值具有的“小于”关系与第一请求的不存在的键#84的值与存在的键#90的值具有的“小于”关系相同。过程800还包括使用k分区函数将k个分区中的第二分区分配给第二请求的键(阶段812)。上面已经关于图6讨论了该过程阶段的一个示例。锁管理器116使用相同的分区函数将分区分配给第二请求的不存在的键,该分区函数用于将分区分配给第一请求的不存在的键#84。也就是说,锁管理器116对第二请求的不存在的键#87的值使用模4函数来将分区3分配给第二请求的不存在的键#87。过程800还包括基于确定第二分区不同于第一分区,向第二事务发布用于第二分区的第二锁(阶段814)。上面已经关于图6讨论了该过程阶段的一个示例。锁管理器116确定分配给第二请求的不存在的键#87的分区(分区3)是否不同于分配给第一请求的不存在的键#84的分区(分区0)。由于分配的分区是不同的,锁管理器116向第二事务发布对第二请求的不存在的键#87的锁或对分区3的锁。图7示出了示例计算系统910的框图。在一些实施方式中,计算系统910可用于实施图1中示出的示例服务器102中示出的各种组件。在一些实施方式中,计算系统910可用于实施数据库管理系统110的一个或多个模块。在一些实施方式中,计算系统910可用于实施数据库存储104。在一些实施方式中,可以利用一个或多个计算系统910来执行图7中所示的过程700的一个或多个阶段以及图8中所示的过程800。概括地说,计算系统910包括用于根据指令执行动作的至少一个处理器950和用于存储指令和数据的一个或多个存储器设备970或975。所示的示例计算系统910包括一个或多个处理器950,处理器950经由总线915与至少一个网络接口控制器920、存储器970、以及任何其他设备90(例如i/o接口)通信,其中,该至少一个网络接口控制器920具有连接到其他网络设备912(a-n)的网络接口端口922(a-n)。通常,处理器950将执行从存储器接收的指令。所示的处理器950包含或直接连接到高速缓存存储器975。更详细地,处理器950可以是处理指令(例如,从存储器970或高速缓存975获取的指令)的任何逻辑电路。在许多实施例中,处理器950是微处理器单元或专用处理器。计算系统910可以基于能够如本文所述操作的任何处理器或处理器组。在一些实施方式中,处理器950能够执行图6中所示的过程600。该处理器950可以是单核或多核处理器。该处理器950可以是多个处理器。在一些实施方式中,处理器950可以被配置为运行多线程操作。存储器970可以是适于存储计算机可读数据的任何设备。存储器970可以是具有固定存储的设备或用于读取可移动存储介质的设备。示例包括所有形式的非易失性存储器、介质和存储器设备、半导体存储器设备(例如,eprom、eeprom、sdram和闪速存储器设备)、磁盘、磁光盘和光盘(例如,cdrom、dvd-rom和disc)。计算系统910可以具有任何数量的存储器设备970。在一些实施方式中,存储器970可以包括与图6中所示的过程600相对应的指令。在一些实施方式中,存储器970可以存储一个或多个数据库索引,诸如图2a-图2c中所示的索引。高速缓存存储器975通常是放置在靠近处理器950用于快速读取时间的计算机存储器的形式。在一些实施方式中,高速缓存存储器975是处理器950的一部分,或者与处理器950在同一芯片上。在一些实施方式中,存在多级高速缓存975,例如l2和l3高速缓存层。网络接口控制器920经由网络接口922(a-n)(也被称为网络接口端口)管理数据交换。网络接口控制器920处理用于网络通信的开放系统互连(opensysteminterconnection,osi)模型的物理和数据链路层。在一些实施方式中,通信适配器的一些任务由处理器950处理。在一些实施方式中,网络接口控制器920是处理器950的一部分。在一些实施方式中,计算系统910具有多个网络接口控制器920。网络接口922(a-n)是物理网络链路的连接点。在一些实施方式中,网络接口控制器920支持无线网络连接,接口端口是无线接收器/发射器。通常,计算系统910通过到网络接口922(a-n)的物理或无线链路与其他网络设备912(a-n)交换数据。在一些实施方式中,网络接口控制器920实施诸如以太网的网络协议。其他网络设备912(a-n)经由网络接口端口922连接到计算系统910。其他网络设备912(a-n)可以是对等(peer)计算设备、网络设备或任何其他具有网络功能的计算设备。例如,第一网络设备912(a)可以是将计算系统910连接到诸如互联网的数据网络的网络设备,诸如集线器、网桥、交换机或路由器。其他设备980可以包括i/o接口、外部串行设备端口和任何附加的协处理器。例如,计算系统910可以包括用于连接输入设备(例如,键盘、麦克风、鼠标或其他定点设备)、输出设备(例如,视频显示器、扬声器或打印机)或附加存储器设备(例如,便携式闪速驱动器或外部介质驱动器)的接口(例如,通用串行总线(universalserialbus,usb)接口)。在一些实施方式中,计算系统910包括附加设备980,诸如协处理器(co-processor),例如数学协处理器可以以高精度或复杂的计算来辅助处理器950。在一些实施方式中,其他设备980可以包括全球定位和地理围栏(geo-fencing)模块,其可以允许生成和处理与计算系统910相关联的全球定位数据。本说明书中描述的主题和操作的实施可以在数字电子电路中实施,或者在包含在有形介质、固件或硬件上的计算机软件中实施,包括在本说明书中公开的结构及其结构等同物,或者在他们中的一个或多个的组合中实施。本说明书中描述的主题的实施可以被实施为在有形介质上体现的一个或多个计算机程序,即编码在一个或多个计算机存储介质上的计算机程序指令的一个或多个模块,用于由数据处理设备执行或控制数据处理设备的操作。计算机存储介质可以是或包括在计算机可读存储设备、计算机可读存储衬底、随机或串行存取存储器阵列或设备、或他们中的一个或多个的组合中。计算机存储介质也可以是或包括在一个或多个单独的组件或介质(例如,多个cd、磁盘或其他存储设备)中。计算机存储介质可以是有形的和非暂时的。本说明书中描述的操作可以被实施为由数据处理装置对存储在一个或多个计算机可读存储设备上或从其他来源接收的数据执行的操作。计算机程序(也称为程序、软件、软件应用、脚本或代码)可以以任何形式的编程语言编写,包括编译或解释语言、声明或过程语言,并且可以以任何形式部署,包括作为独立程序或作为模块、组件、子例程、对象或适合在计算环境中使用的其他单元。计算机程序可以但不必对应于文件系统中的文件。程序可以存储在保存其他程序或数据的文件的一部分中(例如,存储在标记语言文档中的一个或多个脚本),存储在专用于所讨论的程序的单个文件中,或者存储在多个协调文件中(例如,存储一个或多个模块、子程序或部分代码的文件)。计算机程序可以被部署为在位于一个站点或分布在多个站点并通过通信网络互连的一个或多个计算机上执行。通信网络的示例包括局域网(localareanetwork,“lan”)和广域网(wideareanetwork,“wan”),跨网(inter-network)(例如,互联网)和对等网络(peer-to-peernetwork)(例如,adhoc对等网络)。本说明书中描述的过程和逻辑流程可以由执行一个或多个计算机程序的一个或多个可编程处理器执行,以通过对输入数据进行操作并生成输出来执行动作。过程和逻辑流程也可以由专用逻辑电路执行,并且装置也可以被实施为专用逻辑电路,例如fpga(fieldprogrammablegatearray,现场可编程门阵列)或asic(applicationspecificintegratedcircuit,专用集成电路)。虽然本说明书包含许多具体的实施细节,但是这些不应被解释为对任何发明或可能要求保护的范围的限制,而是作为特定于特定发明的特定实施的特征的描述。在单独实施方式的上下文中在本说明书中描述的某些特征也可以在单个实施方式中组合实施。相反,在单个实施方式的上下文中描述的各种特征也可以单独地或以任何合适的子组合在多个实施方式中实施。此外,尽管上面的特征可以描述为以某些组合起作用并且甚至最初如此声明,但是在某些情况下可以从组合中切除来自所要求保护的组合的一个或多个特征,并且所要求保护的组合可以针对子组合或子组合的变化。类似地,虽然在附图中以特定顺序描绘了操作,但是这不应该被理解为要求以所示的特定顺序或按序列顺序执行这些操作,或者要求执行所有示出的操作,以实现期望的结果。在某些情况下,多任务处理和并行处理可能是有利的。此外,上述实施方式中的各种系统组件的分离不应被理解为在所有实施方式中都需要这种分离,并且应当理解,所描述的程序组件和系统通常可以在单个软件产品中集成在一起或者被打包到多种软件产品。对“或”的引用可以被解释为包含性的,使得使用“或”描述的任何术语可以指示单个、多于一个和所有描述的术语中的任何一个。标签“第一”、“第二”、“第三”等不一定意味着指示顺序,并且通常仅用于区分相似或相似的项目或元素。对本公开中描述的实施方式的各种修改对于本领域技术人员来说是显而易见的,并且在不脱离本公开的精神或范围的情况下,本文定义的一般原理可以应用于其他实施方式。因此,权利要求不旨在限于本文所示的实施方式,而是与符合本公开、本文公开的原理和新颖特征的最宽范围相一致。当前第1页12当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1