CN106030533B - 通过拆分过程执行自动重试事务 - Google Patents
通过拆分过程执行自动重试事务 Download PDFInfo
- Publication number
- CN106030533B CN106030533B CN201580010207.XA CN201580010207A CN106030533B CN 106030533 B CN106030533 B CN 106030533B CN 201580010207 A CN201580010207 A CN 201580010207A CN 106030533 B CN106030533 B CN 106030533B
- Authority
- CN
- China
- Prior art keywords
- sentence
- affairs
- sentence set
- result
- stage
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/466—Transaction processing
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/10—File systems; File servers
- G06F16/18—File system types
- G06F16/1865—Transactional file systems
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/23—Updating
- G06F16/2308—Concurrency control
- G06F16/2315—Optimistic concurrency control
- G06F16/2322—Optimistic concurrency control using timestamps
Abstract
相对于在事务失败时允许该事务被自动重试的数据库运行该事务,从而使得该事务被自动重试的某些事务失败对接收作为执行该事务的结果的数据的实体不可见。通过标识将引起数据库状态的改变的语句来标识事务的第一语句集合。标识导致要向实体发送的数据被生成的第二语句集合。该方法进一步包括执行第一语句集合以改变数据库。该方法进一步包括与第一语句集合分开地运行第二语句集合,以生成要向实体发送的数据。
Description
背景
背景和相关技术
计算机和计算系统已经影响了现代生活的近乎每一个方面。计算机通常涉及工作、休闲、保健、运输、娱乐、家政管理等。
在计算中,事务是一组定义必须在原子上全部成功或全部失败的函数的语句。例如,考虑简单的金融事务。在所示出的简单示例中,对一个账号作出借(debit)而对另一账号作出贷(credit)。事务性地,借或贷的任一方都不可能在没有另一方的情况下发生而不会导致数据不一致性。由此,该事务可包括使得借被执行的语句以及使得贷被执行的语句。如果贷和借两者都被执行,则借和贷的影响变得持久,这有时被称为提交事务。如果借或贷任一失败,则该事务中止,并且所有的中间函数都回退到该事务开始之前存在的状态。
事务通常落入两种类别,即悲观的和乐观的。在悲观事务中,依据实体对数据资源采用锁,由此防止其他实体对这些数据资源写和/或从这些数据资源读。这允许操作被执行,而没有来自其他实体的干扰。在乐观事务中,假设(有时是不正确的)其他实体都不将干扰操作,并且由此不采用锁。当对事务执行实质性数据处理操作以确保其他实体都未对相同的事务执行操作结束时,在“验证”阶段执行验证。如果存在冲突操作,则一个或若干事务可被回退并重试。
相对于数据库运行的事务可能由于各种瞬时错误而无法执行。例如,这样的错误可包括死锁,或者在诸如可从华盛顿州雷蒙德市的微软公司获得的SQL 中可用的在线事务处理(OLTP)内存技术之类的乐观并行控制系统的情况下,验证失败。应用通常包括用于检测这样的失败并重试事务的逻辑。重试逻辑在与其中事务已失败的服务器通信的客户端上实现起来可能是复杂且昂贵的。实现自动重试的客户端库为了实现该重试仍将产生与服务器的额外通信往返形式的开销。
常见的请求是使服务器处理瞬时失败并自动重试失败的事务,而无需客户端交互。不幸地是,如果服务器已向应用或客户端返回任何数据,则自动(对客户端透明的)重试并不总是可能。
此处要求保护的主题不限于解决任何缺点或仅在诸如上述环境这样的环境中操作的各实施例。相反,提供该背景仅用于例示其中可实现所述一些实施例的一个示例性技术领域。
简要概述
此处解说的一个实施例包括可在计算环境中实施的方法。该方法包括用于相对于数据库运行事务的动作,在该事务失败时,该数据库允许该事务被自动重试,使得引起该事务被自动重试的某些事务失败对接收作为该事务的执行的结果的数据的实体不可见。该方法包括通过标识其执行将引起数据库状态的改变的各语句来标识事务的第一语句集合。该方法进一步包括通过标识其执行导致要向实体发送的数据被生成的各语句来标识该事务的第二语句集合。该方法进一步包括执行第一语句集合以改变数据库状态,同时执行操作来明确排除对第二语句集合中的至少一部分语句的执行。该方法进一步包括与第一语句集合分开地运行第二语句集合,以生成要向实体发送的数据。
提供本概述以便以简化的形式介绍以下在详细描述中进一步描述的一些概念。本概述并非旨在标识出要求保护的主题的关键特征或必要特征,亦非旨在用作辅助确定要求保护的主题的范围。
附加特征和优点将在以下描述中提出,且部分会从描述中显而易见,或者可以通过实践此处的原理来获悉。本发明的特征和优点可以通过在所附权利要求书中特别指出的工具和组合来实现和获得。本发明的特征从以下描述和所附权利要求书中将更完全显而易见,或者可以通过如下文所述实践本发明而获悉。
附图简述
为了描述可获得以上记载的及其他优点和特征的方式,将参照各具体实施例呈现以上简述的主题的更具体描述,各具体实施例在附图中例示。理解这些附图仅描述典型的实施例,因此不应被视为限制本发明的范围,各实施例将通过使用附图以附加的具体性和细节来描述和解释,附图中:
图1示出了客户端和服务器,其中服务器具有用于执行自动重试的功能;
图2示出了可被执行的用于数据库更新和用于向客户端返回数据的各个阶段;
图3示出了经多版本的数据库的示例;以及
图4示出用于相对于数据库运行事务的方法。
详细描述
现参考图1,本文中的各实施例可实现用于将事务的执行(或其他处理)划分成至少两个不同的阶段的机制。一般来说,在第一阶段(修改阶段),事务通过执行不与客户端102进行交互但在失败的情况下可被自动重试而无需客户端102知道任何失败的语句来执行任何操作。在第二阶段(输出阶段),事务通过执行向客户端102返回数据的语句来执行任何操作。例如,服务器104可执行操作来更新数据库106中的数据,但延迟生成数据108,该数据108直到稍后的时间才被发送给客户端102(或者生成并丢弃数据108,并且稍后重新生成数据108)。此拆分执行增加了可由服务器104内部地处理任何失败的机会,并减小了必须向客户端102暴露失败的风险。如本文中所使用的,语句有时候可包括在给定语句被执行的情况下,可执行不与客户端进行交互的一个或多个操作以及确实与客户端进行交互的一个或多个操作的功能。在一些实施例中,这样的语句可被细分成各子语句。由此,当语句在本文中被提及时,应当领会,这样的语句可实际上是从逻辑上被分割成更高级别的语句创建的。
本文中描述了用于将执行拆分成如以下描述的两个阶段的两种方法。注意,也可实现组合这两个描述的方法中的各元素的混合方法。在第一方法(在本文中被称为输出计划方法)中,在修改阶段期间,各实施例构建捕捉执行输出阶段所需的任何信息的输出计划。该计划可包括要执行的语句、时戳、参数、非确定性函数的结果等。该计划也可包括整个结果集合(例如,在结果集合很小的情况下和/或在各实施例必须执行这些语句以完成修改阶段并且不希望重新运行这些语句的情况下)。在输出阶段期间,各实施例“执行”输出计划。输出计划的性质意味着各实施例在输出阶段不作出任何判定,而是在输出计划指示时才这么做。
在第二方法(在本文中被称为重新运行方法)中,各实施例运行该事务两次。在修改阶段期间,各实施例简单地跳过任何输出语句(除了可能影响修改阶段的结果的那些输出语句——例如,影响围绕修改语句的流控制的那些输出语句外)并且只运行修改语句。各实施例不创建输出计划,一般也不保存任何结果。如果涉及非确定性函数,则各实施例可能必须保存至少一些参数或结果。这是可使用混合方法的一个示例。在输出阶段期间,各实施例再次运行该事务,包括重复任何“过程逻辑”或控制流。然而,在重新运行时,各实施例只运行输出语句,并跳过修改语句,除了可能影响输出阶段的结果的那些修改语句外。这样的修改语句可包括例如围绕输出语句的流控制。如果各实施例重复修改语句,则各实施例并不在第二时间附近实际地修改任何事物。
尽管两个阶段(即,修改阶段和输出阶段)被明确提出,但一些实施例实现如图2所示的九阶段过程。图2示出具有用于执行事务的各阶段的过程200。
图2示出“获得开始时戳”阶段201。在该阶段201,在服务器104处获得标识与过程200相关联的事务开始时相关的时间的时戳。该时戳被用来确定要读取哪些数据。该时戳也可与服务器104处执行的其他事务的比较中使用,以确定对其他事务的依赖性是否可能,该事务是否可依赖于另一事务,或者冲突事务是否已发生。
图2示出“修改阶段”202。在该阶段202,在服务器104处修改可由于事务操作的结果而在数据库106中被修改的数据,并更新数据库106。注意,如本文中稍后将参考图3示出的,数据库修改可以以多版本样式执行,使得在事务应当中止的情况下,操作可被回退。在修改阶段期间可发生瞬态失败(例如,写-写冲突),这可导致重试情况,该重试情况对客户端102将是透明的。
图2示出“结束或提交时戳”阶段203。在该阶段203,在数据库106已被更新后,创建指示与过程200相关联的事务何时被完成的时戳。该时戳可用作与来自其他事务的时戳的比较操作数,以标识事务冲突、哪个事务在冲突情形中赢了、哪些数据在事务冲突情形中有效、该事务是否可依赖于另一事务、另一事务是否可依赖于该事务等等。注意,结束时戳可实际上在过程200的若干其他阶段之前发生。具体地,“输出”阶段207可实际上是相当资源和时间敏感的,使得如果阶段203在阶段207之后被执行,则这将显著地增加阶段201的开始时戳和阶段203的结束时戳之间的总时间。这进而在乐观事务系统中将增加事务冲突的时间和机会。由此,通过在“结束或提交时戳”阶段203之后执行“输出”阶段207,事务冲突和事务失败的可能性可被显著地降低。
图2进一步示出“验证”阶段204。在“验证”阶段204,作出比较以确定在乐观事务系统中是否已发生各事务之间的冲突以及是否应当回退一个或多个事务。各实施例想要检测并支持自动重试的主要错误是验证失败、提交依赖性和写-写冲突。验证失败是验证事务和另一事务之间的使得验证事务无法实现其预期用来执行的隔离水平(例如,可重复读或可序列化)的任何冲突。验证失败和提交依赖性往往对重试是自校正的,因为冲突事务必须已经在验证中,并且重试事务将获得大于冲突事务的结束时戳的新的开始时戳。写-写冲突更成问题,因为这些写-写冲突可涉及两个活跃事务,并且在已成功删除了所涉及的行的事务正长期运行的情况下则可坚持重试。由此,对于写-写冲突,一些实施例可实现对重试的延迟,直到冲突事务完成。以下示出了附加的详情。
图2进一步示出“等待依赖性清除”阶段205和“等待该事务可依赖的各事务用完(drain)”阶段206。尽管阶段205和206被顺序地示出,但应当领会,这两个阶段的次序可被改变,或者这些阶段中的任一阶段中的动作可被一起执行。必要地,这两个阶段使得过程200等待本事务可对其具有依赖性的其他事务清除,或者等待可对本事务具有依赖性的其他事务清除。例如,一旦事务Tx1进入验证,则假设该事务将最终提交。由此,由Tx1插入的行应当对其开始时戳大于Tx1的结束时戳的另一事务Tx2可见。然而,由于Tx1仍可使验证失败,因此Tx2在读取由Tx1插入的任何行之前获得对Tx1的依赖性。如果Tx1随后使验证失败并且中止了,则Tx2必须也中止。使用该示例,Tx2将通过等待Tx1提交来实现阶段205。阶段206更敏感一点。假设在Tx2得到结束时戳并成功完成验证时,Tx2尚未获得对Tx1的依赖性。在该时间点,Tx2不应失败。然而,如果在Tx2的输出阶段期间,Tx2尝试读取由Tx1插入的行,则Tx2可能被迫获得依赖性。为了避免这种情况,Tx2通过等待诸如Tx1之类具有小于Tx2的开始时戳的结束时戳的任何验证事务来实现阶段206。一旦所有这样的事务都完成,则Tx1可继续下去。在一些实施例中,可实现即使在Tx1进入验证之前Tx2仍可获得对Tx1的依赖性的系统。
过程200进一步示出“输出”阶段207。阶段207执行操作以生成将向客户端102返回的输出数据108。在一些实施例中,旨在生成将向客户端102返回的数据108的操作中的一些或全部被延迟,直到这些操作需要被执行以生成数据108。然而,有时,这些操作中的一些可能需要更早(诸如在“修改”阶段202)被执行以生成在服务器104处更新数据库106所需的数据或者以确定在“修改”阶段202要运行哪些语句。在一些这样的情况下,这些操作可被执行,并且生成的任何数据将被丢弃,使得不需要高速缓存过多量的数据。这些操作将在“输出”阶段207处被重新运行以生成向客户端102发送数据108所需的数据。然而,在一些实施例中,如果数据足够小、难以生成或者是非确定性的,则一些这样的数据将在“修改”阶段202被高速缓存,并在“输出”阶段207作为向客户端102发送的数据108的一部分被发送。
具体地,对于非确定性结果,两个基本的选项现在被示出。对于第一选项,各实施例保存整个结果,并在“输出”阶段207期间返回保存的结果。例如,考虑以下语句:
“SELECT NEWID()FROM…”.
每当NEWID()被调用时,该NEWID()都返回新GUID(全局唯一标识符)。该查询可返回许多GUID。由此,在该情况下,运行该查询并保存包括所有这些新GUID的结果可以是合理的方法。
替换地,各实施例可只保存非确定性参数或以确定性方式重新运行语句所需的函数输出。考虑以下示例:
“SELECT…FROM Sales WHERE Date=GETDATE()”.
GETDATE()是非确定性的。如果它被运行两次,则它可返回不同的答案。但是,相比于保存来自该查询的所有销售数据,只保存GETDATE()的输出可能将需要更少的存储器。
如以下将示出的,在一些实施例中,输出计划110可被生成。输出计划110中的大多数可在“修改”阶段202之前(或者作为“修改”阶段202的一部分)或者在“输出”阶段开始之前被生成。输出计划110可包括要在“输出”阶段207执行的操作的集合114。由此,各语句可作为“修改”阶段202的一部分被运行,而要在“输出”阶段207运行的语句被存储在集合114中。
在一些实施例中,被配置成生成输出的一些语句(诸如在使用输出计划方法或在重新运行方法中标识出的输出语句时在集合114中的那些语句)可能需要被执行,以确定什么语句要在“修改”阶段202期间运行或可能由于其产生非确定性结果而需要被运行。来自该语句的结果可取决于该结果的性质和/或该实现的细节而被丢弃或被保存。例如,如果生成的数据足够小,或者该数据是非确定性的,则该数据可被添加到保存结果集合118中,在使用输出计划方法时,该保存结果集合118可被保存在输出计划110中。如果重新运行方法正被使用,则该结果集合可被保存到其他合适的存储中。
如果结果已经被生成并被保存在保存结果中,则各实施例可选择不重新运行输出语句。一些实施例将不包括保存结果,而将通过运行输出语句(例如,输出集合114中的语句或以其他方式被标识为生成输出以向客户端102发送的语句)来生成所有结果。一般来说,在“修改”阶段202之后数据将被丢弃,使得不具有大量的数据被高速缓存。
图2进一步示出“日志生成”阶段208。“日志生成”阶段208具有与其他事务系统中的日志生成类似的功能。“日志生成”阶段208的一些部分可与过程200中的其他阶段并行地被执行。
图2示出“后处理”阶段209。该阶段在处理200结束时执行以在数据库106上和/或在服务器104处执行各清理操作。
各实施例可适用于实际上任何可能期望延迟向客户端返回结果的场景。例如,一些系统阻挡执行,以在结果取决于首先提交的另一事务时避免向客户端发送那些结果。在实现本文中描述的功能的情况下,这样的阻挡变得不必要。
此外,各实施例可用于减小在其期间使用乐观并发控制来执行的事务易受冲突影响的窗口,并由此减少事务失败率。例如,各实施例可减少在事务开始时(例如,如开始时戳所定义的)和在事务结束时或在事务获得其结束时戳时之间流逝的时间,由此减少两个不同的事务在基于乐观的系统中可能具有冲突访问的时间量。注意,各实施例可替换地在悲观系统中使用。例如,各实施例可用于降低在其期间在常规的基于锁的数据库系统(诸如SQL)中执行的事务必须保持其锁的窗口,由此增加事务并发性并降低死锁风险。
由此,各实施例可自动将针对数据库的事务拆分成至少两个阶段。一个阶段用于执行对数据库状态的更新,如“修改”阶段202所示出的。第二阶段(“输出”阶段207所示出的)用于生成结果集合(如数据108所示出的)以发送给客户端102。这可促成允许自动事务重试,消除由事务依赖性造成的对阻挡的需要,和/或降低由冲突造成的事务失败风险。
各实施例可适用于本机地编译的过程(诸如用SQL中实现的OLTP技术实现的那些过程),或常规的基于译码器的事务执行(诸如,被所有其他SQL批处理和过程(包括自组织批处理)使用的事务执行)。存在用于实现该拆分的多个不同的替换和选项,如以下所描述的。
如果服务器104在事务失败之前尚未将任何结果发送给客户端102,则可自动地和透明地对客户端102重试该事务。如果服务器104在事务失败之前已将任何结果返回给客户端102,则通常必须向客户端102通知该失败,使得客户端102可丢弃现在无效的结果,并一般在事务重试逻辑中涉及该客户端102。由此,如果在阶段202和206(包括的)之间发生任何失败,则事务执行跳回到步骤201,并再次开始。
注意,尽管阶段是按特定次序示出的,但应当领会,各实施例不限于该次序。例如,阶段205和206可按任一次序或甚至并行地执行。在一些系统中,其他次序是可能的,并且可能是优选的。
一些实施例可包括用于在执行事务的剩余部分并确保该事务可成功地提交时,延迟生成结果集合即数据108(并由此避免要缓冲结果集合的需要)的机制。替换地,一些结果可被生成并存储,但不被发送给客户端102。这对于小型的中间结果而言尤其有用。如果该事务出于任何原因而不可提交,则服务器104可自动地中止当前事务,并重试该事务,而无需客户端102知晓该中止和重试。在服务器104已确定事务可成功提交(或许在一个或多个重试尝试之后),服务器可随后生成所有结果集合即数据108,并将其发送给客户端102。客户端102根本不需要知晓这些失败。
现参考图1,客户端102在单个“批处理”116中将整个事务提交给服务器104,使得服务器不预期中间结果。如果客户端102将仅提交事务的一部分并且随后等待中间结果,则在不向客户端通知中间结果是否已经被发送的情况下,该特定事务无法被自动地重试。
一些实施例可使用其中每一更新(包括事务内更新)被版本化的基于多版本的存储引擎来实现。SQL中实现的OLTP技术实现这样的引擎。现在参考图3,示出了经多版本化的数据库的示例。
在图3所示的示例中,事务312包括锁(lock)之内的三个语句。所示的锁并不是必要的,但是可用于一些实施例中。事务312中的语句可被用来对数据库表格304中的记录进行操作。本文中描述的一些实施例可用每一语句的版本号来扩充版本存储,以区分由当前语句创建的记录和由更早的语句创建的记录。具体地,一些实施例可向事务312中的每个语句分派一标识符。当语句对数据库表格304中的记录执行某些函数时,分派给执行这些函数的语句的标识符可与对其执行函数的记录相关联。
例如,在一些实施例中,额外信息与数据库表格304中所创建的每个新记录以及数据库表格中可由事务312内的语句删除的每个现存记录一起存储。在图3所示的示例中,语句标识符列314被包括在数据库表格304中。语句标识符列314包括标识来自事务312的创建相应的行的语句的标识符。在所示的示例中,标识符1对应于语句1,标识符2对应于语句2,并且标识符3对应于语句3。尽管在所示的示例中,标识符被示为包括在记录的列元素中,但应当领会,可替换地或另外地使用存储和关联标识符的其他方法。例如,在一些实施例中,标识符可被存储在记录头部。可替换地或另外地,可实现各实施例,籍此通过为语句创建语句表格来将记录关联到语句,其中,由语句创建的记录存储在该语句表格中。各示例将在本文中被进一步解说。
存储额外信息允许在读记录集合时,作出关于哪些记录是通过当前语句创建的,以及哪些记录在语句执行的开始之前已经存在的确定。各实施例可通过依赖于删除和更新不会立即删除或驳回旧的记录版本,而是会创建并插入新的版本来取代旧的版本来利用多版本化。因此,在更新之后,已更新记录的老版本和新版本两者同时存在于数据库表格304中,并且创建新版本的语句仍可读取老版本,但不能读取该语句自身所创建的新版本。
具体地,额外信息可用来确保数据修改语句仅仅看见如该语句开始执行之前已存在的数据库状态,并避免该语句看见其自身的修改。一些实施例可使得这些条件对于所有的数据修改语句(包括插入语句、更新(修改)语句和删除语句)为真。
实施例可被应用于多版本数据库系统,包括SQL服务器的快照隔离。实施例可被应用于基于盘的系统和/或主存储器系统,以及应用于使用悲观(即,基于锁)或乐观(即,基于确认)并发性控制方案的系统。
存在用于将数据存储操作语句与数据存储记录版本关联的各种实现选项。以下将讨论这些选项中的多个选项。例如,一个实施例可向事务112内的每个语句分配唯一版本号。在一些实施例中,这些号码可被生成为单调递增的整数。图3中示出的示例正好示出这样的示例。替换地或附加地,当语句首次对记录执行某一函数时,可使用向该语句分配的时戳,诸如例如时戳指示。尽管已示出这些示例实施例,但应当领会,可使用多个不同号码方案中的任一者。例如,在一些实施例中,可使用全局地或在事务内生成各语句的唯一号码的任何方案。
如前述,当一语句的版本号被存储在那条语句所创建的每个记录中时,可实现各实施例。可实现其中在读取时,那条语句仅被允许看见“不”包含当前版本号(即,对应于那条语句的版本号)的记录的实施例。例如,在图3中,事务312中的语句3可读取语句标识符列314中带有标识符1和2的记录,但是不能读取语句标识符列中带有标识符3的记录。
如果每个事务还具有其自己的事务标识符(这在多版本系统中很普遍),并且如果事务标识符与由事务创建的任何记录一起存储,则语句版本号可由不同事务中的语句重新使用。因此,例如,4字节的版本号应该允许每事务含多达232(约4百万)条语句,并应该足以允许任何合理事务完成。在替换实施例中,即使当事务标识符没有与由事务创建的任何记录一起存储时,版本号可仍然是事务上下文专用。在这些实施例中,事务提交过程的一部分可包括将版本号从记录中清除。
替换地,实现可向事务和语句分配来自单个唯一标识符空间的标识符。该方案将潜在地允许对较大标识符的使用。
在上述示例中,语句标识符与记录一起存储。然而,替换实施例可被实现,其中事务存储由当前语句所创建或删除的记录列表。在一些实施例中,该列表可被存储在诸如散列表之类的使得搜索高效的数据结构中。单个表格可被用于已创建或删除的记录。然而,被插入和被删除的记录两者都被添加到列表。然而,存在于该列表中具有不同的效果,这取决于记录是被插入还是被删除。例如,如果该记录由于被插入而被标识在列表中,则该语句被防止读取该记录。如果该记录由于被删除而被标识在列表中,则该语句仍将被允许查看该记录。列表中可包括指示符以指示该记录由于被插入还是被删除而在列表中。替换地或附加地,该记录本身可具有某种指示符以指示该记录是否是被删除的记录。替换地或附加地,存在于列表中简单地倒转记录的默认可见性。
在每一语句都完成后,可丢弃该列表。在读取时,如果语句遇到由当前事务创建的记录,则该语句检查与当前事务相关联的记录列表,以确定该记录由当前语句所创建且应该被跳过,还是该记录是以前存在且应该可见;或者,在已删除语句的情况中,确定记录由当前语句创建且应该可见,还是该记录是先前被删除且应该被跳过。
将语句版本号与每个记录一起存储对于主存储器系统而言特别适合,其中返回到记录以重置版本号的开销限于在存储器写入。如果包含需要版本号重置的记录的页已经被清除到盘中和/或被逐出存储器,基于盘的系统可能需要执行额外的盘写入或甚至额外的盘读取。因此,基于盘的系统可从上述包含存储记录的单独列表的实施例中受益。
语句版本号可以与已插入记录和已删除记录两者相关联,前者使得向当前语句隐藏它们,后者使得继续向当前语句示出它们。在不允许事务删除由尚未提交的不同事务所创建的记录的系统中,使用相同的存储器足以存储创建该记录的语句的版本号以及后来删除该记录的语句的版本号。可实现各实施例,其中创建记录的事务不需要已经提交,但是已经完成其活动处理。例如,事务可处于“预提交”或“验证”阶段。需要这两语句不能并发地执行。类似地,如果语句试图删除由较早的语句在相同事务中创建的记录,则只要这两个语句不能并发地执行,第二语句就能覆盖第一语句的版本号。
一个实施例实现可选择通过仅将版本号分配给仅某些语句来保存版本号。这可例如被实现以降低存储号码所需的字节数。例如,在一个简单实施例中,仅仅那些修改数据的语句需要版本号。更为复杂的实现也可仅向那些从相同表格中读取和写入的语句或者读取和写入可能潜在地冲突的语句分派版本号。例如,如果语句已经包含在读取和写入之间的阻塞算子(例如,排序),则无需向该语句分派新版本号,因为该语句将无论如何都不能读取它创建的记录。如果使用单个位来跟踪哪些记录是由当前语句创建的,或如果事务存储由当前语句创建的记录列表,则该优化特别有用。在对版本号的保存被执行时,各实施例需要考虑在各数据修改语句之间是否存在输出语句。每当各实施例具有输出语句时,各实施例都必须对下一数据修改语句递增语句id。
可实现其中版本号被压缩的实施例。例如,为版本号分派的位数或字节数可基于事务尺寸。例如,通过定制版本号可用的位数或字节数,执行较少语句并生成相对较少的版本号的事务可将较少的存储用于这些版本号。例如,执行256条语句的事务将需要最多一个字节的存储来存储这些版本号。
一些实施例可使得各种限制被应用。例如,可实现其中语句不能删除它所插入的记录的实施例。如上所述,这可通过其中语句无法读其所插入的记录并且该语句无法删除其无法读的记录的设计来实现。
可实现实施例,其中一个事务中的语句不能删除由第二事务中的并发语句所插入的记录,直到并发语句完成且第二事务提交为止。注意,可实现其中由于并发语句必定按任一方式完成,因此第二事务仅必须开始提交过程的实施例。
每个记录单个语句id足以跟踪插入的记录和删除的记录两者。如果语句试图读取由该语句插入的记录,则由于该版本标识符,该语句将被阻止读取该记录。如果语句试图读取由该语句删除的记录,则由于该版本标识符,该语句将被允许读取该记录。因此,语句将被允许读取并非由它插入的已插入的(还未删除的)记录,但是将不被允许读取由它插入的已插入的(还未删除的)的记录。同样,语句将被允许读取它删除的已删除记录,但是将不能读取并非由它删除的已删除记录。在注意到记录存储三个值,即:开始事务、结束事务和语句id的情况下,考虑以下事件序列。
1.事务T1开始。
2.T1中的语句S1开始。
3.S1插入记录R1(T1,-,S1)。
4.S1尝试读R1,并且由于S1创建了R1而跳过R1。
5.T1中的语句S2开始。
6.S2读记录R1,并且由于S2没有创建过R1而成功。
7.S2删除记录R1(T1,T1,S2)。
8.S2读记录R1,并且由于S2删除了R1而成功。
9.T1中的语句S3开始。
10.S3尝试读记录R1,并由于S3没有删除过R1而跳过R1。
值得注意的是,作为所存储的语句标识符匹配当前语句的结果,步骤4和8与步骤6和10产生相反结果。这表明了语句创建记录时采取的动作和语句删除记录时采取的动作之间的区别。
一些实施例可进一步包括用于在先前时间确定系统的状态的功能。例如,使用版本号,各实施例可在特定语句对记录操作以查看作为语句对记录操作的结果的系统的状态的时间之前,确定数据库的状态。例如,在一些实施例中,系统在特定时间处或在执行了特定语句之后的状态可通过使用与特定时间或特定语句相关联的版本号或者与较早的时间和/或较早的语句相关联的所有版本号来确定。例如,如果用户想要观察作为执行特定语句的结果的系统的状态,则关联于与该语句相关联的版本号的任何记录以及关联于与先前执行的语句相关联的版本号的任何记录可被用来向用户呈现系统的先前状态。
其他系统(包括基于SQL Server的盘的快照隔离实现和其他基于多版本和快照隔离的数据库系统)也可从本发明中获益。各实施例可由用于在任何时间或甚至多次执行查询并且只要该查询以相同的时戳、语句id和操作数参数执行就得到相同的结果的多版本引擎来促成。该断言保持为真,即使自从查询将已被执行的时间以来更新已被应用于数据库。
现在将讨论关于以上引入的两个基本实现的附加细节。第一实现在本文中被称为“输出计划”实现并涉及如通常将会的那样执行事务,只是每当各实施例遇到会返回结果的查询时,各实施例保存该查询、时戳(例如,开始时戳)和语句id以及参数。其他语句(包括更新数据库状态的那些语句)通常将被执行。对于以较低隔离水平(例如,快照)运行的查询,该查询根本不需要被执行。对于以较高隔离水平(例如,可重复读或可序列化)运行的查询,可能有必要执行该查询并丢弃结果,以便收集对稍后运行的验证(查看“验证”阶段204)所必须的信息,并确定该事务是否可提交。例如,这样的必要信息可被存储在读集合和/或扫描集合中。读集合是该事务所读的所有记录的列表。在一个实现中,该读集合在验证期间被用来确定被读的记录是否稍后被删除或更新。这会创建违反可重复读语义的读写冲突。扫描集合是该事务所执行的所有范围查找的列表。该扫描集合可包括要对该查找使用的索引、该查找的开始和结束点以及要应用于每一记录的任意过滤或预测。在一个实现中,在验证期间,该扫描集合被用来确定是否插入了在其被重复的情况下将对该事务可见的新记录。这样的记录是幻像(phantom),并且违反可序列化语义。替换地,该系统可推迟执行该查询,并且使用保存的信息来代替读集合和扫描集合。一旦该事务已通过验证,并且被保证提交,则保存的查询可被执行以生成必须被发送给客户端的最终结果集合(参见数据108)。注意,对于以较高隔离水平运行的查询,该查询被执行两次:一次用于验证目的,并且另一次用于生成最终结果集合。
在本文中有时被称为“重运行”实现的第二实现尝试避免存储与必须被执行的查询有关的任何数据。在该示例中,事务被运行两次:一次用于实现“修改”阶段202,一次用于实现“输出”阶段207。如在第一实现中,在第一执行期间,返回结果的查询不被执行(或者仅出于收集读和扫描集合信息的唯一目的而被执行)。一旦事务已通过验证,该事务就仅在这时被再次执行,任何数据库更新均被跳过,并且仅用于生成数据108的查询被执行。通过针对相同的数据库状态重复完全相同的事务逻辑,有可能重构将已经执行的查询。来自第一执行的非确定性结果(例如,诸如getdate()或newid()之类的函数的结果)被存储,因为重新执行将给出与第一执行不同的结果。该技术可不仅用于重构用于为客户端产生结果集合的查询,还(通过执行该事务总共三次)重构用于运行验证的查询(以得到可重复读或可序列化运行的查询)。
在利用代码生成(诸如OLTP的本机编译的过程)的系统中,有可能通过生成执行该事务的每一阶段的自定义代码来优化任意实现。例如,在第一实现中,该代码将被拆分成两个部分。除了保存所需的信息外,第一部分将不包括用于执行查询的任何代码。第二部分包括用于基于保存的信息来执行查询的代码。
单个系统不限于任一实现,并且可混合这两个实现。例如,第一技术可被用于使用许多非确定性函数的复杂事务,而第二技术可被用于较简单的事务。
该系统在确定事务何时被保证提交时还可具有一些范围(latitude)。例如,该系统可仅等待,直到验证已完成,或者该系统可等待事务被固化(例如,等待提交日志记录被写到盘中(参见“日志生成”阶段208))。如果该系统仅等待验证完成,则仍存在事务可失败的可能性(尽管在远程)。
现将示出与可能需要附加数据处理或考虑的某些异常情况有关的附加细节。
在一些系统中,除了图3中示出的多版本的多行外,行头部具有单个语句id,每当插入或删除行时,该单个语句id都被更新。一般来说,该功能对于实现本发明的各实施例而言是有用的,因为同一语句不可同时插入和删除同一行。然而,存在其中这导致自动重试事务的问题的几个情形。如上所述,一些实施例的目标可以是实现其中各实施例可在任何时间仅使用时戳和正确的语句id来重新运行语句的功能。然而,考虑具有以下事件序列的第一示例:
a)select RowA--未找到
b)insert RowA(statement id 1)
c)select RowA--已找到
d)delete RowA(statement id 2)
e)select RowA--未找到
步骤d中的删除将用2盖写该行的语句id。这意味着对步骤c中的选择的重新运行由语句id 1(statement id 1)插入,并且由此应当是可见的。此外,不可能仅假设行(row)在语句id 2(statement id 2)之前是可见的,因为该行在语句id 1之前是不可见的。因此,各实施例可需要被配置成跟踪插入(insert)该行的语句以及删除(delete)该行的语句的语句id两者。
对于嵌套开始原子块和/或嵌套过程执行(其暗示嵌套开始原子)而言,该问题被进一步恶化。考虑具有以下语句序列的第二示例:
begin try
begin atomic
delete row(statement id 1)
select row--未找到
throw(statement id 2)
end atomic
end try
select row--已找到
该示例示出保存点回退可如何“取消删除”行(row)。然而,回想一下,行是通过语句id 1来删除的,并且是通过原子(atomic)块(其也碰撞(bump)该语句id,因为它对恢复该行具有影响)的抛出(throw)来取消删除的。
存在以上标识出的问题的各种解决方案。例如,在以上的第一示例中(单个事务中的插入/删除),问题可通过将额外的语句id存储在行中来解决。然而,该解决方案需要存储额外的数据。具体地,在本文中示出的示例中,它将4个字节添加到行头部,该4个字节是很少被需要的字节。
替换地,第一示例中的问题也可通过将插入语句id移动到开始时戳并设置比特标志来指示该时戳何时真正为语句id来解决。在该情况下,真事务id被存储在结束时戳中。(回想一下,该问题仅在同一事务同时插入和删除行时存在。由此,开始事务id和结束事务id必定是相同的。)
第一和第二示例中标识出的问题可通过将关于语句id的额外信息存储在事务本地查找图中来被联合地解决。各实施例可跟踪向给定行指针分配的所有语句id的历史,并使用该信息来确定给定行是否对给定语句id可见。各实施例可是使用比特标志或仅神奇的语句id来标识何时各实施例必须检测额外的图。然而,在实现这样的解决方案时,存在应当被考虑的一些异常情况。例如,假设各实施例“取消删除”该行,则并发事务可随后“重新删除”该行并盖写语句id。比特标志起作用,但如果各实施例允许并发事务再次删除该行,各实施例不可重置该比特标志,因为各实施例无法知道有多少并发事务已设置了比特标志。替换地,各实施例可使用参考记数而非比特,或者令行留在防止并发事务删除该行直到原始事务完成为止的状态中。替换地,各实施例可总是检测该额外图,但是这可负面地影响性能。
各实施例可能无法在事务的“修改”阶段202的执行期间完全地跳过对输出语句的执行。例如,如果各实施例具有某过程中的尝试/捕捉块,并且如果输出语句可失败并抛出,则各实施例必须执行该输出语句来确定针对该过程的正确流控制。即使该输出语句无法抛出,各实施例仍可需要执行该输出语句,使得各实施例可确保当在事务的“输出”阶段207期间执行该语句时不依赖任何东西。替换地,各实施例可实现等待依赖性在逐行的基础上“清除”,使得在事务的“输出”阶段207期间永远不会依赖任何东西的功能。然而,在一些实施例中,这涉及阻挡用于确定给定行是否对给定语句id可见的API。
又一替换例是延迟执行给定事务的“输出”阶段207,直到该事务可有可能依赖的所有其他事务都已提交(即,图2中的阶段206)本文中重要的仅有事务是已经验证的那些事务,使得该延迟应当相对短。此外,各实施例仅需要等待并发事务完成验证;各实施例不需要等待日志记录被写,因为在不太可能的媒体或其他硬件失败的情况下,各实施例可简单地使自动重试失败。
类似地,如果各实施例使用“重新运行”方法来确定要执行哪些输出语句,则各实施例将需要在“输出”执行阶段207期间重新运行至少一些修改语句来重构流控制。替换地,各实施例可使用“输出计划”和“重新运行”的混合来跟踪在“修改”执行阶段202期间哪些语句生成了错误。具体地,即使某些类型的错误可向客户端102隐藏,但其他错误需要被报告给客户端102。由此,即使服务器104知道该事务将失败,该服务器必须仍能够有意地生成应当被报告给客户端的任何错误。
各实施例采用的方法可对性能具有大影响。例如,各实施例结果可高效地运行每个输出语句两次,取决于语句,这可能昂贵的。在一些情况下,各实施例可能够稍微优化。例如,如果在过程的结束处,所有输出语句都被聚类,而不会干预修改语句,则各实施例不必担心影响各实施例运行什么输出语句的流控制。然而,各实施例实现用于避免“输出”执行阶段207期间由事务依赖性导致的失败的功能。
即使各实施例离开有错误的过程(不触发自动化重试的过程,或者如果各实施例已经耗尽了预定的自动化重试限制),则如果各实施例具有在该错误之前将已经生成的任何输出的情况下,各实施例必须仍运行该事务的“输出”阶段207。客户端被准许假设在该错误被引起的地方之前将已经执行的任何输出语句都将运行。该错误本身将被延迟,直到所有合适的输出语句都已被执行以后为止。
支持嵌套执行的各实施例包括用于嵌套执行自动重试事务的功能。使用“重新运行”方法来运行“输出”执行阶段207的各实施例支持到所有过程的两个入口点。第一入口点执行事务的“修改”阶段202,而第二入口点执行事务的“输出”阶段207。
相反,使用“输出计划”来跟踪每一输出语句的各实施例跟踪每一输出语句所属于的过程,该跟踪为输出计划110的一部分。
在一些实施例中可限制嵌套执行。例如,被实现来在输出语句在该过程的结束处时,在“修改”执行阶段202期间跳过对输出语句的模拟执行的优化仅在过程被直接或作为嵌套执行的一部分来执行的情况下是可能的,在该嵌套执行中,没有进一步的修改语句在比堆栈更深一层的任一调用者范围中执行。
各实施例可被配置成检测并支持用于自动重试的错误为验证失败(可重复读或可序列化)、提交依赖性和写-写冲突。验证失败和提交依赖性往往在重试上自我修正,因为冲突事务必须已经处于验证,并且重试事务将获得比冲突事务的结束时戳更大的新的开始时戳。写-写冲突更成问题,因为写-写冲突可涉及两个活动事务,并且在已成功删除所涉及的行的事务正长期运行的情况下可持续重试。由此,对于写-写冲突,一些实施例可实现对重试的延迟,直到冲突事务完成。
由此,一般来说,如以上并参考图2所述,用于执行自动重试事务的步骤如下:
(1)获得开始时戳(参见201)
(2)执行修改阶段(参见202)
(3)获得结束时戳(参见203)
(4)运行验证(参见204)
(5)等待所有依赖性清除(参见205)
(6)等待各实施例可能依赖的所有验证事务(例如,在一些实施例中,为具有小于当前事务的开始时戳的结束时戳的验证事务;或者在跳过“验证”阶段204并且在如下所述的“输出”阶段207期间运行时戳结束时的语句时,为具有小于当前事务的结束时戳的结束时戳的验证事务;等等)用完(参见206)
(7)(使用开始时戳)执行输出阶段(参见207)
(8)(在需要的情况下)生成日志并提交(参见208)
(9)执行后处理(参见209)
如果2和7之间的任何步骤在提交依赖性失败、写-写冲突或验证失败方面失败,则处理应当以新开始时戳从步骤1起重新开始。
对于写-写冲突,各实施例在重新开始之前等待冲突事务获得结束时戳。
步骤6仅在各实施例在修改阶段期间没有执行所有输出语句的情况下才是必须的。
一般来说,各实施例在所有情况下都将运行所有输出语句。对于可重复读或可序列化隔离水平,语句填充在“验证”阶段204期间要检查的读集合和/或扫描集合。任何错误(包括触发重试的那些错误)被检测,并且触发合适的控制流。
一般来说,一个优化是跳过不会有影响的任何输出语句:
在使用输出计划方法的情况下:为流控制;
在使用重新运行方法的情况下:为哪些修改语句运行。
具体地,输出计划方法需要确定在“修改”阶段202期间哪些输出语句应当运行。因此考虑以任何形式影响流控制的任何语句,即使该影响仅仅是改变哪些输出语句应当运行。在重新运行情况下,仅影响哪些其他输出语句可能运行的输出语句在“修改”阶段期间可被跳过。
注意,跳过的语句仍可需要验证。
现在在以下解说具体的优化。
通过排除资源错误(例如,存储器不足、硬件故障等),一般有可能给出查询计划以确定语句是否有可能抛出错误。如果语句无法抛出错误,则其无法更改流控制。
在没有尝试/捕捉块的情况下,原子块内的语句是否抛出并不真正重要,因为所有数据修改都将被回退。
以上概括的规则的略微变化和进一步优化是可能的。例如,对于输出计划方法,各实施例一般需要知道要运行哪些输出语句。尽管各实施例可在“修改”阶段202期间运行输出语句一次以确认答案,但存在其他解决方案。例如,各实施例可在输出计划110中注释错误应当跳过输出计划110中所有剩余的输出语句。具体地,各实施例生成要在“输出”阶段207期间运行的输出语句的列表。这些语句中的一者或多者可抛出错误,并且由此终止执行,并跳过剩余的输出语句。仅为了确定是否存在错误,各实施例可避免在修改阶段期间真正地运行这些输出语句。由此,如果没有剩下其他修改语句,则各实施例可仅将剩余输出语句以及指示该系统应当停止执行输出计划中的任何其他输出语句的任何错误手段的注释添加到输出计划110中。替换地或附加地,各实施例可使用混合方法,在该混合方法中,对于过程的结束处的各输出语句(其后面没有任何数据修改语句),各实施例从输出计划模式切换到重新运行模式。
以下示出了用于对以可重复读和/或可序列化隔离水平运行的输出语句运行验证的附加细节和/或替换例.如上所述,如果输出语句在修改阶段期间被运行,则这些输出语句可填充读集合和/或扫描集合.如果基于以上优化,可跳过输出语句:(a)各实施例可随便运行这些语句,并填充读集合和/或扫描集合;或者(b)各实施例可在“验证”阶段204期间运行这些语句,则:(i)各实施例可像各实施例一般会在“预验证”步骤中那样填充读集合和/或扫描集合,以及(ii)各实施例可运行“验证”阶段204,同时通过相对于事务的开始和结束时戳检查每一行来执行该语句。对于可重复读,在开始时戳时可见的每一行在结束时戳时也可见。对于可序列化实施例,每一行在两个时戳时具有相同的可见性(不管是可见还是不可见)。
对于确定在“输出”阶段207期间运行什么,各实施例可在“验证”阶段204期间经由输出计划或重新运行机制发现要运行哪些语句。
在“验证”阶段204期间延迟对语句的执行减少了事务的开始时戳和结束时戳之间流逝的时间,并由此降低了验证失败的风险。
对于可跳过的各输出语句,各实施例也可跳过“验证”阶段204(而不管隔离水平),并在“输出”阶段207期间运行结束时戳时的这些语句。这不将违反可重复读或可序列化语义(因为结束时戳是事务被序列化的实际时间),但它可违反快照“语义”。具体地,如果第一执行在开始时戳处运行(假设它不可被跳过,并且在修改阶段期间被执行),并且第二执行在结束时戳处运行(假设它被跳过,并且在“输出”阶段207期间被执行),则以可重复读运行相同输出语句两次的事务可由于幻像而看见不同的结果。幻像不违反可重复读语义,但不同的结果将违反快照语义。
使用以上原理,各实施例可被实现为使得语句不曾被执行多于两次。具体地,如果语句在修改阶段期间可被跳过,并且不需要验证(以快照运行),则该语句在“输出”阶段207期间可被执行一次。如果语句在修改阶段期间可被跳过,但确实需要验证(以可重复读或可序列化语义运行),则该语句被执行两次:一次在“验证”阶段204期间,且另一次在“输出”阶段207期间。如果语句在修改阶段期间不可被跳过,则该语句被执行两次:一次在修改阶段期间,且另一次在“输出”阶段207期间。该语句在“验证”阶段204期间不需要被执行,因为第一执行将已填充读集合和/或扫描集合。
在一些情况下,如果语句在“修改”阶段202或“验证”阶段204期间必须被执行,则保存结果可能比稍后再重新运行结果更便宜。是否保存结果的判定可在编译时或在运行时作出。例如,在编译时,已知用于产生单个行的标量聚集将是用于保存结果而不是重新运行语句的良好候选。在运行时,各实施例可保存第一行,并随后保证各实施例是否得到第二行。一般来说,在确定是保存结果还是重新运行语句时,一些实施例实现围绕将需要保存的数据量来进行解决的判定逻辑。如果该量可证明为很小(例如,标量聚集示例、在各实施例知道单个行将被返回的情况下为依据主键的查找表、或前N名查询(其中N很小)),则各实施例可作出编译时判定。在其他情况下,各实施例可跳过该优化,或者尝试运行时优化,以保存第一行或几个行直到各实施例达到某一确定尺寸的阈值。一旦该尺寸阈值被达到,各实施例可放弃该优化。
下面的讨论现在涉及可被执行的多个方法和方法动作。尽管这些方法动作可以以特定次序被讨论或在流程图中被例示为以特定次序发生,但是除非特别指明否则不需要任何特定排序,或者因某一动作取决于在该动作被执行之前完成的另一个动作而要求特定排序。
现在参考图4,例示出方法400。方法400可以在计算环境中实现。该方法包括用于针对在事务失败时允许该事务被自动重试的数据库运行该事务,从而使得该事务被自动重试的某些事务失败对接收作为执行该事务的结果的数据的实体不可见的动作。该方法包括通过标识其执行将引起数据库状态的改变的语句来标识事务的第一语句集合(动作402)。这些语句可例如通过标识传统的数据库修改语句来标识。注意,实体可以是查询数据库的客户端、web服务器中的中间件等等。
方法400进一步包括通过标识其执行会导致要向实体发送的数据被生成的语句来标识第二语句集合(动作404)。这些语句可例如通过标识传统的数据库选择语句来标识。
如上所述,一些传统的数据库语句有时候可包括其中对给定语句的执行将引起数据库状态的改变并导致要向实体发送的数据被生成的功能。在一些实施例中,这样的语句可被细分成各子语句,其中这些子语句被添加到不同的语句集合而非传统的数据库语句本身。由此,当在本文中提及语句时,应当领会,这样的语句实际上是从被逻辑划分成更高水平的语句中创建的。由此,例如,包括在第一语句集合中的语句以及包括在第二语句集合中的语句可以是更高水平语句的逻辑子部分,其中更高水平语句本身从未作为整体被添加到任一集合。
方法400进一步包括执行第一语句集合以改变数据库状态,同时执行用于明确排除对第二语句集合中的至少一部分语句的执行的操作(动作406)。例如,如以上所示出的,“修改”阶段202被执行。
方法400进一步包括与第一语句集合分开地运行第二语句集合,以生成要向实体发送的数据(动作408)。例如,如以上所示出的,这可作为“输出”阶段207的一部分来执行。
方法400可通过以下方式来执行:在第一轮中,逐步通过包括第一语句集合和第二语句集合的语句集合。当来自第一语句集合的语句被标识出时,该语句被执行。被标识为来自第二语句集合的任何语句在第一轮中被丢弃。在第二轮中,该方法逐步通过包括第一语句集合和第二语句集合的语句集合,并且当来自第二语句集合的语句被标识出时,该方法执行来自第二语句集合的语句,并丢弃而不执行来自第一语句集合的任何语句。这是以上描述的重新运行实施例的示例。
方法400可通过以下方式来执行:在第一轮中,逐步通过包括第一语句集合和第二语句集合的语句集合,并且当来自第一语句集合的语句被标识出时,执行该语句,并且当来自第二语句集合的语句被标识出时,该语句与执行来自第二语句集合的语句所需的参数一起被保存以供稍后执行。单独地,方法400包括使用执行来自第二语句集合的语句所需的参数来执行任何保存的来自第二语句集合的语句。这在以上被示为输出计划实施例的示例。在一些这样的实施例中,该方法可进一步包括将时戳和语句标识符与任何保存的语句一起保存。
方法400可进一步包括标识来自第二语句集合的需要被执行的语句以标识来自第一集合的需要被执行的一个或多个语句。结果,方法400可包括执行来自第一语句集合的语句,但在数据库状态改变后,丢弃该结果。丢弃的语句可稍后被运行以生成要向实体发送的数据。
方法400可进一步包括标识来自第二语句集合的需要被执行的语句以标识来自第一集合的需要被执行的一个或多个语句。结果,方法400可包括执行来自第二语句集合的语句。然而,在该情况下,该结果可被保存,而不是被丢弃,使得该语句不需要被重新运行以生成该结果。这对于小型和/或非确定性结果尤其有用。保存的结果可随后作为输出阶段(参见“输出”阶段207)的一部分被发送给实体。由此,例如,方法400可进一步包括确定来自第二语句集合的在被执行时产生非确定性结果的语句。作为确定来自第二语句集合的在被执行时产生非确定性结果的语句的结果,方法400可包括执行来自第二语句集合的该语句,并保存该结果。这可被实现,而不是重新运行来自第二语句集合的语句并向实体发送保存的结果。
方法400可进一步包括标识作为执行来自第一语句集合的一个或多个语句的结果而发生的错误。尽管一些错误可对实体隐藏,但在该示例中,错误是实体将通常知晓的错误。方法400可进一步包括标识来自第二集合的通常在错误之前已运行的语句。由此,例如,语句集合可被按顺序排序,其中一些数据库状态改变语句与数据库查询语句散布在一起以生成供向客户端返回的数据。由此,在执行各数据库状态改变语句时,某些查询语句可被跳过,直到引起客户端应当知晓的错误的数据库状态改变语句。方法400进一步包括运行来自第二语句集合的通常将在错误之前已经运行的语句以产生要向实体发送的数据。例如,在顺序列表中的在错误引起语句之前被跳过的查询语句可被运行。该方法可进一步包括向实体发送结果。
而且,各方法可由计算机系统实现,计算机系统包括一个或多个处理器以及诸如计算机存储器这样的计算机可读介质。特别是,计算机存储器可以存储计算机可执行指令,该计算机可执行指令在由一个或多个处理器执行时使各种功能得以被执行,诸如各实施例中记载的动作。
本发明的各实施例可以包括或使用包括计算机硬件的专用或通用计算机,如以下更详细讨论的。本发明范围内的各实施例也包括用于实现或存储计算机可执行指令和/或数据结构的实体及其他计算机可读介质。这样的计算机可读介质可以是可由通用或专用计算机系统访问的任何可用介质。存储计算机可执行指令的计算机可读介质是物理存储介质。承载计算机可执行指令的计算机可读介质是传输介质。由此,作为示例而非限制,本发明的各实施例可包括至少两种显著不同的计算机可读介质:物理计算机可读存储介质和传输计算机可读介质。
物理计算机存储介质包括RAM、ROM、EEPROM、CD-ROM或其他光盘存储(如CD、DVD等)、磁盘存储或其他磁存储设备、或可用于存储计算机可执行指令或数据结构形式的所需程序代码装置且可由通用或专用计算机访问的任何其他介质。
“网络”被定义为使得电子数据能够在计算机系统和/或模块和/或其它电子设备之间传输的一个或多个数据链路。当信息通过网络或另一个通信连接(硬连线、无线、或者硬连线或无线的组合)传输或提供给计算机时,该计算机将该连接适当地视为传输介质。传输介质可以包括可用于携带计算机可执行指令或数据结构形式的期望程序代码装置并可被通用或专用计算机访问的网络和/或数据链路。以上的组合也被包括在计算机可读介质的范围内。
此外,在到达各种计算机系统组件之后,计算机可执行指令或数据结构形式的程序代码装置可从传输计算机可读介质自动转移到物理计算机可读存储介质(或者相反)。例如,通过网络或数据链路接收到的计算机可执行指令或数据结构可被缓存在网络接口模块(例如,“NIC”)内的RAM中,并且然后最终被传输至计算机系统RAM和/或计算机系统处的较不易失性的计算机可读物理存储介质。因此,计算机可读物理存储介质可以被包括在同样(或甚至主要)利用传输介质的计算机系统组件中。
计算机可执行指令包括例如使通用计算机、专用计算机或专用处理设备执行某一功能或一组功能的指令和数据。计算机可执行指令可以是例如二进制代码、诸如汇编语言之类的中间格式指令、或甚至源代码。尽管用结构特征和/或方法动作专用的语言描述了本主题,但可以理解,所附权利要求书中定义的主题不必限于上述特征或动作。相反,上述特征和动作是作为实现权利要求的示例形式而公开的。
本领域的技术人员将理解,本发明可以在具有许多类型的计算机系统配置的网络计算环境中实践,这些计算机系统配置包括个人计算机、台式计算机、膝上型计算机、消息处理器、手持式设备、多处理器系统、基于微处理器的或可编程消费电子设备、网络PC、小型计算机、大型计算机、移动电话、PDA、寻呼机、路由器、交换机等等。本发明也可在其中通过网络链接(或者通过硬连线数据链路、无线数据链路,或者通过硬连线和无线数据链路的组合)的本地和远程计算机系统两者都执行任务的分布式系统环境中实施。在分布式系统环境中,程序模块可以位于本地和远程存储器存储设备二者中。
替换地或另选地,此处描述的功能可以至少部分由一个或多个硬件逻辑组件来执行。例如、但非限制,可使用的硬件逻辑组件的说明性类型包括现场可编程门阵列(FPGA)、程序专用的集成电路(ASIC)、程序专用的标准产品(ASSP)、片上系统系统(SOC)、复杂可编程逻辑器件(CPLD)、等等。
本发明可以以其他具体形式来体现,而不背离其精神或特征。所描述的实施例在所有方面都应被认为仅是说明性而非限制性的。从而,本发明的范围由所附权利要求书而非前述描述指示。落入权利要求书的等效方案的含义和范围内的所有改变应被权利要求书的范围所涵盖。
Claims (8)
1.一种对于一个或多个事务的计算机实现的方法,所述一个或多个事务各自由定义必须在原子上全部成功或全部失败的函数的语句集合定义,所述计算机实现的方法包括:
将每一事务的执行划分成两个不同的阶段,其中在数据库服务器用一个或多个处理器执行的第一阶段期间,所述计算机实现的方法包括:
通过标识不需要与客户端计算系统的交互并且在事务失败的情况下可被自动重试而无需客户端计算系统知晓所述失败的语句来标识所述事务的第一语句集合;
通过标识在被执行时将导致要向所述客户端计算系统发送的数据被生成的语句来标识所述事务的第二语句集合;
尝试一个或多个事务的所述第一语句集合的执行,并且在尝试所述第一语句集合的所述执行时,排除所述第二语句集合的执行;
通过重新执行失败的事务的所述第一语句集合中的一个或多个语句来自动重试任何失败的事务,而无需使得所述客户端计算系统知晓该失败的事务;
在需要时使用失败的事务的自动重新执行来成功地执行一个或多个事务的所述第一语句集合,一个或多个事务的所述第一语句集合的成功执行在所述数据库服务器处改变所述数据库状态;以及
在所述数据库服务器及其一个或多个处理器执行的第二阶段中,所述计算机实现的方法包括:
对于其第一语句集合被成功执行的每一事务,分开地执行所述第二语句集合以生成要向所述客户端计算系统发送的数据,由此失败的并且已经被重试的事务对接收所生成的数据的所述客户端计算系统不可见。
2.如权利要求1所述的计算机实现的方法,其特征在于,所述方法通过以下方式执行:
在第一轮中,逐步通过包括所述第一语句集合和所述第二语句集合的语句集合,并且当来自所述第一语句集合的语句被标识出时,执行该语句,同时丢弃而不执行来自所述第二语句集合的任何语句;以及
在第二轮中,逐步通过包括所述第一语句集合和所述第二语句集合的所述语句集合,并且当来自所述第二语句集合的语句被标识出时,执行该语句,同时丢弃而不执行来自所述第一语句集合的任何语句。
3.如权利要求1所述的计算机实现的方法,其特征在于,所述方法通过以下方式执行:
逐步通过包括所述第一语句集合和所述第二语句集合的语句集合,并且当来自所述第一语句集合的语句被标识出时,执行该语句,并且当来自所述第二语句集合的语句被标识出时,将该语句与执行来自所述第二语句集合的该语句所需的参数一起保存以供稍后执行;以及
使用执行来自所述第二语句集合的语句所需的参数来分开地执行任何保存的来自所述第二语句集合的语句。
4.如权利要求3所述的计算机实现的方法,其特征在于,进一步包括将时戳和语句标识符与保存的语句一起保存。
5.如权利要求1所述的计算机实现的方法,其特征在于,进一步包括标识来自所述第二语句集合的需要被执行的语句以标识来自所述第一语句集合的需要被执行的一个或多个语句,并且作为结果,执行来自所述第二语句集合的语句,但在来自所述第一语句集合的所述一个或多个语句被标识出后丢弃该结果,使得来自所述第二语句集合的语句稍后被重新运行以生成要向所述客户端计算系统发送的数据。
6.如权利要求1所述的计算机实现的方法,其特征在于,进一步包括标识来自所述第二语句集合的需要被执行的语句以标识来自所述第一语句集合的需要被执行的一个或多个语句,并且作为结果,执行来自所述第二语句集合的语句,并保存该结果,并且不是重新运行来自所述第二语句集合的语句,而是向所述客户端计算系统发送保存的结果。
7.如权利要求1所述的计算机实现的方法,其特征在于,进一步包括确定来自所述第二语句集合的在被执行时产生非确定性结果的语句,并且作为确定来自所述第二语句集合的在被执行时产生非确定性结果的语句的结果,执行来自所述第二语句集合的语句,并保存所述非确定性结果。
8.如权利要求1所述的计算机实现的方法,其特征在于,进一步包括:
标识作为执行来自所述第一语句集合的一个或多个语句的结果而发生的错误,所述错误是所述客户端计算系统将通常知晓的错误;
标识来自所述第二语句集合的通常在所述错误之前已经运行的语句;
运行来自所述第二语句集合的通常将在所述错误之前已经运行的语句以产生要向所述客户端计算系统发送的结果;以及
向所述客户端计算系统发送所述结果。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US14/188,145 US10474645B2 (en) | 2014-02-24 | 2014-02-24 | Automatically retrying transactions with split procedure execution |
US14/188,145 | 2014-02-24 | ||
PCT/US2015/016723 WO2015127150A1 (en) | 2014-02-24 | 2015-02-20 | Automatically retrying transactions with split procedure execution |
Publications (2)
Publication Number | Publication Date |
---|---|
CN106030533A CN106030533A (zh) | 2016-10-12 |
CN106030533B true CN106030533B (zh) | 2019-04-16 |
Family
ID=52633642
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201580010207.XA Active CN106030533B (zh) | 2014-02-24 | 2015-02-20 | 通过拆分过程执行自动重试事务 |
Country Status (4)
Country | Link |
---|---|
US (1) | US10474645B2 (zh) |
EP (1) | EP3111325B1 (zh) |
CN (1) | CN106030533B (zh) |
WO (1) | WO2015127150A1 (zh) |
Families Citing this family (29)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8818963B2 (en) | 2010-10-29 | 2014-08-26 | Microsoft Corporation | Halloween protection in a multi-version database system |
US11615115B2 (en) | 2010-12-23 | 2023-03-28 | Mongodb, Inc. | Systems and methods for managing distributed database deployments |
US10977277B2 (en) | 2010-12-23 | 2021-04-13 | Mongodb, Inc. | Systems and methods for database zone sharding and API integration |
US11544288B2 (en) | 2010-12-23 | 2023-01-03 | Mongodb, Inc. | Systems and methods for managing distributed database deployments |
US10346430B2 (en) | 2010-12-23 | 2019-07-09 | Mongodb, Inc. | System and method for determining consensus within a distributed database |
US9805108B2 (en) | 2010-12-23 | 2017-10-31 | Mongodb, Inc. | Large distributed database clustering systems and methods |
US8996463B2 (en) | 2012-07-26 | 2015-03-31 | Mongodb, Inc. | Aggregation framework system architecture and method |
US10262050B2 (en) | 2015-09-25 | 2019-04-16 | Mongodb, Inc. | Distributed database systems and methods with pluggable storage engines |
US10997211B2 (en) | 2010-12-23 | 2021-05-04 | Mongodb, Inc. | Systems and methods for database zone sharding and API integration |
US10872095B2 (en) | 2012-07-26 | 2020-12-22 | Mongodb, Inc. | Aggregation framework system architecture and method |
US11403317B2 (en) | 2012-07-26 | 2022-08-02 | Mongodb, Inc. | Aggregation framework system architecture and method |
US11544284B2 (en) | 2012-07-26 | 2023-01-03 | Mongodb, Inc. | Aggregation framework system architecture and method |
US9195712B2 (en) | 2013-03-12 | 2015-11-24 | Microsoft Technology Licensing, Llc | Method of converting query plans to native code |
US11410176B2 (en) * | 2014-06-27 | 2022-08-09 | Tigergraph, Inc. | System and method for enhanced detection of fraudulent electronic transactions |
US10025518B1 (en) * | 2014-09-30 | 2018-07-17 | EMC IP Holding Company LLC | Methods and apparatus for system having change identification |
US10496528B2 (en) * | 2015-08-31 | 2019-12-03 | Microsoft Technology Licensing, Llc | User directed partial graph execution |
US11222034B2 (en) * | 2015-09-15 | 2022-01-11 | Gamesys Ltd. | Systems and methods for long-term data storage |
US10673623B2 (en) | 2015-09-25 | 2020-06-02 | Mongodb, Inc. | Systems and methods for hierarchical key management in encrypted distributed databases |
US10846411B2 (en) | 2015-09-25 | 2020-11-24 | Mongodb, Inc. | Distributed database systems and methods with encrypted storage engines |
US10671496B2 (en) | 2016-05-31 | 2020-06-02 | Mongodb, Inc. | Method and apparatus for reading and writing committed data |
US10621050B2 (en) | 2016-06-27 | 2020-04-14 | Mongodb, Inc. | Method and apparatus for restoring data from snapshots |
US10853440B2 (en) | 2017-06-19 | 2020-12-01 | Salesforce.Com, Inc. | Displaying an object having a link to a database record in response to a user selection of a highlighted reference |
US11586696B2 (en) * | 2017-06-19 | 2023-02-21 | Salesforce, Inc. | Enhanced web browsing |
US10866868B2 (en) * | 2017-06-20 | 2020-12-15 | Mongodb, Inc. | Systems and methods for optimization of database operations |
US10795877B2 (en) * | 2017-12-04 | 2020-10-06 | Sap Se | Multi-version concurrency control (MVCC) in non-volatile memory |
US10942910B1 (en) | 2018-11-26 | 2021-03-09 | Amazon Technologies, Inc. | Journal queries of a ledger-based database |
US20210240658A1 (en) * | 2020-02-03 | 2021-08-05 | Oracle International Corporation | Handling faulted database transaction records |
US11436212B2 (en) * | 2020-09-22 | 2022-09-06 | Snowflake Inc. | Concurrent transaction processing in a database system |
US11468032B2 (en) | 2020-09-22 | 2022-10-11 | Snowflake Inc. | Concurrent transaction processing in a database system |
Family Cites Families (88)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5557798A (en) | 1989-07-27 | 1996-09-17 | Tibco, Inc. | Apparatus and method for providing decoupling of data exchange details for providing high performance communication between software processes |
US5369761A (en) * | 1990-03-30 | 1994-11-29 | Conley; John D. | Automatic and transparent denormalization support, wherein denormalization is achieved through appending of fields to base relations of a normalized database |
US5317731A (en) | 1991-02-25 | 1994-05-31 | International Business Machines Corporation | Intelligent page store for concurrent and consistent access to a database by a transaction processor and a query processor |
US5812996A (en) | 1994-07-12 | 1998-09-22 | Sybase, Inc. | Database system with methods for optimizing query performance with a buffer manager |
CA2167790A1 (en) * | 1995-01-23 | 1996-07-24 | Donald S. Maier | Relational database system and method with high data availability during table data restructuring |
US5875334A (en) | 1995-10-27 | 1999-02-23 | International Business Machines Corporation | System, method, and program for extending a SQL compiler for handling control statements packaged with SQL query statements |
US5870758A (en) * | 1996-03-11 | 1999-02-09 | Oracle Corporation | Method and apparatus for providing isolation levels in a database system |
US6026379A (en) * | 1996-06-17 | 2000-02-15 | Verifone, Inc. | System, method and article of manufacture for managing transactions in a high availability system |
US6009425A (en) | 1996-08-21 | 1999-12-28 | International Business Machines Corporation | System and method for performing record deletions using index scans |
US6237001B1 (en) * | 1997-04-23 | 2001-05-22 | Oracle Corporation | Managing access to data in a distributed database environment |
JPH1173398A (ja) | 1997-06-03 | 1999-03-16 | Toshiba Corp | 分散ネットワークコンピューティングシステム、同システムに用いられる情報交換装置、同システムに用いられるセキュリティ機能を有する情報交換方法、この方法を格納したコンピュータ読取り可能な記憶媒体 |
US6310888B1 (en) | 1997-12-30 | 2001-10-30 | Iwork Software, Llc | System and method for communicating data |
US6122644A (en) | 1998-07-01 | 2000-09-19 | Microsoft Corporation | System for halloween protection in a database system |
US6813251B1 (en) | 1999-07-27 | 2004-11-02 | Intel Corporation | Split Transaction protocol for a bus system |
US6665701B1 (en) | 1999-08-03 | 2003-12-16 | Worldcom, Inc. | Method and system for contention controlled data exchange in a distributed network-based resource allocation |
US6496976B1 (en) * | 1999-08-05 | 2002-12-17 | Unisys Corporation | Method and system for dynamic recompilation of statements of a first language embedded in a program having statements of a second language |
US20090265249A1 (en) | 1999-11-05 | 2009-10-22 | American Express Travel Related Services Company, Inc. | Systems and methods for split tender transaction processing |
US6971096B1 (en) | 2000-05-19 | 2005-11-29 | Sun Microsystems, Inc. | Transaction data structure for process communications among network-distributed applications |
US6990513B2 (en) | 2000-06-22 | 2006-01-24 | Microsoft Corporation | Distributed computing services platform |
US6442552B1 (en) * | 2000-06-30 | 2002-08-27 | Hewlett-Packard Company | Method and apparatus for implementing three tier client asynchronous transparency |
US7024413B2 (en) | 2000-07-26 | 2006-04-04 | International Business Machines Corporation | Method of externalizing legacy database in ASN.1-formatted data into XML format |
US7089244B2 (en) * | 2000-11-15 | 2006-08-08 | North Dakota State University | Multiversion read-commit order concurrency control |
US20020072941A1 (en) * | 2000-12-07 | 2002-06-13 | Ibm Corporation | Method and apparatus for processing electronic records for physical transactions |
WO2002069561A2 (en) | 2001-02-27 | 2002-09-06 | Visa International Service Association | Distributed quantum encrypted pattern generation and scoring |
US6772363B2 (en) * | 2001-03-12 | 2004-08-03 | Hewlett-Packard Development Company, L.P. | Fast failover database tier in a multi-tier transaction processing system |
US7111023B2 (en) * | 2001-05-24 | 2006-09-19 | Oracle International Corporation | Synchronous change data capture in a relational database |
US6961760B2 (en) | 2001-07-17 | 2005-11-01 | International Business Machines Corporation | Transforming data automatically between communications parties in a computing network |
AU2002334721B2 (en) | 2001-09-28 | 2008-10-23 | Oracle International Corporation | An index structure to access hierarchical data in a relational database system |
US20040205562A1 (en) | 2001-12-27 | 2004-10-14 | G.E. Information Services, Inc. | System and method for transforming documents to and from an XML format |
WO2003065252A1 (en) | 2002-02-01 | 2003-08-07 | John Fairweather | System and method for managing memory |
US7305386B2 (en) | 2002-09-13 | 2007-12-04 | Netezza Corporation | Controlling visibility in multi-version database systems |
US7103597B2 (en) * | 2002-10-03 | 2006-09-05 | Mcgoveran David O | Adaptive transaction manager for complex transactions and business process |
US20040083465A1 (en) | 2002-10-28 | 2004-04-29 | Weijia Zhang | Method and system for connecting to an application programming interface |
US20040111698A1 (en) | 2002-12-06 | 2004-06-10 | Anew Technology Corporation | System and method for design, development, and deployment of distributed applications that share data from heterogeneous and autonomous sources over the Web |
US7093231B2 (en) | 2003-05-06 | 2006-08-15 | David H. Alderson | Grammer for regular expressions |
US7739223B2 (en) | 2003-08-29 | 2010-06-15 | Microsoft Corporation | Mapping architecture for arbitrary data models |
US7805713B2 (en) | 2003-10-27 | 2010-09-28 | Hewlett-Packard Development Company, L.P. | Transaction processing architecture |
US7711730B2 (en) * | 2003-12-22 | 2010-05-04 | International Business Machines Corporation | Method of returning data during insert statement processing |
US7774780B2 (en) | 2004-05-21 | 2010-08-10 | Bea Systems, Inc. | Systems and methods for automatic retry of transactions |
US7877377B2 (en) | 2004-06-03 | 2011-01-25 | International Business Machines Corporation | Dropping tautological predicates from SQL queries for reusability |
US7707195B2 (en) | 2004-06-29 | 2010-04-27 | Microsoft Corporation | Allocation locks and their use |
US7774319B2 (en) | 2004-08-11 | 2010-08-10 | Sap Ag | System and method for an optimistic database access |
US7756882B2 (en) | 2004-10-01 | 2010-07-13 | Microsoft Corporation | Method and apparatus for elegant mapping between data models |
US7694284B2 (en) | 2004-11-30 | 2010-04-06 | International Business Machines Corporation | Shareable, bidirectional mechanism for conversion between object model and XML |
US7640230B2 (en) | 2005-04-05 | 2009-12-29 | Microsoft Corporation | Query plan selection control using run-time association mechanism |
US7505975B2 (en) * | 2005-04-14 | 2009-03-17 | Bea Systems, Inc. | Use of transaction context to select single database instance for global transaction |
US7437361B2 (en) * | 2005-04-14 | 2008-10-14 | Bea Systems, Inc. | Use of retry period in an application server to ensure that status information is sent from first to second database instance |
US7496726B1 (en) * | 2005-04-18 | 2009-02-24 | Sun Microsystems, Inc. | Controlling contention via transactional timers among conflicting transactions issued by processors operating in insistent or polite mode |
GB0511774D0 (en) | 2005-06-09 | 2005-07-20 | Nds Ltd | Extended service information 2 (XSI-2) |
US7702658B2 (en) * | 2006-01-27 | 2010-04-20 | International Business Machines Corporation | Method for optimistic locking using SQL select, update, delete, and insert statements |
US7552439B2 (en) * | 2006-03-28 | 2009-06-23 | Honeywell International Inc. | System and method to allow non-deterministic execution in a process control system |
US7934207B2 (en) | 2006-12-19 | 2011-04-26 | Microsoft Corporation | Data schemata in programming language contracts |
US7676525B2 (en) | 2007-07-02 | 2010-03-09 | Microsoft Corporation | Efficient query processing of merge statement |
US7984043B1 (en) | 2007-07-24 | 2011-07-19 | Amazon Technologies, Inc. | System and method for distributed query processing using configuration-independent query plans |
US8171475B2 (en) * | 2007-08-29 | 2012-05-01 | International Business Machines Corporation | Intelligent retry method using remote shell |
US9053005B2 (en) | 2008-01-02 | 2015-06-09 | Micron Technology, Inc. | Recycled version number values in flash memory |
US8347061B2 (en) | 2008-04-29 | 2013-01-01 | International Business Machines Corporation | Method for protecting user-managed memory using an exception |
US8473946B2 (en) * | 2008-07-03 | 2013-06-25 | Vmware, Inc. | Efficient recording and replaying of non-deterministic instructions in a virtual machine and CPU therefor |
US8037040B2 (en) * | 2008-08-08 | 2011-10-11 | Oracle International Corporation | Generating continuous query notifications |
GB2467530A (en) * | 2009-02-03 | 2010-08-11 | Eservglobal Uk Ltd | Credit transfer between telecommunications networks |
US8402318B2 (en) * | 2009-03-24 | 2013-03-19 | The Trustees Of Columbia University In The City Of New York | Systems and methods for recording and replaying application execution |
US8225139B2 (en) * | 2009-06-29 | 2012-07-17 | Oracle America, Inc. | Facilitating transactional execution through feedback about misspeculation |
US8224806B2 (en) | 2009-07-31 | 2012-07-17 | Hewlett-Packard Development Company, L.P. | Selectivity-based optimized-query-plan caching |
US8484176B2 (en) | 2009-09-08 | 2013-07-09 | Ricoh Co., Ltd. | Multi-provider forms processing system with retry upon failure |
US8688683B2 (en) | 2009-11-30 | 2014-04-01 | Business Objects Software Ltd. | Query plan reformulation |
US8396831B2 (en) | 2009-12-18 | 2013-03-12 | Microsoft Corporation | Optimistic serializable snapshot isolation |
US9043769B2 (en) | 2009-12-28 | 2015-05-26 | Hyperion Core Inc. | Optimization of loops and data flow sections in multi-core processor environment |
WO2011108695A1 (ja) * | 2010-03-05 | 2011-09-09 | 日本電気株式会社 | 並列データ処理システム、並列データ処理方法及びプログラム |
CN101834845B (zh) | 2010-03-26 | 2012-11-28 | 南京联创科技集团股份有限公司 | 基于tcp短连接的soap客户端协议封装方法 |
US8464261B2 (en) * | 2010-03-31 | 2013-06-11 | Oracle International Corporation | System and method for executing a transaction using parallel co-transactions |
US9251214B2 (en) | 2010-04-08 | 2016-02-02 | Microsoft Technology Licensing, Llc | In-memory database system |
DE112011100536T5 (de) * | 2010-05-18 | 2013-01-31 | International Business Machines Corporation | Transaktionsverarbeitungssystem |
US9031969B2 (en) * | 2010-06-29 | 2015-05-12 | Oracle International Corporation | Guaranteed in-flight SQL insert operation support during an RAC database failover |
JP5536568B2 (ja) * | 2010-07-01 | 2014-07-02 | インターナショナル・ビジネス・マシーンズ・コーポレーション | トランザクションを集約して処理する方法、システム、およびプログラム |
US8473953B2 (en) * | 2010-07-21 | 2013-06-25 | International Business Machines Corporation | Batching transactions to apply to a database |
US8818963B2 (en) | 2010-10-29 | 2014-08-26 | Microsoft Corporation | Halloween protection in a multi-version database system |
US9063969B2 (en) * | 2010-12-28 | 2015-06-23 | Sap Se | Distributed transaction management using optimization of local transactions |
US8983985B2 (en) * | 2011-01-28 | 2015-03-17 | International Business Machines Corporation | Masking sensitive data of table columns retrieved from a database |
US8930344B2 (en) | 2011-02-04 | 2015-01-06 | Hewlett-Packard Development Company, L.P. | Systems and methods for holding a query |
US9767214B2 (en) | 2011-06-29 | 2017-09-19 | Oracle International Corporation | Technique and framework to provide diagnosability for XML query/DML rewrite and XML index selection |
US9251194B2 (en) * | 2012-07-26 | 2016-02-02 | Microsoft Technology Licensing, Llc | Automatic data request recovery after session failure |
US8572051B1 (en) * | 2012-08-08 | 2013-10-29 | Oracle International Corporation | Making parallel execution of structured query language statements fault-tolerant |
US9195712B2 (en) | 2013-03-12 | 2015-11-24 | Microsoft Technology Licensing, Llc | Method of converting query plans to native code |
CN103294966B (zh) | 2013-03-12 | 2016-02-24 | 中国工商银行股份有限公司 | 一种数据库的安全访问控制方法以及系统 |
US9760596B2 (en) * | 2013-05-13 | 2017-09-12 | Amazon Technologies, Inc. | Transaction ordering |
US20150006466A1 (en) * | 2013-06-27 | 2015-01-01 | Andreas Tonder | Multiversion concurrency control for columnar database and mixed OLTP/OLAP workload |
US9336258B2 (en) * | 2013-10-25 | 2016-05-10 | International Business Machines Corporation | Reducing database locking contention using multi-version data record concurrency control |
US10437788B2 (en) * | 2015-12-08 | 2019-10-08 | Sap Se | Automatic detection, retry, and resolution of errors in data synchronization |
-
2014
- 2014-02-24 US US14/188,145 patent/US10474645B2/en active Active
-
2015
- 2015-02-20 WO PCT/US2015/016723 patent/WO2015127150A1/en active Application Filing
- 2015-02-20 CN CN201580010207.XA patent/CN106030533B/zh active Active
- 2015-02-20 EP EP15708984.8A patent/EP3111325B1/en active Active
Also Published As
Publication number | Publication date |
---|---|
US20150242439A1 (en) | 2015-08-27 |
EP3111325A1 (en) | 2017-01-04 |
EP3111325B1 (en) | 2017-12-06 |
CN106030533A (zh) | 2016-10-12 |
WO2015127150A1 (en) | 2015-08-27 |
US10474645B2 (en) | 2019-11-12 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN106030533B (zh) | 通过拆分过程执行自动重试事务 | |
US11003689B2 (en) | Distributed database transaction protocol | |
US11151079B2 (en) | Merging database operations for serializable transaction execution | |
US9547685B2 (en) | Halloween protection in a multi-version database system | |
Ports et al. | Serializable snapshot isolation in PostgreSQL | |
CN111143389B (zh) | 事务执行方法、装置、计算机设备及存储介质 | |
CN102934114B (zh) | 用于文件系统的检查点 | |
US9576038B1 (en) | Consistent query of local indexes | |
US10754854B2 (en) | Consistent query of local indexes | |
Wu et al. | Transaction healing: Scaling optimistic concurrency control on multicores | |
US11243820B1 (en) | Distributed deadlock detection and resolution in distributed databases | |
Gligoric et al. | Model checking database applications | |
Rahmani et al. | CLOTHO: directed test generation for weakly consistent database systems | |
Haeusler et al. | ChronoSphere: a graph-based EMF model repository for IT landscape models | |
Botros et al. | High Performance MySQL | |
Waudby et al. | Towards testing ACID compliance in the LDBC social network benchmark | |
US11720482B1 (en) | Retrying failed test cases in software testing using parallel threads | |
Vandevoort et al. | Robustness against read committed: A free transactional lunch | |
Lodde et al. | Data consistency in transactional business processes | |
Hatia | Leveraging formal specification to implement a database backend | |
Gan | Exploring Transaction Anomalies under Weak Isolation Levels for General Database Applications | |
Ko et al. | Ultraverse: Efficient Retroactive Operation for Attack Recovery in Database Systems and Web Frameworks | |
Yuan | Effective Randomized Concurrency Testing with Partial Order Methods | |
Rahmani | Symbolic Analysis of Weak Concurrency Semantics in Modern Database Programs | |
Ibrahim et al. | Mathematical Model and Algorithms for some Type of Concurrency Control Problems in Database Applications |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |