首页> 中国专利> 更新数据库中的多条数据记录

更新数据库中的多条数据记录

摘要

在具有至少一个数据库和第一服务器的数据库系统中更新多条数据记录包括创建第一会话以及在第一会话内将由该数据库存储的多条数据记录加载到第一服务器的存储器中。在第一会话期间在第一服务器的存储器中更新多条数据记录中的至少第一和第二数据记录。数据库事务机制将在更新至少第一和第二数据记录之后的多条数据记录回写到数据库,数据库事务机制确保所有更新后的数据库记录要么都被提交要么都不被提交。数据库事务机制包括对在数据库中存储的第一和第二数据记录的写锁定。

著录项

说明书

技术领域

本发明总地涉及计算机和计算机软件,并且尤其涉及用于更新数据库中的多条数据记录的方法、系统和计算机程序产品。

背景技术

数据库具有存储在其中的多条数据记录。存储在数据库内的数据记录可能是只读的,或者可能被写入命令改变。在更多的时候,数据库可被许多不同的远程用户访问。锁定机制防止不同用户同时改变数据记录。

数据库事务允许以一致的方式对多条单独的数据记录实现更新。数据库事务中包含的所有数据记录要么都被更新,要么都不被更新。在数据库事务期间,该事务中包含的所有数据记录都被锁定。因此,一次过多事务或持续时间过长的事务可能影响数据库的性能。

发明内容

因此,需要不影响数据库性能的用于更新数据库中的多条数据记录的改进的系统、方法和计算机程序产品。

根据第一方面,提供了一种更新数据库系统中的多条数据记录的方法。该数据库系统包括至少一个数据库和第一服务器。根据该方法,在第一服务器中创建第一会话。在第一会话内,将由数据库存储的多条数据记录加载到第一服务器的存储器中。该方法还包括在第一会话期间更新第一服务器的存储器中的所述多条数据记录中的至少第一数据记录和第二数据记录,以及在更新至少第一数据记录和第二数据记录之后启动针对所述多条数据记录的数据库事务机制以将更新后的数据记录写入到所述数据库,所述数据库事务机制确保所有更新后的数据库记录要么都被提交要么都不被提交。数据库事务机制包括对在所述数据库中存储的第一数据记录和第二数据记录的写锁定。在提交更新后的数据库记录之后,在第一服务器中关闭第一会话。

另外的方面包括:

-在不对所述数据库中的所述多条数据记录设置写锁定的情况下加载和更新所述多条数据记录

-更新至少第一数据记录和第二数据记录还包括将所述多条数据记录中的至少一个设置为活动数据记录和将更新应用于设置为活动数据记录的数据记录。

在另一方面,该方法还包括向另一数据库发送请求。

在另一方面,上述任一方法包括在第一会话内创建新数据记录,其中所述新数据记录与所述多条数据记录一起提交。

在另一方面,创建新数据记录包括合并第一数据记录和第二数据记录。

在另一方面,上述任一方法包括:在与第一会话同时运行的第一服务器或第二服务器处的第二会话内,将由所述数据库存储的至少第一数据记录加载到第一服务器的存储器或第二服务器的存储器中,和在第二会话内更新第一服务器或第二服务器的存储器中的至少第一数据记录,同时第一数据记录也在第一会话内被更新,和在将更新后的第一数据记录从第一会话重写到所述数据库之后,响应于将在第二会话内更新的第一数据记录重写到所述数据库的提交尝试,在所述事务机制期间采用重写一致性解决机制。

在另一方面,重写一致性解决机制是以下各项之一:拒绝将在第二会话内更新的第一数据记录重写到所述数据库的提交尝试,从所述数据库重新加载第一数据记录并继续第二会话,以及将在第二会话中更新的更新后的第一数据记录与从第二会话重写到所述数据库的第一数据记录合并。

在另一方面,一种服务器被配置为:在第一服务器中创建第一会话;在第一会话内将由数据库存储的多条数据记录加载到第一服务器的存储器中;在第一会话期间更新第一服务器的存储器中的所述多条数据记录中的至少第一数据记录和第二数据记录;在更新至少第一数据记录和第二数据记录之后启动针对所述多条数据记录的数据库事务机制以将更新后的数据记录写入到数据库,所述数据库事务机制确保所有更新后的数据库记录要么都被提交要么都不被提交,其中所述数据库事务机制包括对在所述数据库中存储的第一数据记录和第二数据记录的写锁定;在提交更新后的数据库记录后,关闭第一服务器中的第一会话。

在另一方面,提供了一种用于更新数据库中的多条数据记录的计算机程序,其包括程序代码,该程序代码当由第一服务器的一个或多个处理器执行时使这些处理器:在第一服务器中创建第一会话;在第一会话内将由数据库存储的多条数据记录加载到第一服务器的存储器中;在第一会话期间更新第一服务器的存储器中的所述多条数据记录中的至少第一数据记录和第二数据记录;在更新至少第一数据记录和第二数据记录之后启动针对所述多条数据记录的数据库事务机制以将更新后的数据记录写入到数据库,所述数据库事务机制确保所有更新后的数据库记录要么都被提交要么都不被提交,其中所述数据库事务机制包括对在所述数据库中存储的第一数据记录和第二数据记录的写锁定;在提交更新后的数据库记录后,关闭第一服务器中的第一会话。换言之,提供了一种包括程序代码指令的计算机程序,当所述程序在计算机上执行时,这些程序代码指令用于执行上述任何方法。

附图说明

附图示出了各种实施例,并且与上面给出的本发明的一般描述以及下面给出的这些实施例的详细描述一起用于说明这些实施例。

[图1]以简化图示出了示例性数据库系统;

[图2]以简化图示出加载和提交数据记录;

[图3]是示出本文描述的数据记录更新方法的流程图。

[图4]将通过两个并发会话更新数据记录可视化。

[图5]是根据一些实施例的计算机器的内部组件的图解表示。

具体实施方式

图1示出了示例性数据库系统1的简化图。数据库系统1可包括数据库10、第一服务器12A、第二服务器12B和另外的计算机系统14。

数据库10可以是任何数据库,例如

数据库系统1包括两个服务器12A和12B。数据库系统1可包括更多的服务器。数据库系统1可以仅包括一个服务器。一个或多个服务器12A和12B可以远离数据库10。服务器12A和12B可能能够经由双向通信线路访问数据库10。服务器12A和12B可以经由例如因特网的通信网络访问数据库10。服务器12A和12B可以彼此远离。服务器12A和12B可以彼此独立。服务器12A和/或服务器12B可被包括在数据处理系统中。

如图所示的数据库系统1包括计算机系统14。将会明白,数据库系统1不一定包括计算机系统14。计算机系统14可以是另一个数据库。计算机系统14可以是包括软件程序的服务器,该软件程序实现例如预订(booking)引擎、预定(reservation)引擎或任何其他应用程序引擎。服务器12A和12B可被配置为访问计算机系统14。数据记录的更新可以取决于发送到计算机系统14的客户端请求。

图2示出了数据库系统1的细节。图2示出了服务器12A和数据库10。数据库系统1可以限于服务器12A和数据库10。数据记录16A、16B、....16G可以存储在数据库10中。用户(例如,在计算机系统14上运行的应用程序)可能打算更新在数据库10中存储的几个数据记录。用户可能具有如下要求:要么对数据记录的所有更新都被实现,要么没有更新被实现。用户可以使用服务器12A。用户可以在服务器12A处创建第一会话。第一会话可以允许用户从数据库10加载任意数量的数据记录。第一会话可以提示用户指示要加载的数据记录。用户可以在加载数据记录的第一会话中传递命令以修改到第一服务器12A的存储器(例如高速缓存)中。用户可以使用应用程序编程接口(API)来创建第一会话和加载三个数据记录,或在人类用户的情况下使用如下命令行来创建第一会话和加载三条数据记录:

>spmulti/rtT9XSNP,KP6YFP,JTY4NT

这三条数据记录是从数据库中读取的。对数据库中的数据记录没有实现任何改变。在数据库10中没有激活锁定机制(即既没有读锁也没有写锁)。如图2所示,数据记录16A、16B和16G的副本被加载到服务器12A的存储器中。原始数据记录16A、16B和16G仍以未锁定状态保存在数据库10中,即可被其他用户访问。在没有数据库事务机制的情况下,加载三个数据记录16A、16B和16G可以通过三个单独的读取过程来实现。可以响应于在第一会话中输入数据记录的名称而在第一会话内自动执行三个单独的读取过程。

第一会话可以允许将任何加载的数据记录设置为活动数据记录。用户可以将数据记录16A、16B和16G中的第一个设置为活动数据记录。用户可以选择一条或多条数据记录作为活动的。第一会话可以显示一条或多条活动数据记录的内容以便于操纵数据记录及其内容。例如,对于技术维护和维修数据库的数据记录,内容可包括维修中的技术设备的标识、故障诊断信息、日期信息、估计的维修时间、维修所需的部件、技术人员的自由文本注释等。用户可以选择多于一条数据记录作为活动数据记录。用户可以在第一会话内操纵一条或多条活动数据记录并更新一条或多条活动数据记录。

所执行的更新可以对所有活动数据记录有效。用户可以将第一数据记录16A设置为活动的并更新第一数据记录16A。用户然后可以将第二数据记录16B设置为活动的并更新第二数据记录16B。更新第一数据记录16A和/或第二数据记录16B可能需要向计算机系统14发送请求。更新可以取决于对请求的响应。将会明白,可能存在多于一个计算机系统并且更新过程可能需要向多于一个计算机系统发送多于一个请求。更新第一和第二数据记录可以是迭代过程。任何数据记录都可以被不止一次地设置为活动的,并且可以被不止一次地更新。第一会话提供了允许用户操纵所有加载的数据记录的环境。

第一会话可以提供创建新数据记录的可能性。用户可以创建新数据记录。新数据记录是并非从数据库10加载的数据记录。用户可以通过合并两个更新后的数据记录来创建新数据记录。用户可以通过合并例如更新后的数据记录16A和更新后的数据记录16B来创建新数据记录。用户可以通过将更新后的数据记录与已加载但未更新的数据记录合并来创建新数据记录。用户可以完成更新过程。

第一会话可以提供启动数据库事务的可能性以便将更新后的数据记录(包括任何潜在的新生成的记录)回写到数据库10。在第一会话内启动数据库事务可包括将第一会话中包括的所有数据记录16A、16B和16G分组在一起,从而允许针对每个分组的数据记录的一个或多个数据库命令的单次迭代。将所有数据记录分组在一起可包括更新后的数据记录、未改变的数据记录和/或新创建的数据记录。例如,为了回写改变后和新生成的数据记录,这些记录被分组并且提交命令被针对数据记录组而发送到数据库10。另外,数据记录或数据记录的部分可被一起循环(looped together),以使得一系列数据库命令的多次迭代可以应用于每个数据记录。命令可以例如指的是检查不一致和/或功能检查。图2通过围绕数据记录16A、16B和16G的虚线将分组和/或循环可视化。在第一会话内启动数据库事务可包括从服务器12A向数据库10发送提交命令,该命令包括如在图2中由虚线箭头指示的所有分组和/或循环的数据记录的名称。提交所有数据记录只需要一条提交命令。

在数据库10处,接收提交命令可以在公共会话ID下启动数据库事务。在数据库10处,与在接收到的命令中包括的名称相对应的所有数据记录16A、16B和16G都可被锁定。数据记录可被写锁定。数据库10可以创建包括名称的锁定表。由提交命令启动的数据库机制确保所有更新后的数据库记录16A、16B和16G要么都被提交要么都不被提交。只是一旦在数据库10处接收到提交命令就锁定数据记录16A、16B和16G。

一旦数据记录16A、16B和16G被提交,用户就可以关闭第一会话。

图3在流程图中示出了根据实施例的方法的不同活动。首先,用户在服务器中创建第一会话(活动S1)。该服务器可能远离数据库。该服务器可以经由任何种类的通信线路而耦合到该数据库。

然后,(活动S2)多条数据记录可以在第一会话内从数据库加载到服务器的存储器中。这多条数据记录对于用户可能具有相互依赖性。这多条数据记录可被彼此独立地存储在数据库中,并且可被彼此独立地从数据库中提取。它们仅被从数据库中被读取。数据库中的数据记录未发生锁定。

来自多条数据记录的至少第一和第二数据记录被更新(活动S3)。可以对第一和第二数据记录顺序地执行更新或并行执行更新。

一旦更新完成,第一会话就联系数据库以用更新后的数据记录来替换数据库中仍未改变的数据记录(活动S4)。因此,启动数据库事务机制,包括加载到服务器的存储器中的所有数据记录。数据库事务还可包括在第一会话内创建的数据记录。数据库事务机制包括对在第一会话内加载的数据记录的写锁定机制。数据库事务机制确保所有更新后的数据库记录要么都被提交要么都不被提交。随着数据库事务的结束,数据库中的所有数据记录都被改变或者都不被改变。

一旦提交了所有数据记录,就关闭第一会话(活动S5)。

在一些实施例中,可以独立于第一会话而启动第二会话。可以在第一服务器12A上或在第二服务器12B上或在另一服务器上启动第二会话。第二会话可以在时间上与第一会话重叠。因为在将数据记录16A-16G读取到第一会话中之后没有锁定数据记录16A-16G,所以第二会话可以在相应服务器的存储器中加载同样的三个数据记录16A、16B和16G。作为示例,可以假设第二会话加载数据记录16A和16F。再一次,没有在数据库10处启动锁定机制。此时没有实现对存储在数据库10中的数据记录的改变。

在第二会话期间,可以以与上面关于第一会话描述的相同方式更新数据记录16A和16F。在更新完成之后可以在第二会话内启动数据库事务。可以独立于从第一会话启动的数据库事务而从第二会话启动数据库事务。

在一些实施例中,可以提供事务机制期间的重写一致性解决(resolution)机制。响应于提交尝试,首先可以将原始检索到的数据记录(除了更新后版本的数据记录之外,原始检索到的数据记录也已被保持在服务器12B的存储器中)与数据库10中的对应数据记录进行比较。如果原始分别加载到服务器12A和12B的存储器中的数据记录与数据库10中的实际数据记录不同,则可以采用重写一致性解决机制。

重写一致性解决机制的一个示例是对提交尝试的拒绝。响应于对提交尝试的拒绝,会话可被配置为重新加载已被识别为与从数据库10中最初检索到的数据记录不同的数据记录。然后可以在会话内将重新加载的数据记录与更新后的数据记录合并。可以启动新的提交尝试。

在重写一致性解决机制的一些实施例中,数据库10中的改变后的数据记录可被更早地合并,即不是在提交时间,而是已经在另一会话(例如第一会话)将数据记录的变化提交到数据库10之后。在这样的实施例中,相应的会话(例如第二会话)可以具有关于数据库10中的数据记录的变化的信息。例如,会话可以周期性地在数据库10中检查数据记录是否已经同时被另一会话改变。更具体而言,第二会话可被配置为独立于任何提交尝试从数据库10中周期性地(即在可以是可调整的给定时间段之后)读取数据记录16A、16B和16G(即为了更新而加载的数据记录),以便检查数据库10中的数据记录是否已经同时被另一会话(例如第一会话)改变。

可能已经仅在为了更新而加载的数据记录的子集(例如,仅一个)中发生数据库10中的变化。在会话内有效更新加载的数据记录之前,在数据记录中的一条或多条中可能已经发生变化。在这种情况下,可以在会话内通过替换先前加载的数据记录来将改变后的数据记录与加载的数据记录合并。在会话内更新加载的数据记录之后,在数据记录中的一条或多条中可能已经发生变化。在这种情况下,如上所述,可以在会话内将改变后的数据记录与更新后的数据记录合并。这两种情况都可能发生在同一会话内,因为在会话内更新不同数据记录可被彼此独立地实现,并且可能花费不同持续时间的时间段。

响应于确定数据库10中的数据记录的变化,会话从数据库10中重新加载数据记录并且在向数据库10提交数据记录的数据库事务之前已经在会话内将重新加载的数据记录与更新后的数据记录合并。这提供了更快速且更高效的数据库提交事务。

重写一致性解决机制的另一示例是在没有任何新的提交尝试的情况下在数据库10处发生合并。合并包括将在第二会话内做出的更新合并到当前存储在数据库10中的数据的版本中。

由图4给出根据本文描述的方法的访问和更新在数据库10中存储的相同数据的多个会话的相互关系的示例。计算机系统14启动并维持与服务器12B的第一会话(活动20)。在第一会话内,服务器12B将要管理和更新的数据从数据库10加载到服务器12B的存储器中(活动22)。如上所述,加载的数据可以是数据记录12A、12B和12G。然后,响应于来自计算机系统14的相应命令而在第一会话内在服务器12B的存储器中更新加载的数据(活动24)。

在第一会话内加载数据(活动22)之后的某个时刻,启动并保持第二会话(活动26)。在图4的示例中,第二会话用服务器12A启动并保持并且也由计算机系统14启动并保持,但是可以由任何其他服务器(例如再次由服务器12B)并且由任何其他计算机系统启动并保持。在第二会话内,从数据库10加载要管理和更新的数据(活动28),该数据包括先前已经通过活动22在第一会话内从数据库10加载的至少一个数据记录(例如如上所述的数据记录16A)。然后,响应于来自计算机系统14的相应命令而在第二会话内在服务器12A的存储器中更新加载的数据(活动30)。

重新参考第一会话,在更新服务器12B的存储器中的数据已经结束之后,更新后的数据被回写到数据库10(活动32)。在图4的假设场景中,也由第二会话加载的数据记录中的至少一个已经在第一会话内被更新(例如图2的数据记录16A)。如上所述,回写32可以利用最先进的数据库事务。假设在第一会话中更新的数据之前没有被任何其他会话从数据库10加载并且在加载22的时间之前还没有被回写,那么回写提交将是成功的并且第一会话的所有更新后的数据记录被以一致的方式回写到数据库10。第一会话然后终止(活动34)。

在稍后的某个时刻,在已经通过活动32将第一会话的更新后的数据回写到数据库10之后,结束第二会话的数据更新并尝试将第二会话的更新后的数据回写到数据库10。在图4的假设情景中,已经通过第一会话被更新并回写到数据库10的至少一个数据记录也在第二会话内被更新。在这种情况下,起初回写是不成功的,但是重写一致性解决36被采用。如上所述,重写一致性解决36可包括拒绝回写尝试,从数据库10将改变后的数据重新加载到第二会话以及重复对重新加载的数据的更新。在另一示例中,采用合并机制,其通过将在第二会话中做出的更新合并到当前存储在数据库10中的各版本数据中来确保数据库10中的数据一致性。以这样或那样的方式,在重写一致性解决36已经成功结束之后,第二会话终止(活动38)。

图5是计算机器100的内部组件的图解表示,计算机器100例如表示服务器12A、12B中的任何一个。计算机器100包括一组指令,该组指令当由计算机器100执行时使计算机器100执行本文讨论的任何方法。计算机器100包括至少一个处理器101、主存储器106和网络接口设备103,至少一个处理器101、主存储器106和网络接口设备103经由总线104相互通信。可选地,计算机器100还可包括静态存储器105和磁盘驱动单元。可以提供视频显示器、字母数字输入设备和光标控制设备作为用户界面102的示例。网络接口设备103将计算机器100连接到诸如数据库10和另外的计算机系统14之类的数据库系统的其他组件。

计算机器100的存储器106可包括存储器区域107,其存储检索到的数据(诸如图2的数据记录16A、16B和16G之类)。在存储器106的另一区域108中,可以存储会话管理数据,诸如定义与计算机系统14的当前活动会话的会话ID和会话状态数据。在存储器106的又一区域109中,可以存储实现当前活动功能的软件处理,诸如与数据库10的交互(加载和回写)以及在当前活动会话内更新数据和处理命令。本实施例内的存储器106可以由存储数据记录的硬件和软件组件组成。可以有基于硬件的缓存,诸如CPU缓存、GPU缓存、数字信号处理器和转译后备缓冲器(translation loockaside buffer)之类,也可以有基于软件的缓存,诸如页面缓存、web缓存(HTTP缓存)等。

托管数据库10以及计算机系统14的计算机器可以由如图5所示的类似计算机器100来实现。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号