用于提供对关系数据库表的高性能数据修改的方法和系统的制作方法

文档序号:6613303阅读:192来源:国知局

专利名称::用于提供对关系数据库表的高性能数据修改的方法和系统的制作方法
技术领域
:本公开总体涉及计算机数据库领域,并且更具体地涉及将大批量的数据M户机插入和更新到一个或多个关系数据库表中。
背景技术
:将数据行(rowsofdata)插入到一个或多个表中实际上在所有的现代客户机-服务器或基于Web的关系数据库应用中都是一项普通的任务。在直接插入好几万数据行的分布式、多客户机事务处理环境中,首要关注的是性能和并行性。可以将性能测量为从客户机角度来看的事务持续时间。直接对目标表进行插入的远程数据库(RDB,RomoteDatabase)事务可能具有很糟糕的性能(performancenightmare),其占用很多时间来完成,特别是如果将要插入的行数上万的话。额外的损失出现在存在任何已定义的触发和/或指标的情况下。并行性是对有多少客户机可以同时访问(读和/或写)数据库中给定的目标表的度量。如果应用未能足够频繁地提交(commit)或者在延长的一段时间上保持目标表上的排它锁(exclusivelock),则有可能会拒绝其他用户访问目标表(死锁)。如果将要从客户机插入到服务器的行数相对小,比方说数十行,则可以通过多种常规方法处理插入任务。然而,如果要插入很多行,比方说几万,那么常规方法受损于各种限制。一种这样的常规方法要求每个客户机在本地安装数据库代码并且执行"加栽实用工具(loadutility)"来将数据插入到目标表。在该方法中,虽然性能通常不是问题,但是并行性受损极大。该方法还受损于权限和错误处理问题。因为加载实用工具由特权用户运行,所以使用这样的实用工具将数据插入到关系表通常要求获得目标表上的排它锁。表上的排它锁将防止在加载期间对该表的任何级别的访问(包括只读),从而降低了该表的并行性。在很多关系数据库系统中,执行加载实用工具被预留给特权用户/系统管理员,并且其要求比通常授权给普通用户或者普通用户所要求的权限更高的权限。这可能引入诸如安全问题之类的不良方面影响。在线事务处理系统的一个重要方面是从错误中恢复的能力。如果加栽实用工具部分通过事务时失败,则数据库的正常错误恢复处理会将整个事务回退到最后的一致性点(consistencypoint)。在一些数据库系统中,当加载失败时,可以将表置于不可用状态,这要求数据库管理员的人工干涉来清除错误。显然,该情况不仅会影响直接客户机(immediateclient),而且会影响正在尝试访问该表的任何其它的客户机,从而将并行性降低到零。需要的是在分布式痩型客户机(无本地数据库代码)环境中,利用错误重试能力,在最小客户机权限的情况下获得改进的表并行性和插入性能。
发明内容根据本发明的示例性实施例,提供了一种用于更新数据库的方法。该方法包括以下步骤#户机连接到服务器上的数据库,在所迷服务器上生成临时表,其中所述临时表是来自所述数据库的目标表的副本,将来自所述客户机的客户机数据存储到所述临时表中作为临时表数据,以及基于所述临时表数据更新所述目标表。根据本发明的示例性实施例,提供了一种包括用于更新远程关系数据库的计算机代码的计算机可读介质。所述计算机可读介质包括用于M户枳跨越网络连接到远程服务器上的关系数据库的计算机代码,用于在所述服务器上生成临时表的计算机代码,其中所述临时表是来自所述数据库的目标表的副本,用于将来自所迷客户机的客户机数据复制到所述临时表中作为临时表数据的计算机代码,以及用于基于所述临时表数据更新所述目标表的计算机代码。根据本发明的示例性实施例,提供了一种分布式数据库系统,其包括具有通信程序的客户机、网络、服务器,以及在所述服务器上的关系数据库中的目标表的结构进行了镜像(mirror)的临时表中作为临时表数据,并且所述目标表是基于所述临时表数据而被更新的。才艮据以下应结合附图阅读的对示例性实施例的详细描述,本发明的这些和其它的示例性实施例、方面、特征以及优点将得到描述或变得更加清楚。图1是根据本发明的示例性实施例的分布式数据库系统的高级框图;图2是根据本发明的示例性实施例对修改远程表的方法进行了说明的流程图3根据本发明的示例性实施例说明了实现将数据插入到数据库中的过程的应用的数据流示图4根据本发明的示例性实施例说明了用于将数据插入到远程表中的系统^L图和布局;图5根据本发明的示例性实施例说明了将数据插入到数据库表中的过程;图6根据本发明的示例性实施例说明了更新数据库表的数据的过程;以及图7根据本发明的示例性实施例说明了从数据库表中删除数据的过程。具体实施例方式总体而言,如下文进一步详细描述的本发明的示例性实施例包括这样的系统和方法,即该系统和方法促进了对数据库中的表的大量数据更新,并且提供了改进的性能和较高的并行性。现在将参照图1-7的说明性实施例进一步详细讨论促进了对数据库中的表的大量数据更新的系统和方法的示例性系统和方法。应当理解,文中所描述的系统和方法可以以各种形式的硬件、软件、固件、专用处理器,或其组合来实现。特别地,将本发明的至少一部分优选地实现为包括程序指令的应用,其中,该程序指令有形地体现于一个或多个程序存储设备(例如,硬盘、磁软盘、RAM、ROM,CDROM等)上,并且可由包括适当体系机构的任何设备或机器(例如,具有处理器、存储器,以及输V输出接口的通用数字计算机)执行。应当进一步理解,由于优选地以软件实现附图中所描绘的一些系统构成组件和过程步骤,因此系统模块(或方法步骤的逻辑流程)之间的连接可以取决于本发明的编程方式而有所不同。根据文中的教导,相关领域的普通技术人员将能够设想本发明的这些和类似的实现。图1是根据本发明的示例性实施例的分布式数据库系统100的高级框图。参照图1,该分布式数据库系统包括通过网络150连接至服务器160的客户机110。客户机110包括数据传送模块120。数据传送模块120包括连接模块125、临时表生成模块130、临时表存储模块135,以及目标表更新模块140。服务器160包括数据库170。数据库170包括临时表175和目标表180。临时表175由临时表生成模块130创建。连接模块125开启到数据库170的连接。临时表生成模块130复制目标表180的结构以生成临时表175。临时表存储才莫块135将来自客户机的数据复制到临时表175中。目标表更新模块140使用临时表175中的数据来更新目标表中的数据。更新可以包括任何数目的SQL插入、更新、删除及其组合。图2是根据本发明的示例性实施例对修改远程表的方法进行了说明的流程图。参照图2,在步骤210中,客户机连接到服务器上的数据库。数据库可以是诸如1MBDB2、Oracle、Sybase、Informix、MicrosoftSQLServer、MicrosoftAccess等的关系数据库。连接可以从远程客户b^越网络到达远程服务器。在步骤220中,客户机在服务器上生成临时表。临时表是数据库中的目标表的副本。临时表不包括目标表的数据行,但却包括与目标表的列标题相同的列标题。本质上,临时表是目标表的空白副本。临时表可以是在运行时创建的已声明的全局临时表(DGTT,declaredglobaltemporarytable)。DGTT充当专用緩冲器并且有效地给予用户个人沙箱(sandbox)来工作。与常规表不同,并不在数据库系统目录中登记DGTT。这节省了创建表的时间。DGTT对于其他用户还是"不可见的",并且因此并不引入任何并行性问题。事实上,DGTT可以对任何其他的用户/应用是不可访问的。此外,并不在婆:据库的事务日志中记录DGTT上所进行的事务(插入、更新、删除),从而减少了插入、更新或删除数据行所花费的时间并且改进了性能。在步骤230中,客户机将客户机数据存储到临时表中。可以通过使用一个或多个SQL(结构化查询语言,structuredquerylanguage)或DML(数据操纵语言,datamanipulationlanguage)语句来>^户机传送数据。数据可以来自多个源,包括平面文件(flatfile)、存储器、手动输入,等等。对数据的存储可以持续一段时间并且包括诸如插入、更新、删除及其组合的多个操作。在客户才;L已经完全加载了DGTT之后,在步骤240中,来自DGTT的数据即将用于更新目标表。此时,由于所有的工作均是在完全隔离中完成的并且不进行记录,因此在较少或没有网络通信量并且减少了死锁的影响的情况下,可以以任何期望的方式容易地"清洗"或准备DGTT中的数据。对目标表的更新可以通过使用简单的(或复杂的)SQL或DML语句来实现,并且可以在服务器上完成工作,而仅需要较少的网络通信量或不需要网络通信量。如果使用来自DGTT的数据更新目标表由于某些原因而失败了,则可以回退整个事务并且在预定的一段时间之后重试以及重试任何次数。只要DGTT还未被破坏,数据就仍然驻留在服务器上并且无需再次从客户机传送。在将数据从DGTT成功移至目标表后,就可以舍弃DGTT。当实现该方法的应用从数据库断开时,如果不再使用DGTT,则其可以破坏DGTT。图34艮据本发明的示例性实施例说明了实现将数据插入到数据库中的过程的应用的数据流示图。参照图3,在步骤305中,应用进行初始化以获得所需要的信息。该初始化可以包括多个步骤,举例来说,包括检索数据库所驻留的服务器的地址和名称、数据库的名称、目标表的名称、可以用于加栽临时表的平面文件的名称,等等。在步骤310中,应用使用在先前的步骤期间所检索到的信息实现到该数据库的数据库连接。在步骤315中,创建已声明的全局临时表(DGTT)作为目标表的修改副本或精确副本。精确副本意味着所复制的表对目标表的结构进行了镜像,具有相同的列标题但却无数据行。修改副本意味着所复制的表仅对目标表的一部分进行了镜像,可能具有较少的列标题,并且同样无任何数据。在步骤320中,从文件读入数据或者在核(core)中创建数据,并且准备好数据用于插入到DGTT中。在步骤325中,将数据插入到DGTT中。在步骤330中,如果有必要,则进行对DGTT中的数据的预处理。预处理可以包括清洗或连接DGTT中的数据。在步骤335中,将来自DGTT的数据插入到目标表中。在步骤340中,如果需要,则进行对目标表中的数据的后处理。在步骤345中,将变更提交给数据库并且应用退出。图4根据本发明的示例性实施例说明了用于将数据插入到远程表中的系统碎见图和布局。参照图4,该系统包括客户机460、网络470,以"J良务器480。称为"Insert.java"的Java程序410运行在客户机上。所说明的Java程序410仅仅是例子,其名称和内容可以作相当大的改变。虽然所说明的Java程序410仅进行插入,但是根据需要可以容易地将其修Ul进行任何的插入、更新、删除及其组合。本发明并不限于java,还可以使用诸如€++等的4壬何其它适当的语言。服务器480具有包括DGTT440和目标表450的数据库430。客户机460使用第4类JDBC通用驱动器420作为访问服务器480上的数据库430的手段。虽然在图4中说明了第4类JDBC通用驱动器,但是本发明并不限于第4类JDBC,还可以使用诸如第2类JDBC、非JDBC驱动器,或者甚至#客户端连接机制之类的任何其它适当的驱动器。JDBC代表Java数据库连通性(JavaDatabaseConnectivity),并且其是用于执行SQL语句的Java应用程序接口(API)。其包括以Java编程语言编写的一组类别和接口。JDBC为工具/数据库开发者提供了标准的API,并且使得有可能通过使用纯JavaAPI来编写数据库应用。Java程序410可以直接与数据库430进行通信。然而,这需要可以与正在被访问的特定数据库管理系统进行通信的JDBC驱动器。JDBC驱动器用于开启经由JDBC驱动器到数据库连接,其必须在可以形成连接之前向驱动器管理器进行登记。图4说明了作为JDBC驱动器的实施例的第4类JDBC驱动器420。第4类JDBC驱动器(也称为#协议驱动器)是将ODBC转换成供应商专用(vendorspecific)数据库协议的数据库驱动器实现。第4类驱动器是完全以Java编写的并且是平台独立的。其被安装在客户机的Java虛拟机(JVM,JavaVirtualMachine)的内部。由于其不具有将调用转换成ODBC(开》文式数据库连通性,OpenDatabaseConnectivity)或数据库API调用的开销,因此其提供了比第1类和第2类驱动器更好的性能。与第1类和第2类驱动器不同,第4类不需要用于工作的关联软件。Java程序410在其初始化期间获得连接信息并且连接至数据库430。可以从命令行开关中读取或动态地(onthefly)创建事务专用参数。Java程序410声明DGTT440为目标表450的结构的精确副本或修改副本。精确副本与目标数据具有相同的列标题,但却无数据行。该表的修改副本可以比目标表450具有较少的列,并且同样是无数据的。可以从诸如文件之类的各种输入流读取、从pipe(stdin)读取,或者动态地创建将要插入到DGTT440中的数据。可以使用准备好的语句(PreparedStatement)将数据作为行插入到DGTT440中。准备好的语句含有已经被预编程的SQL语句,从而节省了数据库编译那些语句将花费的时间。还可以使用准备好的语句来插入、更新或删除DGTT440中的数据。当在DGTT440上进行包括插入、删除和更新在内的数据库操作时,不发生事务记录,由此改善了性能。另外,对DGTT440的使用改进了目标表450的并行性。将通常会在目标表450上进行的数据库操作(其可能锁住目标表450的方面并且降低并行性)卸载到DGTT440。为了进一步提高处理的速度,可以使用JDBC的"批"处理部件来批处理N个插入,而不是一次一个的完成它们。还可以使用"批"处理部件来进行大量(mass)更新和删除。如果在将数据插入到DGTT440中时出现错误,则错误处理可以单独在DGTT440上进行,从而使目标表450不受影响。如果未遇到错误,则提交语句可以用于将数据行保存在DGTT440中。可以在与目标表450隔离时在DGTT440上进行工作(例如,计算和分类)。DGTT440中的数据可以用于进行在目标表450上的任何必要的SQL插入、更新和删除。由于这些操作发生在目标表450上,因此出现事务记录。然而,由于大多数工作是在服务器上进行的,因此有着最少网络通信量。如果在使用来自DGTT440的数据修改目标表450时发生错误,则可以在预定义的一段时间之后重试修改。由于DGTT440保留其数据的副本,因此可以周期性地进行这一重试直到获得成功。还可以进行任何必要的后处理(即,发射完(fireoff)应用事件/触发)。当已经进行了对目标表450的所有期望的变更时,可以提交变更。当不再使用DGTT440时,可以从数据库430中舍弃DGTT440。图5根据本发明的示例性实施例说明了将数据插入到数据库表中的过程。参照图5,职员表(EMPLOYEEtable)最初具有五个列标题和四行数据505。创建DGTT作为职员表的空白副本510。然后执行第一SQL语句515并且将职员"BillJones"和"DanWilliams"作为两行数据插入到DGTT中520。接下来,执行第二SQL语句525并且将来自DGTT的数据行插入到职员表中530。图6根据本发明的示例性实施例说明了更新数据库表的数据的过程。参照图6,职员表最初具有五个列标题和四行数据605。创建DGTT作为职员表的空白副本610。然后执行第一SQL语句615并且将两个现有职员的头衔(title)的修订数据作为两行数据插入到DGTT中620。接下来,执行笫二SQL语句625并且利用来自DGTT的数据更新职员表中两个职员的头衔630。图7根据本发明的示例性实施例说明了从数据库表中删除数据的过程。参照图7,职员表最初具有五个列标题和四行数据705。创建DGTT作为职员表的空白副本710。然后执行第一SQL语句715并且将关于两个职员的雇用情况的修订数据作为两行数据插入到DGTT中720。接下来,执行第二SQL语句725并且从职员表中删除与在DGTT中被列为"fired(解雇),,的职员相匹配的两个职员730。用于更新图5-7中所说明的DGTT的数据的数据可以由远程客户机来提供。所说明的职员表和DGTT可以存储在远离客户机的服务器的数据库中。客户机可以使用JDBC连接协议来连接到数据库并且用于对DGTT和职员表的插入、更新和删除。尽管图5-7分别说明了两个插入、两个更新和两个删除,然而这些仅仅是示例性实施例。本发明并不限于仅是两个操作,可以在任何数目的数据库表上进行任何数目的插入、更新、删除及其组合。为了清&见,在本说明书中并未描述实际实现的所有部件。可以理解,在对任何这样的实际实施例的开发中,必须进行大量特定于实现的判断,以便达到开发者的具体目的,例如遵从系统相关和商业相关的约束,这从一种实现到另一种实现会发生变化。此外,可以理解,这样的开发工作可能是复杂和耗时的,但对于受益于本公开的本领域的普通技术人员而言将不过是惯常的任务。虽然本发明易受各种修改和可选形式的影响,但是已经通过举例的方式在附图中示出了并且在文中详细描述了其具体实施例。然而,应当理解,文中所描述的具体实施例并不旨在将本发明限制于所公开的特定形式,相反地,本发明将覆盖落入由所附权利要求所限定的本发明的精神和范围内的所有的修改、等同物和可选方式。应当理解,文中所描述的系统和方法可以以各种形式的硬件、软件、固件或其組合来实现。以上所公开的特定实施例仅是说明性的,同样地,可以以不同的但却等效的方式(其对于受益于文中的教导的本领域的技术人员而言是显见的)来实践和修改本发明。此外,除了以下权利要求中所描述的以外,并不旨在对文中所示出的细节和设计进行限制。因此,显然可以更改或修改以上所公开的特定实施例,并且所有这样的变化都被认为是在本发明的范围和精神内。因此,文中所寻求保护的是以下权利要求中所阐述的。权利要求1.一种用于更新数据库的方法,其包括从客户机跨越网络连接到服务器上的数据库;在所述服务器上生成临时表,其中所述临时表是来自所述数据库的目标表的副本;将客户机数据存储到所述临时表中作为临时表数据;以及基于所述临时表数据更新所述目标表。2.根据权利要求l的方法,其中所述数据库是关系数据库。3.根据权利要求l的方法,其中所述副本没有数据并且与所述目标表具有相同的数据列标题。4.根据权利要求2的方法,其中所述存储和更新是使用一个或多个结构化查询语言或数据操纵语言命令来进行的。5.根据权利要求l的方法,其中如果所述更新失败,则在预定的一段时间之后重试对所述目标表的更新。6.根据权利要2的方法,其进一步包括将变更提交给与所述目标表的更新相关联的数据库。7.根据权利要求2的方法,其中所述存储和更新是使用一个或多个准备好的语句来进行的。8.根据权利要求2的方法,其中从所i^户机进行连接使用Java数据库连通性连接协议。9.根据权利要求8的方法,其中所述存储和更新是使用所述Java数据库连通性连接协议的批处理部件来进行的。10.根据权利要求8的方法,其中将所述方法实现为Java程序。11.根据权利要求2的方法,其中所述临时表是已声明的全局临时表。12.—种分布式数据库系统,其包括具有通信程序的客户机;网络;服务器;以及在所述服务器上的关系数据库,其中所述客户机使用所述通信程序来将客户机数据存储到对所述关系数据库中的目标表的结构进行了镜像的临时表中作为临时表数据,并且所述目标表是基于所述临时表数据而被更新的。13.根据权利要求12的分布式数据库系统,其中所述通信程序使用Java数据库连通性连接协议跨越所述网络连接到所述关系数据库。14.根据权利要求13的分布式数据库系统,其中所述客户机包括第4类Java数据库连通性通用驱动器。15.根据权利要求12的分布式数据库系统,其中如果在更新所述目标表时导致失败,则在预定的一段时间之后重试对所述目标表的更新。16.根据权利要求12的分布式数据库系统,其中在所述目标表被成功更新之后,所述通信程序将变更提交给所述关系数据库。17.根据权利要求12的分布式数据库系统,其中对所^户机数据的存储以及对所述目标表的更新包括一个或多个准备好的语句。18.根据权利要求13的分布式数据库系统,其中对所述客户机数据的存储以及对所述目标表的更新是使用所述Java数据库连通性连接协议的批处理部件来进行的。全文摘要本发明提供了一种用于更新数据库的方法,其包括从客户机连接到服务器上的数据库,在所述服务器上生成临时表,其中所述临时表是来自所述数据库的目标表的副本,将客户机数据存储到所述临时表中作为临时表数据,以及基于所述临时表数据更新所述目标表。文档编号G06F17/30GK101187934SQ20071016941公开日2008年5月28日申请日期2007年11月13日优先权日2006年11月21日发明者I·G·本德里海姆,R·J·卡利奥申请人:国际商业机器公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1