在使用商用服务器的无状态体系结构中的事务保护的制作方法

文档序号:6569144阅读:184来源:国知局
专利名称:在使用商用服务器的无状态体系结构中的事务保护的制作方法
技术领域
本发明涉及在网络上提供的事务,更特别地涉及在网络上提供的 所述事务的可靠存储。
背景技术
在因特网上的事务正在快速增长。不仅购物站点使用事务,而且 许多其他站点也这样做用以提供和维护数据。然而,在诸如因特网的 网络上实现的事务的一个问题是事务过程本身的可靠性。在许多情况 下允许事务被过账(post)两次是不可接受的,其中如果事务实际上已 经过账但是客户端或始发者从未接收到过账的响应并重复事务,就会 发生两次过账。由于这个问题,已经发展了复杂的技术来防止双重过 账并且通常需要昂贵而且复杂的计算机硬件。
通常考虑需要对每次事务进行全状态跟踪(full state tracking), 使得如果发生响应或其他通信的任何损失,可以确定事务的准确状态。 然而,这要求由客户端和服务器端两者维护状态。
一个可选方案是无状态环境,其中客户端在错误检测之后重新递 交任何事务。然而,无状态环境增加了上面讨论的双重过账问题。在 那些情况中,为了更加可靠,优选的是事务和数据库位于相同的逻辑 单元上,或者是单个单元或者集群(cluster)。示范性系统包括各种主 机、Hewlett-Packard NonStop服务器和Oracle集群。这样的问题是所 述系统非常昂贵。在较大的系统中这更严重。通过将服务器分为两个 部分、即事务前端和数据库后端,可以获得一些成本降低。但是这两 个部分必须仍然是集群的或者如上所列的冗余系统,用以具有所需要 的可靠性,因此成本降低不必非常大。
这与商用服务器(commodity server)相反,诸如使用Intel体系
结构构造的并且运行诸如Linux或Windows之类的不可靠或非容错操 作系统的那些服务器。但是运行诸如MySQL、 Postgres或SQL服务器 的不太可定标并且非容错数据库的Linux和Windows商用硬件系统完 全不能提供处理高可靠性事务系统所需要的数据完整性类型。因此唯 一实际的可选方案是或者放弃事务可靠性的无状态体系结构并且使用 不是如此可接受的其他技术,或者是利用昂贵的硬件环境。
希望能够在使用不太昂贵的硬件的无状态体系结构中执行事务的 可靠承诺用以对于较低的成本实现较高的吞吐量,同时保持高可靠性 并消除事务的重复。

发明内容
在根据本发明的系统中,可以使用商用硬件以充当数据库系统的 前端,同时保持无状态体系结构中事务提交可靠性。根据本发明的系 统使用单独的表来跟踪并确定特定的事务是否已经先前被提交给主事 务数据库。优选地,这个单独的表、即无状态事务协议(STP (stateless transaction protocol))表使用与用户和特定请求两者都有关的索引来 确定特定的事务是否已经先前被提交并且对于该事务是否已提供了响 应。通过在实际开始对主事务数据库的任何事务之前检查该表,可以 确定事务是否已经先前被提交给主事务数据库。如果是,只提供同样 存储在STP表中的响应并且不再需要原始事务。然而,如果STP表没 有指示事务已经被先前提交,那么提交该事务并且在STP表中产生条 目用以指示该提交。在优选实施例中主事务数据库表条目以及进入 STP表中的条目被相同的事务保护,从而减少了潜在的竟态条件。
通过利用这个单独的表来跟踪事务的先前提交,不大可靠的可是 相当便宜的商用服务器硬件可以被至少用作连接到客户端的前端用以 减少计算机系统的整体成本。在某些实施例中,数据库库服务器本身 可以是具有商用数据库的商用服务器而不是主机或如现有技术中的类 似物。


图1A和IB是根据现有技术的事务数据库系统的图示。
图2是根据本发明的利用商用硬件的事务数据库系统的第一实施例。
图3是根据本发明的利用商用硬件的事务数据库系统的第二实施 例。
图4是根据本发明的利用商用硬件的事务数据库系统的第三实施例。
图5A和5B是根据本发明的可靠提交过程的流程图。 图6是用在图5A和5B的过程中的表的图示。
具体实施例方式
图1A是现有技术的事务数据库系统的图示。客户端100连接到主 机/NonStop服务器/Oracle集群102 (此后为了简便仅称作主机)。在 主机102内部运行的软件包括事务前端模块104、数据库代码模块105 和数据库106,诸如主机数据库、SQL/MX或者Oracle (此后称为主 机数据库),其包含与事务相关的数据表107。为了通信的目的,客户 端100与事务前端模块104通信,并且然后事务前端模块104与数据库 代码模块105通信,数据库代码模块105又与数据库106通信,用以实 际提交和存储事务。应理解的是,数据库代码模块105可以是数据库 106的组成部分,但是为了便于理解本发明,数据库已经被分成执行前 处理和后处理功能的数据库代码模块、以及执行实际的表输入和查找 的数据库核(称为数据库106)。
在正常操作中可能的是,在事务提交之后、即在写操作实际上已 经在数据库106中发生之后,从事务前端104到客户端100的响应可能 丢失。在大多数没有接收到响应的情况下,客户端100将重试响应, 这将向数据库106提交又一写操作,从而提供了重复的条目。这是要 避免的情况。
现有技术的这个有状态主机体系结构的部分问题是随着客户端以 及从而事务数量增加,主机102中所必需的模块数量增长相当快。因 为许多能力被事务前端模块104用于执行通信操作,不认为这是对主 机102的最高效使用。因此,为了处理非常大容量的操作,必然导致 非常大的成本以维持有状态体系结构。出现的问题是为什么不简单地 把事务前端104从主机102中取出用以帮助减小成本?根据现有技术 的有状态协议,这无非是为响应失败(也即如果分成不同的单元,在 数据库代码模块105和事务前端模块104之间)提供了又一个可能性。 因此这只能潜在地加重问题,因为需要跟踪更多的状态,而不是解决 问题。
通过将事务前端模块104移到单独的前端集群105,如图IB所示, 可以部分地解决所述可定标性(scalability)和可靠性。但是由于该移 动还是到集群,定标仍限于集群极限并且由于集群的冗余本质每事务 的成本仍旧高。
在图2中示出了根据本发明的系统,该系统确实使事务前端模块 104移动到外部,而没有集群,从而以较低的成本提供了最大的可定标 性。两个客户端100链接到运行事务前端模块104的商用硬件服务器 108。第三客户端100连接到也运行事务前端模块104的第二商用硬件 服务器IIO。优选地,这些商用硬件服务器108和110运行Linux操作 系统,虽然如果需要也可以使用Windows或其他操作系统。商用服务 器108和110以及前端模块104然后连接到主机112,该主机同前面一 样运行主机数据库106。从前端模块104接收通信并且与数据库106通 信的不同的数据库代码模块111在这个实施例中运行。在这个和根据 现有技术的潜在体系结构之间的差别在于数据库代码模块111中所使 用的协议已经被改变用以确保不形成双重转变(transition)。这将在 下面进行更详细的描述。此外,在数据库106中提供新的无状态事务 协议(STP)表113。该新的无状态事务协议表与数据库代码模块111 协作并且将在下面进行更详细的描述。
图3是根据本发明的第二实施例。再次客户端100与商用服务器 108和110通信。然而,在这种情况下,主机112已经被商用服务器114 替代,该商用服务器114不运行主机数据库106而是运行商用数据库 116或类似的,示例是MySQL、 Postgres和SQL服务器。基于根据本 发明的提交过程的操作,虽然应理解的是由于其他可定标性、可用性 和可维护性考虑,主机环境可能是适当的,但如果可以以别的方式维 持对服务器114的正常运行时间要求,则不需要主机112的可靠性。
图4示出了根据本发明的第三实施例。在这种情况下,客户端IOO 直接连接到商用服务器118,商用服务器118包括事务前端模块104、 数据库代码模块111和数据库116。在这种情况下,只使用一个服务器 118,因为客户端IOO的数量足够小,使得可以满足通信要求而不需要 提供单独的服务器来执行通信任务。在具有大量客户端的完全定标 (scaled)的环境中,如图2或图3中的体系结构是优选的。
如上所述,在事务系统中主要问题之一是写事务的双重提交的可 能性。在如图5A和5B中所示的根据本发明的系统中,客户端100在 步骤500提供新的事务到事务前端模块104。事务前端模块104然后执 行必要的处理操作并且提供该新的事务给数据库代码模块111,在步骤 502执行额外操作,设置开始事务比特用以指示这是新事务。在步骤 504,数据库代码模块lll接收该事务。数据库代码模块lll的第一操 作是在步骤506确定这是读还是写事务。如果是读事务,则控制进行 到步骤507,其中执行根据现有技术的正常处理。本发明的焦点在于写 操作,其中可能发生双重提交操作的可能性。
如果是写操作,控制进行到步骤508,其中事务中的请求信息被哈 希(hash)用以提供唯一值.优选地,请求信息包括要放入数据库中 的实际数据。这优选地被哈希成64或128比特值用以节省空间并提供 代表该数据的唯一值。控制然后进行到步骤509,其中用户信息以类似 的方式被哈希。在优选实施例中,用户信息包括允许用户跟踪的用户 标识、请求该操作或多个操作所针对的表名或多个表名、以及在正被 影响的该表或多个表中的特定列。如果有多个表或列,作为任务操作 的一部分提供每一表或列用以提供筒单的哈希值。类似地,从每个表 和列的每个请求值发展请求哈希。再次,这优选利用各种哈希技术被 哈希成64或128比特值。应理解的是,如果希望的话可以使用其他值, 使得既保持了唯一性又优化了存储值。在步骤510执行哈希之后,控 制进行到步骤512,用以检查STP 113表来确定用户哈希值是否已经存 在于STP表113中。这通过数据库代码模块111向数据库106或116 提供询问来实现。在所有类似情况中执行这种类型的操作并且此后为 清楚起见省略了该操作。如果是,控制进行到步骤512用以确定请求 哈希是否也存在于STP表113中。如果在步骤510或512中有关的哈 希不存在,则控制进行到步骤514,其中测试值被设置为假值。如果在 步骤512中请求哈希存在,其中先前已经确定用户哈希存在,则这表 明试图要提交的事务实际上已经被提交并且不应当被重新提交,也即 是双重事务请求。控制进行到步骤515用以从STP表113中检索来自 先前所提交的操作的响应。在步骤516测试值被设置为真。
在步骤514或516之后,控制进行到步骤518,用以确定是否已经 确定出双重事务。如果是,控制进行到步骤520,其中已经设置的事务 开始比特被清除并且在这种情况下已经从STP表113中检索到的响应
被返回事务前端模块104,该事务前端模块104然后将该响应返回到客 户端100。
如果在步骤518没有确定出双重事务,控制进行到步骤522,其中 实际上将事务提供给数据库106或116,并且接收响应用以指示数据库 106或116的操作是否已经成功。如果是,那么控制进行到步骤526用 以确定用户哈希值是否已经存在于STP表113中。如果是,控制进行 到步驟528,其中在STP表113中只是更新请求哈希和已从数据库106 或116所接收的响应。由于用户哈希已经存在,在那里先前请求哈希 的值和响应值只需要被更新。然而,如果用户哈希不存在,控制进行 到步骤530,其中用户哈希值、请求哈希值和响应被插入到STP表113 中。在完成步骤528或530之后,在步骤532评价对更新或插入操作的 响应。如果给STP表113提供值的操作不成功,则控制进行到步骤534, 其中重新运行STP操作。控制进行到步骤536,这也是控制从步骤524 中的不成功插入所进行到的步骤。在步骤536,重新运行数据库操作本 身,使得在这种情况下STP操作和数据库操作本身都从未被提交。控 制进行到步骤538,其中通过事务前端模块104向客户端100返回错误。 通常,然后将重试事务。如果重试所述事务,则在STP表113中没有 条目,并且没有副本,因为它们没有被提交并且因此这应该是正常的 重试响应情况。
如果在步骤532中向STP表的信息提供是成功的,则控制进行到 步骤540,其中为事务值本身和为STP表113值提供提交请求。这些 都被封装在对数据库106或116的单个事务中,使得不会产生竟态条 件。因此在步骤540,数据库106或116实际上提交事务请求值和STP 表113值给其相应的表。控制进行到步骤520,其中完成事务、清除开 始比特并且返回肯定响应。
因此,STP表113被用于跟踪由特定用户所尝试的上一写事务的 值,使得不会发生双重提交操作。对于大多数情况来说,认为在STP 表110中跟踪来自给定用户的单个事务是适当的,因为通常两个事务 不会是来自单个客户端的未完成的。然而,必要时可以使用多条目表, 利用刚使用过的代替技术等来更新给定用户的表值。
图6示出了 STP表113的表结构的优选实施例。主键是用户哈希 值,备用键(alternate key)是请求哈希值,并且每行中的第三条目是
响应、即当最初提交事务时从数据库核所提供的响应。
因此可以看出使用这个过程允许仅单一地提交事务,而没有双重 提交能力,因为如果事务实际上被提交并且然后在返回客户端的系统 中的任何位置会发生响应丢失,并且客户端接着马上重试,该双重提 交被检测并且响应只是被重新提供,而不需要实际上执行全操作。这 允许事务前端、即具有最大可定标性要求的部件被移动到商用硬件, 而不需要集群。依赖于其他要求,主机或商用服务器和相关的数据库 可以结合事务前端的商用硬件被使用。
根据上面的描述应理解的是,在不脱离本发明的真实精神的前提 下可以以本发明的各种实施例的方式做出修改和变化。本说明书中的 描述仅是为了举例说明的目的,并不应在限制的意义上来解释。本发 明的范围仅由随附权利要求书的语言来限定。
权利要求
1. 一种用于防止从客户端到数据库双重提交事务的方法,该方法包括提供表用以跟踪所提交的事务,该表包括用于识别事务的值和指示对提交事务的响应的值的条目;提供要提交到数据库的新事务并且接收事务响应;如果在提供新事务时接收到成功的响应,则提供识别新事务的值和事务响应到该表并且接收响应;如果在提供识别新事务的值和事务响应到该表时接收到成功的响应,提交新事务到数据库并且提交识别新事务的值和事务值到该表;以及提供事务响应,用于在提交之后传递给客户端。
2. 权利要求l的方法,其中识别新事务的值以识别用户的值和识别新事务中的数据的值为基础。
3. 权利要求2的方法,其中识别用户的值是用户标识、数据库中 的被请求的表、以及数据库中的被请求的列的哈希。
4. 权利要求2的方法,其中识别新事务中的数据的值是数据的哈希。
5. 权利要求4的方法,其中识别用户的值是用户标识、数据库中 的被请求的表、以及数据库中的被请求的列的哈希。
6. 权利要求2的方法,其中提供识别新事务的值到该表包括 确定具有与识别新事务的用户的值相同的、识别用户的值的事务是否存在;如果存在这种事务,在更新操作中提供识别新事务中的数据的值 和事务响应;以及如果这种事务不存在,在插入操作中提供识别用户的值和识别新 事务中的数据的值和事务响应。
7. 权利要求l的方法,还包括如果在提供新事务时所接收的响应不成功,重新运行数据库中的 事务操作;如果在提供识别新事务的值和事务响应时所接收的响应不成功, 重新运行对表的操作以及数据库中的事务操作;以及如果发生了任何重新运行,提供错误响应用于在重新运行之后传递给客户端。
8. —种用于防止从客户端到数据库双重提交事务的方法,该方法 包括提供表用于跟踪所提交的事务,该表包括识别事务的值和指示对 提交事务的响应的值的条目; 从客户端接收新事务;将识别事务的值的表中的条目和识别新事务的值进行比较;以及 如果在识别新事务的值与识别事务的表中的值之间匹配,不提供 要提交到数据库的新事务。
9. 权利要求8的方法,还包括如果在识别新事务的值与识别事务的表中的值之间匹配,提供与表中的事务相关联的响应用于传递给客户端。
10. 权利要求8的方法,其中识别事务的值以识别用户的值和识别新事务中的数据的值为基础。
11. 权利要求10的方法,其中识别用户的值是用户标识、数据库 中的被请求的表、以及数据库中的被请求的列的哈希。
12. 权利要求10的方法,其中识别新事务中的数据的值是数据的 哈希。
13. 权利要求12的方法,其中识别用户的值是用户标识、数据库 中的被请求的表、以及数据库中的被请求的列的哈希。
14. 一种用于防止从客户端到数据库双重提交事务的方法,该方 法包括提供表用以跟踪所提交的事务,该表包括用于识别事务的值和指 示对提交事务的响应的值的条目; 从客户端接收新事务;将识别事务的值的表中的条目和识别新事务的值进行比较; 如果在识别新事务的值与识别事务的表中的值之间匹配,不提供要提交到数据库的新事务,并且提供与表中的事务相关联的响应用于 传递给客户端;如果在识别新事务的值与识别事务的表中的值之间不匹配,提供 要提交到数据库的新事务并且接收事务响应;如果在提交新事务时接收到成功的响应,提供识别新事务的值和 事务响应到该表并且接收响应;如果在提供识别新事务的值和事务响应到该表时接收到成功的响 应,提交新事务到数据库并且提交识别新事务的值和事务值到该表;以及提供事务响应用于在提交之后传递给客户端。
15. 权利要求14的方法,其中识别事务的值以识别用户的值和识别新事务中的数据的值为基础。
16. 权利要求15的方法,其中识别用户的值是用户标识、数据库 中的被请求的表、以及数据库中的被请求的列的哈希。
17. 权利要求15的方法,其中识别新事务中的数据的值是数据的 哈希。
18. 权利要求17的方法,其中识别用户的值是用户标识、数据库 中的被请求的表、以及数据库中的被请求的列的哈希。
19. 权利要求15的方法,其中提供识别新事务的值到该表包括 确定具有与识别新事务的用户的值相同的、识别用户的值的事务是否存在;如果存在这种事务,在更新操作中提供识别新事务中的数据的值和事务响应;以及如果这种事务不存在,在插入操作中提供识别用户的值和识别新 事务中的数据的值和事务响应。
20. 权利要求14的方法,还包括如果在提供新事务时所接收的响应不成功,重新运行数据库中的事务操作;如果在提供识别新事务的值和事务响应时所接收的响应不成功,重新运行对表的操作以及数据库中的事务操作;以及如果发生了任何重新运行,提供错误响应用于在重新运行之后传 递给客户端。
21. —种用于防止从客户端到数据库双重提交事务的系统,具有执 行与客户端的通信的前端模块,该系统包括数据库服务器,其耦合到商用服务器并且包括耦合到前端模块的 数据库代码模块和耦合到数据库代码模块的数据库,其中数据库包括表用以跟踪所提交的事务,该表包括用于识别事务的值和指示对提交事务的响应的值的条目;以及 其中数据库代码模块提供要提交到数据库的新事务并且接收事务响应; 如果在提供新事务时,接收到成功的响应,提供识别新事务的值 和事务响应到该表并且接收响应;如果在提供识别新事务的值和事务响应到该表时接收到成功的响应,提交新事务到数据库并且提交识别新事务的值和事务值到该表; 以及提供事务响应用于在提交之后传递给前端模块。
22. 权利要求21的系统,其中数据库服务器是商用服务器。
23. 权利要求21的系统,其中数据库服务器是主机、NonStop服 务器或Oracle集群之一。
24. 权利要求21的系统,该系统还包括商用服务器,用于耦合到客户端并且接收来自客户端的新事务, 该商用服务器包括前端模块并且耦合到数据库服务器。
25. 权利要求21的系统,其中有多个客户端,该系统还包括 多个商用服务器,用于耦合到多个客户端并且接收来自多个客户端的新事务,多个商用服务器的每一个都包括前端模块用以执行与多 个客户端中的至少一部分的通信,其中多个客户端被分布在多个商用 服务器之中,其中数据库服务器耦合到多个商用服务器的每一个并且数据库代 码模块耦合到前端模块的每一个。
26. 权利要求21的系统,其中识别新事务的值以识别用户的值和 识别新事务中的数据的值为基础。
27. 权利要求26的系统,其中识别用户的值是用户标识、数据库 中的被请求的表、以及数据库中的被请求的列的哈希。
28. 权利要求26的系统,其中识别新事务中的数据的值是数据的 哈希。
29. 权利要求28的系统,其中识别用户的值是用户标识、数据库 中的被请求的表、以及数据库中的被请求的列的哈希。
30. 权利要求26的系统,其中提供识别新事务的值到该表包括 确定具有与识别新事务的用户的值相同的、识别用户的值的事务是否存在;如果存在这种事务,在更新操作中提供识别新事务中的数据的值 和事务响应;以及如果这种事务不存在,在插入操作中提供识别用户的值和识别新 事务中的数据的值和事务响应。
31. 权利要求25的系统,其中数据库代码模块还 如果在提供新事务时所接收的响应不成功,重新运行数据库中的事务操作;如果在提供识别新事务的值和事务响应时所接收的响应不成功, 请求重新运行对表的操作以及数据库中的事务操作;以及如果发生了任何重新运行,在重新运行之后提供错误响应给客户。
32. —种用于防止从客户端到数据库双重提交事务的系统,具有 执行与客户端的通信的前端模块,该系统包括数据库服务器,其耦合到商用服务器并且包括耦合到前端模块的 数据库代码模块和耦合到数据库代码模块的数据库,其中数据库包括表用于跟踪所提交的事务,该表包括识别事务的 值和指示对提交事务的响应的值的条目;以及 其中数据库代码模块 从客户端接收新事务;将识别事务的值的表中的条目和识别新事务的值进行比较;以及 如果在识别新事务的值与识别事务的表中的值之间匹配,不提供要提交到数据库的新事务。
33. 权利要求32的系统,其中数据库代码模块还 如果在识别新事务的值与识别事务的表中的值之间匹配,提供与表中的事务相关联的响应用于传递给前端模块。
34. 权利要求32的系统,其中识别事务的值以识别用户的值和识别新事务中的数据的值为基础。
35. 权利要求34的系统,其中识别用户的值是用户标识、数据库 中的被请求的表、以及数据库中的被请求的列的哈希。
36. 权利要求34的系统,其中识别新事务中的数据的值是数据的 哈希。
37. 权利要求36的系统,其中识别用户的值是用户标识、数据库 中的被请求的表、以及数据库中的被请求的列的哈希。
38. 权利要求32的系统,该系统还包括商用服务器,用于耦合到客户端并且接收来自客户端的新事务, 该商用服务器包括前端模块并且耦合到数据库服务器。
39. 权利要求32的系统,其中有多个客户端,该系统还包括 多个商用服务器,用于耦合到多个客户端并且接收来自多个客户端的新事务,多个商用服务器中的每一个都包括前端模块用以执行与 多个客户端中的至少一部分的通信,其中多个客户端分布在多个商用 服务器之中,其中数据库服务器耦合到多个商用服务器中的每一个并且数据库 代码模块耦合到前端模块中的每一个。
40. —种用于防止从客户端到数据库双重提交事务的系统,具有 执行与客户端的通信的前端模块,该系统包括数据库服务器,其耦合到商用服务器并且包括耦合到前端模块的 数据库代码模块和耦合到数据库代码模块的数据库,其中数据库包括表用以跟踪所提交的事务,该表包括用于识别事 务的值和指示对提交事务的响应的值的条目;以及其中数据库代码模块从客户端接收新事务;将识别事务的值的表中的条目和识别新事务的值进行比较; 如果在识别新事务的值与识别事务的表中的值之间匹配,不提供要提交到数据库的新事务,并且提供与表中的事务相关联的响应给客户端;如果在识别新事务的值与识别事务的表中的值之间不匹配,提供 要提交到数据库的新事务并且接收事务响应;如果在提交新事务时接收到成功的响应,提供识别新事务的值和 事务响应到该表并且接收响应;如果在提供识别新事务的值和事务响应到该表时接收到成功的响 应,提交新事务到数据库并且提交识别新事务的值和事务值到该表; 以及提供事务响应用于在提交之后传递给前端模块。
41. 权利要求40的系统,其中识别事务的值以识别用户的值和识别新事务中的数据的值为基础。
42. 权利要求41的系统,其中识别用户的值是用户标识、数据库 中的被请求的表、以及数据库中的被请求的列的哈希。
43. 权利要求41的系统,其中识别新事务中的数据的值是数据的 哈希。
44. 权利要求43的系统,其中识别用户的值是用户标识、数据库 中的被请求的表、以及数据库中的被请求的列的哈希。
45. 权利要求41的系统,其中提供识别新事务的值到该表包括 确定具有与识别新事务的用户的值相同的、识别用户的值的事务是否存在;如果存在这种事务,在更新操作中提供识别新事务中的数据的值和事务响应;以及如果这种事务不存在,在插入操作中提供识别用户的值和识别新 事务中的数据的值和事务响应。
46. 权利要求40的系统,其中数据库代码模块还 如果在提供新事务时所接收的响应不成功,请求重新运行数据库中的事务操作;如果在提供识别新事务的值和事务响应时所接收的响应不成功, 请求重新运行对表的操作以及数据库中的事务操作;以及如果发生了任何重新运行,提供错误响应用于在重新运行之后传 递给客户端。
47. 权利要求40的系统,该系统还包括商用服务器,用于耦合到客户端并且接收来自客户端的新事务, 该商用服务器包括前端模块并且耦合到数据库服务器。
48. 权利要求40的系统,其中有多个客户端,该系统还包括 多个商用服务器,用于耦合到多个客户端并且接收来自多个客户端的新事务,多个商用服务器中的每一个都包括前端模块用以执行与 多个客户端中的至少一部分的通信,其中多个客户端分布在多个商用 服务器之中,其中数据库服务器耦合到多个商用服务器中的每一个并且数据库 代码模块耦合到前端模块中的每一个。
49. 一种计算机可读介质或媒介,具有存储在其中的计算机可执 行指令用于应用,其执行用以防止从客户端到数据库双重提交事务的 以下方法,该方法包括提供表用以跟踪所提交的事务,该表包括用于识别事务的值和指 示对提交事务的响应的值的条目;提供要提交到数据库的新事务并且接收事务响应;如果在提供新事务时接收到成功的响应,提供识别新事务的值和 事务响应到该表并且接收响应;如果在提供识别新事务的值和事务响应到该表时接收到成功的响应,提交新事务到数据库并且提交识别新事务的值和事务值到该表; 以及提供事务响应用于在提交之后传递给客户端。
50. 权利要求49的计算机可读介质或媒介,其中识别新事务的值 以识别用户的值和识别新事务中的的数据的值为基础。
51. 权利要求50的计算机可读介质或媒介,其中识别用户的值是 用户标识、数据库中的被请求的表、以及数据库中的被请求的列的哈 希。
52. 权利要求50的计算机可读介质或媒介,其中识别新事务中的 数据的值是数据的哈希。
53. 权利要求52的计算机可读介质或媒介,其中识别用户的值是 用户标识、数据库中的被请求的表、以及数据库中的被请求的列的哈 希。
54. 权利要求50的计算机可读介质或媒介,其中提供识别新事务 的值到该表包括确定具有与识别新事务的用户的值相同的、识别用户的值的事务 是否存在;如果存在这种事务,在更新操作中提供识别新事务中的数据的值 和事务响应;以及如果这种事务不存在,在插入操作中提供识别用户的值和识别新 事务中的数据的值和事务响应。
55. 权利要求49的计算机可读介质或媒介,该方法还包括 如果在提供新事务时所接收的响应不成功,重新运行数据库中的 事务操作;如果在提供识别新事务的值和事务响应时所接收的响应不成功, 重新运行对表的操作以及数据库中的事务操作;以及如果发生了任何重新运行,提供错误响应用于在重新运行之后传 递给客户端。
56. —种计算机可读介质或媒介,具有存储在其中的计算机可执 行指令用于应用,其执行用于防止从客户端到数据库双重提交事务的 以下方法,该方法包括提供跟踪所提交的事务的表,该表包括识别事务的值和指示对提 交事务的响应的值的条目; 从客户端接收新事务;将识别事务的值的表中的条目和识别新事务的值进行比较;以及 如果在识别新事务的值与识别事务的表中的值之间匹配,不提供要提交到数据库的新事务。
57. 权利要求56的计算机可读介质或媒介,该方法还包括 如果在识别新事务的值与识别事务的表中的值之间匹配,提供与表中的事务相关联的响应用于传递给客户端。
58. 权利要求56的计算机可读介质或媒介,其中识别事务的值以识别用户的值和识别新事务中的数据的值为基础。
59. 权利要求58的计算机可读介质或媒介,其中识别用户的值是 用户标识、数据库中的被请求的表、以及数据库中被请求的列的哈希。
60. 权利要求58的计算机可读介质或媒介,其中识别新事务中的 数据的值是数据的哈希。
61. 权利要求60的计算机可读介质或媒介,其中识别用户的值是 用户标识、数据库中的被请求的表、以及数据库中的被请求的列的哈 希。
62. —种计算机可读介质或媒介,具有存储在其中的计算机可执 行指令用于应用,其执行用于防止从客户端到数据库双重提交事务的 以下方法,该方法包4舌提供表用以跟踪所提交的事务,该表包括用于识别事务的值和指 示对提交事务的响应的值的条目; 从客户端接收新事务;将识别事务的值的表中的条目和识别新事务的值进行比较; 如果在识别新事务的值与识别事务的表中的值之间匹配,不提供要提交到数据库的新事务,并且提供与表中的事务相关联的响应用于传递给客户端;如果在识别新事务的值与识别事务的表中的值之间不匹配,提供要提交到数据库的新事务并且接收事务响应;如果在提交新事务时接收到成功的响应,提供识别新事务的值和 事务响应到该表并且接收响应;如果在提供识别新事务的值和事务响应到该表时接收到成功的响应,提交新事务到数据库并且提交识别新事务的值和事务值到该表; 以及提供事务响应用于在提交之后传递给客户端。
63. 权利要求62的计算机可读介质或媒介,其中识别事务的值以 识别用户的值和识别新事务中的数据的值为基础。
64. 权利要求63的计算机可读介质或媒介,其中识别用户的值是 用户标识、数据库中的被请求的表、以及数据库中的被请求的列的哈 希。
65. 权利要求63的计算机可读介质或媒介,其中识别新事务中数 据的值是数据的哈希。
66. 权利要求65的计算机可读介质或媒介,其中识别用户的值是 用户标识、数据库中的被请求的表、以及数据库中的被请求的列的哈 希。
67. 权利要求63的计算机可读介质或媒介,其中提供识别新事务 的值到该表包括确定具有与识别新事务的用户的值相同的、识别用户的值的事务 是否存在;如果存在这种事务,在更新操作中提供识别新事务中的数据的值和事务响应;以及如果这种事务不存在,在插入操作中提供识别用户的值和识别新 事务中的数据的值和事务响应。
68. 权利要求62的计算机可读介质或媒介,该方法还包括 如果在提供新事务时所接收的响应不成功,重新运行数据库中的事务操作;如果在提供识别新事务的值和事务响应时所接收的响应不成功, 重新运行对表的操作以及数据库中的事务操作;以及如果发生了任何重新运行,提供错误响应用于在重新运行之后传 递给客户端。
全文摘要
公开了一种系统,其中商用硬件可以用于至少充当对数据库系统的前端,同时维持事务提交可靠性。提供单独的表,用以跟踪事务之前是否已经被提交。优选地,这个单独的无状态事务协议(STP)表使用与用户和特定请求有关的索引用以确定特定的事务之前是否已经被提交。通过在提供事务到主事务数据库之前检查该表,可以确定该事务之前是否已经被提交。如果是,只是提供存储在STP表中的响应。如果不是,那么提交事务并且在STP表中产生条目用以指示提交。在优选实施例中,主事务数据库表条目和进入STP表的条目利用相同的事务来提交。
文档编号G06F7/00GK101390044SQ200680036539
公开日2009年3月18日 申请日期2006年7月21日 优先权日2005年8月8日
发明者D·B·格雷 申请人:西姆德斯克技术公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1