《具有快照隔离的基于约束的一致性.pdf》由会员分享,可在线阅读,更多相关《具有快照隔离的基于约束的一致性.pdf(18页珍藏版)》请在专利查询网上搜索。
1、(10)申请公布号 CN 104252382 A (43)申请公布日 2014.12.31 CN 104252382 A (21)申请号 201410220268.6 (22)申请日 2014.05.23 13/926,186 2013.06.25 US G06F 9/46(2006.01) G06F 11/14(2006.01) (71)申请人 奥普塔姆软件股份有限公司 地址 美国加利福尼亚州 (72)发明人 D.R. 彻里顿 (74)专利代理机构 中国专利代理(香港)有限公 司 72001 代理人 张涛 陈岚 (54) 发明名称 具有快照隔离的基于约束的一致性 (57) 摘要 本发明公开了。
2、具有快照隔离的基于约束的一 致性。通过识别对于正确应用行为而言需要满足 的约束来提供并发原子事务的高效处理。利用这 些所识别的约束, 用于事务的提交处理于是可以 引用约束, 以查看在所述约束的情况下提交当前 事务是否引起问题。 如果存在与所述约束的冲突, 则事务中止。 如果不存在与所述约束的冲突, 则事 务提交。 (30)优先权数据 (51)Int.Cl. 权利要求书 1 页 说明书 12 页 附图 4 页 (19)中华人民共和国国家知识产权局 (12)发明专利申请 权利要求书1页 说明书12页 附图4页 (10)申请公布号 CN 104252382 A CN 104252382 A 1/1 。
3、页 2 1. 一种确保与数据模型有关的并发事务的一致性的方法, 所述方法包括 : 提供与所述数据模型中的数据有关的约束的集合 ; 执行至少两个事务, 其中, 所述至少两个事务中的每一个具有对应的开始时间, 并且依 赖于从开始时间之时起所述数据模型的部分或全部对应快照 ; 其中, 所述至少两个事务中的当前事务具有当前开始时间和当前目标提交时间, 并且 其中, 在所述当前开始时间之后并且在所述当前目标提交时间之前的一个或更多个中间时 间, 所述至少两个事务的一个或更多个并发事务已经提交给所述数据模型 ; 执行提交处理检查, 提交处理检查自动地确定是否能够与至少来自 a) 所述当前事务的 快照和 b。
4、) 所述一个或更多个并发事务对所述数据模型所作的改变这两者的约束的集合一 致地提交所述当前事务 ; 如果能够使得所述当前事务与约束的集合一致, 则自动地提交所述当前事务 ; 以及 如果不能使得所述当前事务与约束的集合一致, 则自动地中止所述当前事务。 2. 如权利要求 1 所述的方法, 其中, 所述提交处理检查包括 : 执行写入 - 写入冲突解决方案。 3. 如权利要求 1 所述的方法, 其中, 所述提交处理检查包括 : 根据由所述当前事务执行的操作来更新所述当前事务的快照, 以提供被更新的快照。 4. 如权利要求 1 所述的方法, 其中, 所述提交处理检查包括 : 根据由并发事务中的一个或更。
5、多个作出的所提交的改变来更新所述当前事务的快照, 以提供被合并的快照。 5. 如权利要求 4 所述的方法, 其中, 所述提交处理检查包括 : 使用所述被合并的快照来估计约束的集合中的一个或更多个断言约束。 6. 如权利要求 4 所述的方法, 其中, 所述提交处理检查包括 : 执行写入 - 写入冲突解决方案。 7. 如权利要求 1 所述的方法, 其中, 所述提交处理检查包括 : 针对所述当前事务确定所述数据模型的将要由于提交所述当前事务而作为约束的集 合中的更新约束的结果被更新的目标成员 ; 确定提交所述当前事务以及根据更新约束来更新目标成员是否与约束的集合一致。 8. 如权利要求 1 所述的方。
6、法, 其中, 通过使用公共时钟来提供所述至少两个事务中的 一些或全部的开始和提交, 以按轮次组织事务中一些或全部。 9. 如权利要求 1 所述的方法, 其中, 约束的集合包括选自包括以下项的组的一个或更 多个约束 : 断言约束、 更新约束、 异步约束以及松弛断言约束。 10. 如权利要求 1 所述的方法, 其中, 约束的集合充分地确保并发事务应用程序的正确 行为。 11. 如权利要求 1 所述的方法, 其中, 所述提交处理检查包括 : 执行用户供给的用于检 查约束的集合的代码。 12. 如权利要求 1 所述的方法, 其中, 所述提交处理检查包括 : 执行自动生成的用于检 查约束的集合的约束检查。
7、代码。 13. 如权利要求 12 所述的方法, 其中, 从约束的集合生成自动生成的约束检查代码。 权 利 要 求 书 CN 104252382 A 2 1/12 页 3 具有快照隔离的基于约束的一致性 技术领域 0001 本发明涉及事务处理。 背景技术 0002 原子事务经常用于简化并发和容错编程。 如果事务是不可分的, 则其为原子的, 以 使得用以执行事务的尝试可能仅有两种可能的结果 : 1) 事务的所有部分发生 (事务提交) ; 或者 2) 事务的各部分不发生 (事务中止) 。因此, 对于原子事务而言, 不可能有事务的部分 执行发生。 例如, 如果事务是将资金从一个账户转移到另一账户, 则。
8、高度期望该事务是原子 的, 以避免信贷应用于一个账户而在另一账户中没有对应借记的可能性 (或反之亦然) 。在 更一般的编程情况下, 由于原子事物而得到类似的优点。 0003 可以识别用于提供原子事务的两种基本方法 : 1) 就地更新 (in-place update) 和 2) 阴影拷贝 (shadow copy) 。前者通常通过锁定以防止并发更新以及撤销 (undo) 日志来实 现, 以能够在事务中止的情况下撤销改变。这还可以替代使用锁定而通过如果另一事务写 入该事务正在写入的数据 (所谓的写入 - 写入冲突) 或写入该事务正在读取的数据 (所谓的 读取 - 写入冲突) 则中止事务来开放式地。
9、实现。 0004 历史上直到最近, 考虑到大多数事务数据已经是基于盘的, 就地更新因为保持盘 布局的益处而受到偏爱。 然而, 考虑到在很多应用中读取比写入占优势, 读取锁定是明显的 开销。 此外, 读取锁定数据意味着对于被锁定数据的更新被延迟, 这实际意味着如果对应的 真实世界值在其被锁定的时间期间改变, 则其潜在地与真实世界不一致而结束。在某种意 义上, 这意味着其对于实现内部一致性的关注可能导致与外部环境的不一致性。考虑到读 取 - 写入冲突的普遍性 (prevalence) , 就地更新的开放式形式可能由于过度的中止率而受 损。 0005 在移动到存储器中的数据库的情况下, 阴影拷贝方法。
10、变得比以前更有吸引力。在 此, 更新事务使得数据的拷贝被更新、 作出修改并且然后原子地更新对该数据的根引用 (或 指针) 以引用新的 (先前阴影) 拷贝。进一步采用该方法, 事务可以从甚至其恰正在读取的 数据的快照 (即不可变的拷贝) 执行。该方法被称为快照隔离 (SI) 。该方法提供具有不由 于就地更新事务的读取 - 写入冲突而受损的附加明显益处的常规串行化事务的大多数性 质, 其中就地更新事务的读取 - 写入冲突可能招致明显的锁定开销或者在开放式实现的情 况下增加中止率。 0006 阴影拷贝在分布式实现中可能是有吸引力的, 因为其经常需要在处理执行事务时 复制数据, 由此提供数据的拷贝或快。
11、照以提供高效的本地存取。在此情况下, SI 的拷贝开 销由于保存该拷贝的存取提供本地处理而被有效地消除, 或者反过来, 本地拷贝的创建已 经有效地负担了 SI 事务机制所要求的快照的成本。该本地拷贝还可以减少处理面临包含 状态的主拷贝的处理的失效和重启, 因为其可以利用其本地快照而继续操作。 0007 遗憾的是, 在所有的执行产生好像以某种顺序的次序被执行那样的相同结果的意 义上, SI 不提供顺序一致性 (或者可串行化 (serializability) , 如其在数据库世界中被描 说 明 书 CN 104252382 A 3 2/12 页 4 述的那样) 。因为所谓的写入偏移问题, 所以出。
12、现折中行为。可以通过考虑期待事务应用被 保持的简单断言约束来图解该问题。例如, 考虑断言约束 : 39 b + c; 其中, 分离的事务 Tb 和 Tc 可以分别更新 b 和 c。如果 b 和 c 初始为 10, 则 Tb 可以将 b 更新为 20, 将 c 的快照看作 10, 而 Tc 可以将 c 更新为 20, 类似地将 b 的快照看作 10。因 为没有写入 - 写入冲突, 所以这两个事务可以均在 SI 模型中并发地提交, 而这样做引起约 束被违反。 0008 已经对该问题提出了各种解决方案, 包括确保 SI 事务的严格的可串行化, 但这些 或是在事务处理自身上导致过度开销或是由于将事务的。
13、中止率增加得远高于严格所需而 导致过度开销。 0009 所需要的是一种在保持 SI 事务的应用和实现益处的同时确保正确应用行为的手 段。 发明内容 0010 本方法基于识别对于正确应用行为而言需要被满足的约束。 在这些约束被识别的 情况下, 用于事务的提交处理可以然后引用约束并且引用并发更新以查看提交当前事务是 否在有约束的情况下引起问题。如果存在与约束的冲突, 则事务中止。如果不存在与约束 的冲突, 则事务提交。 0011 与常规的快照隔离相比, 因为本方法解决了常规快照隔离的写入偏移问题, 所以 其提供优良的语义。 0012 与对于 SI(例如可串行化的 SI) 的写入偏移问题的常规修复相。
14、比, 本方法可以提 供更高的效率 (例如减少的事务开销和 / 或更少的不必要事务中止) 。例如, 如果对数据的 要求被表达为可以作为提交处理的一部分而被检查的约束, 则可以在不中止事务的情况下 解决很多明显的写入 - 写入冲突。 附图说明 0013 图 1 示出若干事务的例示性时间线。 0014 图 2 示出根据并发更新来更新当前事务的快照以提供被合并的快照的示例。 0015 图 3 示出根据当前事务所执行的操作来更新快照的示例。 0016 图 4A 提供事务、 断言约束和更新约束的例示性示例。 0017 图 4B 是与图 4A 的示例有关的图。 0018 图 5 示出按轮次执行事务处理的示例。
15、。 具体实施方式 0019 介绍 我们通过以下操作来提供具有快照隔离 (SI) 事务的正确应用行为 : 1) 明确地指定对隐含数据模型的约束 ; 2) 如果数据模型保持这些约束, 则设计应用处理是正确的 ; 3) 作为事务提交处理的一部分对约束进行检查以确保每个约束由事务保持, 或者另外 说 明 书 CN 104252382 A 4 3/12 页 5 如果这并未被实现则中止事务。 0020 如果所有这样的约束被明确地指定, 则基础架构可以确保违反这样的约束的事务 被中止。 0021 我们认为, 如下面那样, 应用可以被设计为如果对于其数据模型所要求的约束被 保持则正确地操作。 首先, 每个应用。
16、事务被实现为读取并且写入应用状态的一系列指令, 即 其数据模型。在所有的事务模型中, 每个应用事务除了其通过该数据模型的交互之外独立 并且并发地执行。该应用处理关于用于其正确执行的数据模型作出一定的假设。可以按照 在应用事务的执行期间数据模型的将要为真的约束、 声明来捕获这些假设。 因此, 如果应用 相对于这些约束是在过程上是正确的, 并且数据模型约束在每个事务的执行期间为真, 则 应用正确地执行。 0022 要求可串行化的常规方法自身并不确保应用特定的约束成立。 其仅仅是确保如果 事务的命令式 (imperative) 代码当被执行为串行事务时维持约束, 则因为执行是可串行化 的, 即等同于。
17、串行执行, 所以该代码在由多个事务并发地执行时也维持约束的 (笨拙) 方式。 0023 与此对比, 在本工作中, 约束被明确地声明, 并且然后运用约束特定的手段以确保 它们成立, 而不是强加这种通用次序要求 (这经常相当于对于写入偏移的问题的过度破坏 的解决方案) 。 0024 在一些情况下, 输入源代码包括约束的说明。 在这样的情况下, 可以容易地自动生 成对应的约束检查代码。如果输入源代码不包括其约束的明确说明, 则经由自动程序分析 自动生成对应的约束检查代码可以是可能的。 然而, 实际上, 很有可能用户将需要为不具有 明确约束的输入源代码提供约束检查代码。 0025 利用 SI 事务确保。
18、数据模型约束 通过考虑对于写入偏移的常规解决方案, 可以展示出使用 SI 来确保约束成立的可行 性。 0026 常规解决方案有效地将每个约束具体化 (materialize) 为由更新该约束中的变量 的任何事务所更新的变量。例如, 使用更早些的示例, 将会存在比如具有所构造的名称 “约 束(39b+c)” 的变量, 其作为更新 b 或 c 的部分而递增。结果, 影响同一约束的任意两个 并发事务将具有写入 - 写入冲突, 并且它们中的至少一个将被 SI 事务机制中止。因此, 对 于事务机制而言可行的是通过这种构造来自动确保这些约束在每个事务期间成立。 0027 注意, 在很多情况下, 该方法导致。
19、不必要的中止。 例如, 继续我们更早些的示例, 如 果并发地更新a和b而它们的和仍然还小于39, 则即使将二者都提交也仍将维持约束, 但因 为在约束变量上的写入 - 写入冲突, 所以事务中的一个被不必要地中止。此外, 在最坏的情 况下, 这些 SI 事务的写入集合可能被扩展从而所有事务具有重叠的写入集合, 强制这些事 务的顺序执行。实际上, 这种构造扩展写入集合以补偿读取 - 写入冲突的检测的缺失。 0028 本方法因此提供一种提交事务的方法, 该方法基于约束的实际语义而允许更大的 并发和更少的中止 (与在所有情况下宣称写入 - 写入冲突相反) 。 0029 基本的想法是使这些约束的知识在提交。
20、时间可用, 以识别在该时间的任意冲突, 尝试解决这些冲突, 并且在假设事务不会出于其它原因 (诸如资源限制) 而被中止的情况 下, 只有这些冲突不能被解决才中止。 0030 在对该方法进一步详述之前, 我们首先澄清一些术语。并发事务是在当前事务的 说 明 书 CN 104252382 A 5 4/12 页 6 开始时间之后并且在该事务的目标提交时间之前提交给数据模型的事务。 并发更新是这样 的并发事务所执行的更新。图 1 提供一些示例以图解该术语。在此, T0 是在时间线上示出 的当前事务。事务 T1 和 T2 与 T0 并发, 而事务 T3 和 T4 并不与 T0 并发。注意, 并发的定义 。
21、与哪个事务被指明为当前事务有关。例如, 如果 T2 被当作 是当前事务, 则 T0 并不与 T2 并 发。 0031 更具体地说, 当前事务 T0 具有开始时间 t0s和当前目标提交时间 t0e。类似地, 事 务 T1、 T2、 T3 和 T4 具有对应的开始时间 t1s、 t2s、 t3s和 t4s, 并且具有对应的结束时间 t1e、 t2e、 t3e和 t4e(此时事务要么提交要么中止) 。因为 t0s =1000 则支付利息) 有益。 0049 图 4B 示出用于图 4A 的示例的约束 (左侧) 和数据模型成员 (右侧) 的维恩图。在 此, 402 是所有约束的集合, 404 是与当前事。
22、务 T1 有关的所有约束的集合, 并且 406 是作为 更新约束的约束 404 的子集。在右侧, 412 是所有数据模型成员的集合, 414 是受当前事务 T1 影响的所有数据模型成员的集合, 并且 416 是因为 T1 的相关联的更新约束所以受 T1 影 响的数据模型成员的集合。将受当前事务的更新约束影响的数据模型成员称作为 “目标成 员” 是方便的。 0050 在该示例中, 我们看到事务 T1 直接影响数据元素余额 1 和余额 2 (即, 存在资金的 转移) 。然而, 因为更新约束的原因, 所以目标成员利率 1 和利率 2 也间接地受提交事务 T1 影响。这可以被当作是用于利用相关的约束集。
23、合来检查提交当前事务的第二 (以及更高) 阶 效果的一致性的机制。因此, 提交处理检查可以包括 : 1) 针对当前事务确定数据模型的将 要由于提交当前事务而作为更新约束的结果被更新的目标成员 ; 以及 2) 确定提交当前事 务以及根据更新约束来更新目标成员是否与约束集合一致。 0051 在本工作中, 所确定的属性可以被自动更新并且在提交事务之前添加到写入集 合, 或作为提交事务的一部分。因此, 在提交时, 事务自动确保该约束被保持。如果存在未 解决的写入 - 写入冲突, 则中止事务, 即使由这样的约束解决方案引起写入中的一个或更 多个也如此。 0052 在实施例中, 指定断言约束和更新约束, 。
24、以使得更新约束不会引起断言约束被违 反。可以通过具有排除这样的违反的断言约束来实现这种情况。例如, 如果如在更早的示 例中那样由更新约束来确定变量 a1, 并且通过断言约束 a1 bprev + c; 指示更新 c 的事务可以只是使用 b 的快照值, 而不需要针对对于属性 b 的并发写入进 行检查。这种松弛约束消除了对于识别与该约束关联的读取 - 写入集合以及重新估计约束 说 明 书 CN 104252382 A 11 10/12 页 12 的需要。 0082 如由 prev 前缀所指定的先前值的定义是在当前事务的开始时间的属性的值。因 此, 如果该属性并未与当前事务并发地更新, 则其同样可以。
25、是当前值。 0083 应用逻辑可以通过能够有效地假定断言约束近似为真来使用松弛语义。 在一些情 况下, 可以紧密地估算这样的近似。例如, 考虑银行透支的情况, 假定事务在与一天相比相 对短的时间段中完成, 如果某个人在给定时间间隔内可以支取的量被限制在比如 D 美元, 则在 D 美元内断言账户未被透支是正确的。 0084 在针对开始时间和提交时间使用实时时钟的实施例中, 应用还可以获知属性的快 照值 (即在开始时间取得) 与当前时间之间的时间间隔。该获知的间隔还可以允许应用界定 断言约束表达式的不准确度。 0085 通过提供用以指定松弛断言约束的单元, 与在不允许这些松弛语义的情况下就指 定所。
26、有约束相比, 本发明的基于约束的一致性可以被提供有更高的效率。这对于可能横跨 数据模型分区边界的约束的情况而言特别为真, 因为于是松弛语义能够避免执行分布式事 务及其相关联的往返通信消息成本和延迟。 0086 事务的基于轮次的实现 并不是每个代理单独地提交事务, 替换的结构是将每个代理的事务提交绑定到由 (轮 次) 时钟所指示的系统宽度轮次完成。轮次被跨应用同步, 以使得代理直到其已经从执行其 它代理的轮次i-1的其它代理接收到与其相关的所有更新才开始处理轮次i。 通常, 这是通 过直到所有代理已经指示它们的轮次 i-1 的完成才允许任意代理进入轮次 i 来实现的。事 实上, 来自时钟的每个新。
27、轮次消息指示由代理进行新事务的开始, 还进行动作以确保其已 经接收到来自先前轮次的状态更新。代理然后完成轮次处理, 并且响应于时钟来有效地提 交事务。如果代理在给定轮次期间没有更新要执行, 则其有效地提交空事务。这带来相对 低的开销。 0087 图 5 提供被组织成轮次的事务的示意性图解。在此, 轮次 1 开始于时间 t1s并且 结束于时间 t1e, 轮次 2 开始于时间 t2s并且结束于时间 t2e, 并且轮次 3 开始于时间 t3s并 且结束于时间 t3e。期待代理 a、 b、 c 和 d 每个轮次执行一个事务 (其可以是空事务) 。事务 针对在轮次1中由代理a进行的事务被标记T1a, 针。
28、对在轮次3中由代理d进行的事务被标 记 T3d, 等等。新的轮次通常直到在所有代理已经完成先前轮次 (即通过提交或中止它们的 相应事务) 之后才开始。每个代理在轮次的开始时在逻辑上开始其事务。其实际的执行开 始可能由于对约束进行调度的处理而被延迟, 如图 5 所示。类似地, 每个代理的事务在轮次 的结束时在逻辑上完成 (即提交) 。其实际的执行可能完成得更早, 因为其与在轮次时间期 间可用的处理相比要做的事情更少。对于该一般方案的例外是可能的。例如, 图 5 上的事 务 T1b 横跨两个轮次。因此, 在相对少的事务占据多于一个的轮次的情况下, 如果大多数事 务在单个轮次内发生, 则我们将事务当。
29、作为被组织成轮次。 0088 在一个实施例中, 可以中止单独的代理 (跨越 (trans) ) 动作。在此情况下, 动作被 中止的代理要么立刻接收对于该效果的指示要么在下一轮次的开始时接收对于该效果的 指示。这是关于如何操控代理的动作的中止的应用级别决定。例如, 在一些情况下, 代理在 接下来的轮次中可能仅仅是重试事务, 或者采取替换的动作。 替换地, 可以停滞当前轮次的 完成, 直到代理已经成功地重试同一事务。 在一些情况下, 这等同于并且事实上能够被实现 说 明 书 CN 104252382 A 12 11/12 页 13 为代理失效和重启。 0089 在实施例中, 可以通过以下来实现快照。
30、行为 : 一旦新的轮次已经开始, 就在每个参 与代理处在接收上阻断更新 ; 一旦轮次完成, 就仅释放要被提供给应用代理的那些更新。 在 中止的情况下, 中止消息被发送到每个代理, 每个代理丢弃这些被阻断并被排队的更新, 确 保这些代理不看到其中发生中止的轮次的结果。如果仅丢弃中止处理所生成的更新, 则仅 该中止处理需要针对当前轮次重试其处理。否则, 所有处理复原到它们从轮次开始之时起 的状态, 并且针对当前轮次对处理进行重做。 0090 替换地, 可以生成更新消息作为将中止处理的状态复原到轮次的开始的部分, 在 该中止处理的后续重试生成提供重试处理的结果的更新消息的情况下, 这有效地复原状态 。
31、以撤销由该中止处理生成的改变。 0091 作为另一替换, 事务机制可以依赖于由中止和重试处理生成的新的消息, 在这些 消息被针对下一轮次在代理中被解除阻断并处理之前, 中止和重试处理在每个接收处理的 被阻断并排队的消息中提供对状态的更新以提供正确的净状态结果。例如, 如果第一被中 止的处理将变量 “foo” 设置为 3, 并且随后的重试将变量 “foo” 设置为 4, 则被阻断并被排 队的消息包含 “foo” 为 3 的一个设置后接 “foo” 为 4 的一个设置, 从而代理的状态中的净 结果是正确的值 (在此情况下, 即 4) 。 0092 可以通过使处理重启来操控在轮次期间的处理的失效, 。
32、使之恢复其从轮次开始之 时起的状态, 并且对轮次的处理进行重做。在此情况下, 除了有可能延迟轮次的完成之外, 失效对于事务轮次处理是透明的。 0093 在一些应用的情况下, 可能可行的是, 即使所指定的处理中的一个或更多个还未 完成它们的处理并且还未对轮次时钟作出响应, 也允许完成该轮次。 例如, 如果所指定的处 理已经指示完成最后三个轮次中的一个之内的处理, 则轮次机制可以继续。这样的处理可 能遭遇由在中间轮次中提交其事务的另一处理进行的并发更新。例如, 图 5 的事务 T1b 将 需要考虑来自事务 T1a、 T1c 和 T1d 的并发更新。 0094 在一些应用的情况下, 可以基于特定处理。
33、对于对应用正确性没有影响的状态作出 的改变, 而允许在轮次机制外部执行这样的处理的过程。 例如, 温度传感器处理可以利用连 续值之间的小的差异来周期性地更新温度。 应用逻辑可以被设计为即使这与基于轮次的事 务并发地发生 (即温度在轮次的中间显现为改变) , 也正确地进行操作。这可以是基于轮次 的计算内的并发更新的另一源。 0095 在实施例中, 存在用以指示在沿着上面描述的优化线路的轮次内的特定代理处理 的特殊操控的规定。例如, 处理可以指示是在当前轮次中需要重试事务的中止还是可以跳 到 (slip) 下一轮次。可以在登记到轮次时钟的代理处理的动作中提供该指示, 以指示其正 参与轮次, 即, 。
34、作为轮次登记处理中的参数。因此, 实施例可以允许每个应用处理在操控中 止和失效中选择不同的优化, 目的是在仍然确保应用正确性的同时使对这些事件的应用性 能的影响最小化。 0096 在基于轮次的实现的情形下, next 后缀被用于指明在下一轮次中对值进行更新。 在当前事务可能横跨多个轮次时, prev 后缀可以指代被并发地更新的值。也就是说, 该值 可以在中间轮次中的一个期间已经被更新。 0097 基于轮次的方法就用以发起的消息和提交事务这两者而言减少了事务的成本, 而 说 明 书 CN 104252382 A 13 12/12 页 14 且还减少了指定 prev 约束值的需要, 或者反过来减少了未能做到这样的成本。 说 明 书 CN 104252382 A 14 1/4 页 15 图 1 说 明 书 附 图 CN 104252382 A 15 2/4 页 16 图 2 图 3 说 明 书 附 图 CN 104252382 A 16 3/4 页 17 图 4A 图 4B 说 明 书 附 图 CN 104252382 A 17 4/4 页 18 图 5 说 明 书 附 图 CN 104252382 A 18 。