自动调整访问数据库资源时的信息传递的方法和装置的制作方法

文档序号:6559539阅读:149来源:国知局
专利名称:自动调整访问数据库资源时的信息传递的方法和装置的制作方法
技术领域
本发明一般涉及数字数据处理,并尤其涉及在网络数字计算环境内服务于多个客户机用户的数据库的操作。
背景技术
在二十世纪的后半页开始出现被称为信息革命的现象。尽管信息革命是其范围比任何一个事件或机器都宽的历史发展,但是没有一种设备能比数字电子计算机更好地代表信息革命。计算机系统的发展确实是场革命。每一年,计算机系统都增长更快,存储更多数据,并向它们的用户提供更多应用。
现代计算机系统通常包括形式为一个或多个用于处理指令的中央处理单元(CPU)、用于存储指令和其他数据的存储器以及传递信息、与外部环境通信等所必需的其他支持硬件的硬件。从计算机硬件的立场看,大多数系统以基本相同的方式操作。处理器能够执行有限的一组非常简单的操作例如运算、逻辑比较和数据从一个位置移动到另一个位置。但是每个操作都非常快地执行。指引计算机执行大量的这些简单操作的程序给出了计算机正在进行复杂的操作的错觉。用户所感觉到的计算机系统的新的或改进的能力是通过执行本质上相同的一组非常简单的操作但更快得多地执行来实现的。
复杂系统可用于支持各种应用,但是一种通常的用法是支持可从中获得信息的大数据库。在概念上,数据库可被看作一个或多个信息表,每个表具有大量共同格式的项或记录(类似于表的行),每个项具有多个各自的数据字段(类似于表的列)。数据库管理软件提供了如下能力,即定义数据库的参数,创建新的数据库记录,编辑现有记录等。具体地,大数据库通常支持某种形式的用于获得信息的数据库查询,该信息是从选择的数据库字段和记录取出的。数据库管理软件执行的操作特别是数据库查询会消耗相当多系统资源。
大数据库常常要将向多个用户提供信息。许多包含大数据库的计算机系统根据客户机-服务器模型提供数据库访问,在该模型中数据库的用户(客户机)请求数据库的某种服务(例如执行针对数据库内的信息的查询),并且数据库管理软件用作服务器以使用数据库信息执行所请求的服务,并将结果(例如请求的信息、确认操作已执行等)返回给客户机。使用客户机-服务器模型有助于当客户机处于常常物理上远离数据库系统的不同的计算机系统中时访问数据库信息。
与一个或多个数据库的客户机-服务器交互可非常复杂。存储的信息的范围和类型可多样化。数据库具有特定的结构,其包括一个或多个表、每个表内的项结构、用于帮助查询的辅助数据库结构例如索引和直方图等、以及其他结构。希望将用户和/或用户应用与这些数据库设计细节屏蔽开。在此被称为“中间层设施”或“中间层”的一系列中间件应用常常被插入客户机和数据库之间,并且可提供用于访问一个或多个数据库的方便的方法。对于客户机,中间层表现为服务器。即客户机的直接交互是与中间层进行的,该中间层服务于该客户机的请求。中间层可包含用于服务于客户机请求的多种复杂应用中的任何一个。服务于至少某些请求需要访问数据库内的数据,尽管在许多情况下还存在一些可完全在中间层内被服务而不需访问数据库的请求。对于数据库,中间层是中间应用,其在多个客户机与数据库的事务中代表该多个客户机处理。中间层可支持访问多个数据库,并且某些请求会要求从多个数据库获得数据以满足该请求。从数据库获得的数据可直接返回给客户机,或者可被中间层处理以生成其他数据,该其他数据可被返回给客户机和/或重新存储在数据库内的。其中客户机通过这种中间件访问数据库的一种形式的客户机-服务器环境有时被称为三层环境。
这种中间层的一示例是处理由运行交互式web浏览器的多个客户机生成的访问一个或多个数据库内包含的数据的请求的设施。通常,web浏览器的用户不了解数据库的设计细节,并仅知道他感兴趣的信息的类型。中间层设施将来自客户机的web浏览器的请求转化成适合于访问数据库的形式。在许多情况下,单个请求可能需要中间层访问多个数据库并为客户机处理得到的数据。
有可能将中间层设施设计为定制编写的计算机程序代码以支持已知的一组客户机并访问已知的一组数据库。但是,通常更容易得多从现有的外壳或框架设计中间层,然后针对具体的一个或多个应用定制该中间层。这种用于中间层的外壳或框架在此被称为“应用服务器”。应用服务器通常包含用于不同类型的数据库的一组通用接口以及其他频繁使用的函数或过程。一个或多个定制的中间层应用在应用服务器上运行,并利用其功能来访问数据库。这种应用服务器可在面向对象的编程形式中被提供为预先定义的类、方法和对象的层级结构,其可随后通过扩展而被定制。但是,应用服务器不需要使用面向对象的编程构造来设计。
在典型的环境中,中间层设施位于与数据库不同的计算机系统内,并通过网络与数据库通信。在应用服务器内运行的应用需要访问数据库的特定记录以服务于客户机请求。应用服务器通过网络将数据库访问请求转发给该一个或多个数据库,并经由网络接收响应于这些请求的选择的数据库记录。应用服务器临时将这些记录存储在起高速缓存作用的本地数据结构内。然后应用访问这些记录以生成满足客户机的请求所需的特定数据。
在应用服务器内,希望使用一共同的通用接口来访问数据库的记录,该共同的通用接口有可能从多个不同的中间层应用或过程调用。由于该通用接口必须支持多个不同的应用,所以该接口被设计成访问可从数据库要求的任何信息。具体地,在访问数据库记录时,通用接口通常被设计成获得完整的数据库记录即数据库记录内的所有字段,而不管请求应用是否实际使用所有字段来满足客户机请求。
当数据库记录通过网络被传递并被存储在应用服务器内的本地数据结构内时,被传递的实际上没有被中间层应用使用以满足客户机请求的记录字段可消耗非常大的网络带宽和本地存储容量。在这种情况下,希望仅传递和存储满足客户机请求实际所需的字段,以便减小网络和本地资源的消耗。当使用通用接口时,如在用于支持多个中间件应用的应用服务器外壳或框架的情况中,该问题尤其严重。有可能设计将仅向数据库请求所需的最少数量的数据的定制接口,但是构建定制接口会导致减小应用的可移植性、代码的可复用性,并通常会增加代码开发和维护的负担。
因此,需要改进的用于在网络环境内访问数据库的技术,该技术既可避免过度使用网络带宽和其他系统资源,又同时提供由应用服务器外壳提供的通用接口的优点。

发明内容
用于访问一个或多个数据库的数据库访问设施包括监视向数据库访问设施的对数据库数据的请求的监视功能。监视功能跟踪向数据库访问设施请求哪些数据库字段以动态确定需要的字段。一旦获得足够的跟踪数据,则数据库访问设施自动修改随后的对数据库数据的请求以仅请求请求者实际需要(或可能需要)的字段。
在优选实施例内,数据库访问设施是支持需要数据库数据的一个或多个应用的应用服务器。应用服务器和它包含的一个或多个应用是三层客户机-服务器环境的中间层设施。中间层设施响应来自多个客户机的服务请求,并在合适的情况下代表客户机访问一个或多个数据库。应用服务器是用于代表中间层的一个或多个应用支持数据库访问的框架或外壳。应用服务器包括一组通用数据库接口,并且维护数据库内的数据的本地高速缓存对象。中间层内的应用调用应用服务器的连接设施以获得数据库访问。应用服务器从一个或多个数据库接收到数据,并使用此数据库数据来执行客户机请求的服务。但是,应用服务器及其应用不需要构成中间层设施,而作为另一种选择可以是客户机或数据库数据的终端用户。
在优选实施例中,一个或多个应用和应用服务器之间的接口符合JAVA 2 Enterprise Edition(J2EE)接口规范,从而有助于为应用服务器开发、再使用和移植应用。在接收到对数据库信息的请求时,应用服务器将某些信息高速缓存在本地高速缓存对象内。J2EE规范允许应用从数据库请求特定信息,但是不支持应用调整本地高速缓存对象。即,使用J2EE接口的应用无法告知应用服务器应高速缓存哪些字段(因为将需要或可能需要它们以执行某功能)。监视功能维护记录已被每个应用访问的字段的历史数据。根据此历史数据,应用服务器能够在没有从应用得到任何指示的情况下确定应从数据库请求哪些字段。在第一次访问数据库内的记录时,应用服务器使用监视器的历史数据确定应访问哪些字段,并仅访问这些字段。
通过减少被高速缓存在应用服务器内的数据库字段的数量,可减小应用服务器内的本地高速缓存对象的大小。更重要地,在典型的网络环境内,减小必须通过网络传递的数据量。此结果是以与通用接口规范(确切地,J2EE规范)一致的方式实现的,从而保留了保持与通用接口规范一致的所有好处。进一步地,实现此结果而不需要客户机方的手工干预,不需要在应用或应用服务器内写入用于处理每个应用的要求的定制代码。此外,此结果是动态地实现的,并且如果随后修改应用以访问数据库的不同字段,则应用服务器将自动调整被访问的字段。
可参照附图最好地理解本发明的关于结构和操作的细节,在附图中相同的标号指示相同部件,并且在附图中


图1是根据本发明的优选实施例的用于访问数据库内的信息的典型三层环境的高层表示。
图2是根据优选实施例的用于代表客户机执行与数据库访问有关的服务的计算机系统的主要硬件组件的高层级框图。
图3是根据优选实施例的用于维护数据库的计算机系统的主要软件组件的概念图示。
图4是根据优选实施例的操作中间层设施的计算机系统的主要软件组件的概念图示。
图5是根据优选实施例的数据库表的结构的概念图示。
图6是根据优选实施例的访问历史表的结构的概念图示。
图7是示出根据优选实施例的通过中间层系统服务于访问数据库的客户机请求的过程的高层流程图。
图8更详细地示出根据优选实施例的响应来自中间层应用的数据请求的、应用服务器内的过程。
具体实施例方式
参照附图,在这些附图中相同的标号指示相同的部件,图1是根据本发明的优选实施例的用于访问数据库内的信息的典型三层环境的高层级表示。数据库系统101是包含一个或多个信息数据库的计算机系统,其用作响应客户机的访问数据库内的信息的请求的服务器。客户机103A-C(在此被统称为特征103)生成向中间层系统102的服务请求,这些请求中的至少一些要求访问数据库系统101的数据库内的信息。中间层系统102用作客户机103的服务器;它可向客户机提供多种服务(并不是全部服务都必须涉及数据库访问),但是它尤其在处理访问数据库内的信息的客户机请求时用作客户机103和数据库系统101之间的中介物。当必须提供被请求的服务时,中间层系统使用一般形式的对信息的客户机请求生成一个或多个向数据库系统101的请求,所述请求为将被访问的数据库所需的特定形式。数据库系统101生成对这些请求的响应(例如,选择的信息的副本、查询结果、对信息进行的改变的确认等),所述响应被传送给中间层系统102,并被中间层系统102使用以向客户机提供响应。处理所有与客户机103的直接交互的中间层系统102在客户机看来是服务器。在数据库系统101看来,中间层系统102作为多个客户机的代表传送和接收来自客户机的信息。
数据库服务器系统101通过表示为网络104的通信路径耦合到中间层系统102,并且该中间层系统继而通过表示为网络105的通信路径耦合到客户机103。网络104、105可以是任何形式的数据通信路径,包括广播媒介,数据库系统101、中间层系统102或一个或多个客户机103之间的直接链路,或通过一个或多个其他系统、路由器或其他实体的任意复杂的间接链路。网络104、105可以是相同网络(例如因特网)。在典型环境中,网络104可以是局域网,而网络105是范围更广的网络例如因特网。
图1旨在以高层的一般性示出一典型环境,而不是旨在详细地示出环境的所有组件,或者用于访问数据库的三层或其他客户机-服务器环境的所有可能的变化。图1的环境表示可能存在许多变型,尤其可能存在下文的变型,但是对具体变型的描述在此仅作为示例而不是限制。尽管数据库系统101示出为一个单块实体,但实际上该系统可包括在其上以分布方式存储数据和/或执行操作的多个计算机系统。实际上可以有具有不同组织和接口的多个数据库,所有数据库都被单个中间层系统访问。尽管数据库系统101、中间层系统102和客户机103示出为通过网络耦合的分开的和不同的实体,但是它们中的一些或全部实际上可组合在单个计算机系统内。例如数据库系统101和中间层系统102可以是执行数据库管理器和中间层设施的组件的两个软件过程的同一个的物理计算机系统,在此情况下将不存在物理网络104,这两个软件过程之间的通信是在单个计算机系统内根据合适的进程间通信协议处理的。客户机103和中间层102类似地可以是在相同计算机系统上执行的过程;并且在此说明的由中间层执行的功能可作为另一种选择由客户机直接执行。尽管这些客户机103表示为单用户工作站,但是客户机可以是可生成要求访问数据库的服务请求的任何实体,并可包括在大的多用户系统上执行的过程;此外,客户机的数量可改变,并且通常远大于图1内为了说明而示出的三个客户机。
图2是根据优选实施例的代表客户机执行与数据库访问有关的服务的计算机系统200的主要硬件组件的高层级框图。系统200可代表数据库系统101的硬件组件,或可代表中间层系统102的硬件组件,或可代表如上所述执行数据库系统101和中间层系统102两者的功能的单个系统的硬件组件。CPU 201是至少一个通用可编程处理器,其执行来自主存储器202的指令并处理来自主存储器202的数据。主存储器202优选地是使用多种存储技术中的任何一个的随机存取存储器,其中数据从存储装置或以其他方式装入以便被CPU 201处理。
一个或多个通信总线205提供了用于在CPU 201、主存储器202和各I/O接口单元211-214之间传递数据的数据通信路径,所述接口单元也被称为I/O处理器(IOP)或I/O适配器(IOA)。I/O接口单元支持与多种存储装置和I/O设备的通信。例如,终端接口单元211支持附加一个或多个用户终端221-224。存储接口单元212支持附加一个或多个直接存取存储设备(DASD)225-227(其通常是旋转磁盘驱动存储设备,但是它们作为另一种选择可以是其他设备,包括被配置成在主机看来是单个大存储设备的盘驱动器阵列)。I/O设备接口单元213支持附加多种其他类型的I/O设备例如打印机228和传真机229中的任何一个,应理解也可使用其他或附加的I/O设备类型。网络接口214支持与一个或多个外部网络230连接以便与一个或多个其他数字设备通信。网络230可以代表网络104或网络105或这两者,并且可体现为现有技术内已知的多种局域网或广域网中的任何一个。例如,网络230可以是以太网局域网,或者可以是因特网。另外,网络接口214可支持与其他网络的连接。
应理解,图2旨在在高层示出系统200的代表性主要组件,而各个组件可比图2内所示的更复杂,可存在不同于或除了图2内所示的那些组件之外的组件,并且组件的数量、类型和配置可改变,并且大计算机系统具有的组件通常多于图2所示的。在此公开了这种额外的复杂性或额外的变型的一些具体示例,但是应理解,这些仅作为示例而未必仅有这些变型。
尽管在图2内为了说明仅示出一个CPU 201,但是如本领域内已知的,计算机系统200可包含多个CPU。尽管主存储器202在图2内示出为一个单块实体,但是如本领域内已知的,存储器202实际上可以是分布式的和/或分层级的。例如,存储器可存在于多级高速缓存内,并且这些高速缓存还可按功能进一步划分,从而一个高速缓存保存指令,而另一个高速缓存保存处理器使用的非指令的数据。如在多种所谓的非均匀存储器存取(NUMA)计算机体系结构中的任何一种内已知的,存储器还可以是分布式的并且与不同CPU或CPU组相关联。尽管通信总线205在图2内示出为单个实体,但是实际上,各系统组件之间的通信通常通过复杂的总线、接口等的层级结构实现,在该层级结构中高速路径用于CPU 201和存储器202之间的通信,而低速路径用于与I/O接口单元211-214的通信。总线205可被安排成多种形式中的任何一种,例如层级、星形或网状配置中的点到点链路,多个层级总线,并行和冗余路径等。例如,如在NUMA体系结构中已知的,在节点的基础上安排通信路径。总线可使用例如工业标准PCI总线,或任何其他合适的总线技术。尽管示出多个I/O接口单元,其将系统总线205与延伸到各I/O设备的各通信路径分开,但是作为另一种选择有可能将一些或全部I/O设备直接连接到一个或多个系统总线。
图2内所示的计算机系统200具有多个附加终端221-224,例如对多用户“大型机”计算机系统是典型的那样。通常,在此情况下附加设备的实际数量大于图2内所示的,虽然本发明并不局限于任何特定大小的系统。访问计算机系统200的用户工作站或终端也可经由网络230附加到系统200并与该系统通信。计算机系统200可作为另一种选择是不包含附加终端或仅包含这样的单个操作员控制台的系统,所述控制台仅包含单个用户显示和键盘输入。此外,尽管在此为了说明将本发明的某些功能描述成被包含在单个计算机系统内,但是这些功能可作为另一种选择使用相互通信的计算机系统的分布网络实现,其中在此所述的不同功能或步骤在不同计算机系统上执行。
尽管已在高层说明并示出多种系统组件,但是应理解,典型的计算机系统包含许多其他未示出的组件,这些组件对于理解本发明不是不可缺少的。在优选实施例内,计算机系统200是基于IBM AS/400TM或i/SeriesTM体系结构的计算机系统,应理解本发明可在其他计算机系统上实现。
图3是根据优选实施例的表示为存储器202的组件的、数据库系统101的主要软件组件的概念图示。如本领域内公知的,操作系统内核301是提供多种低级软件功能例如设备接口、存储页管理和多个任务的管理和调度等的可执行代码和状态数据。具体地,操作系统301包括至少一个网络访问功能302。网络访问功能302是通过网络接口214与一个或多个外部网络尤其是网络104通信的软件。网络访问功能302通常代表特别地包括数据库管理系统311的数据库服务器系统101内执行的应用处理网络通信。尽管网络访问功能302示出为操作系统内核301的一部分,但是作为另一种选择,它可以是分离的软件模块。
结构化数据库303包含数据库系统101维护的数据,并且该系统将对该数据的访问提供给多个用户(客户机)。如本领域内公知的,数据库303包含一个或多个表304、305(图3内示出两个表),每个表具有多个项或记录,每个项包含至少一个(通常有多个)字段。数据库表304、305可能包含计算机系统提供给用户的几乎任何类型的数据。一个或多个辅助数据结构306-309与数据库表相关联,所述辅助数据结构有时也被称为元数据。辅助数据结构表征了数据库及其中数据的结构,并可用于数据库管理尤其是执行对数据库的查询中涉及的各种任务。辅助数据结构的示例包括数据库索引306-307、物化(materialized)查询表(MQT)308和直方图309,应理解可存在其他类型的元数据。
数据库管理系统311提供了用于管理数据库303的基本功能。数据库管理系统311理论上可支持任意数量的数据库表,这些表可具有或不具有相关的信息,虽然图3内仅示出两个表。数据库管理系统311优选地允许用户执行基本数据库操作例如定义数据库,改变数据库的定义,创建、编辑和删除数据库内的记录,查看数据库内的记录,定义数据库索引等。在数据库管理系统311支持的功能中有对数据库表304、305内的数据进行查询。数据库管理系统311内的查询支持功能包括查询优化器312和查询引擎313。优化器312根据目前已知的或以后开发的多种技术中的任何一种生成用于执行数据库查询的查询执行策略,即将检查记录是否满足查询条件的步骤的顺序。引擎313根据优化器312生成的策略执行查询。
数据库管理系统311还可包含多种更先进的数据库功能中的任何一种。尽管数据库管理系统311在图3内表示为与操作系统内核301分开的实体,但是应理解,在一些计算机体系结构中,多种数据库管理功能与操作系统集成在一起。
除了内部状态信息和其他数据之外,数据库管理系统311可在执行期间生成大量的临时数据结构,所述临时数据结构表示为数据结构315-316。这些临时结构尤其在查询执行期间经常生成以保持中间查询结果。这种临时结构的数量可大大改变,并且可更大得多。
尽管图3中示出具有两个数据库表304、305,两个索引306-307,一个MQT 308和一个直方图309的一个数据库303,但是这种实体的数量可改变,并且可更大得多。计算机系统可包含多个数据库,每个数据库可包含多个表,并且每个数据库可具有与其相关联的多个索引、MQT、直方图、或未示出的任何其他辅助数据结构。作为另一种选择,图3内所示的一些实体可能不是存在于所有数据库内;例如,一些数据库可能不包含具体化的查询表或类似物。另外,数据库303在逻辑上可以是存储在多个计算机系统上的更大的分布式数据库的一部分。尽管数据库管理系统311在图3内示出为数据库303的一部分,但是数据库管理系统311,作为可执行代码,有时被认为是与“数据库”即数据分离的实体。
在优选实施例内,至少一些使用数据库的客户机通过中间层系统102访问数据库,该中间层系统生成向数据库管理系统311的对服务的请求,并接收来自数据库管理系统311的响应。但是,数据库系统101可任选地包括额外的用户应用317、318,所述应用直接使用命令接口314或某种其他机制来调用数据库管理系统311访问数据库302内的信息,而不通过中间层系统102传送请求。作为另一种选择,尽管用户应用将通常调用数据库管理系统来访问数据库内的数据,但是用户应用可使用其自己的内建的访问例程直接访问数据库表。
图4是根据优选实施例的表示为存储器202的组件的、中间层系统102的主要软件组件的概念图示。操作系统内核401和网络访问功能402提供的功能分别类似于数据库系统101的操作系统内核301和网络访问功能302的那些功能。尽管提供的功能是类似的,但是操作系统301和401并不一定相同(但是它们可能相同)。网络访问功能402通过网络接口214与网络104、105通信,所述网络可以是在不同协议下操作的不同的网络,在相同协议下操作的不同的网络,或同一网络。在优选实施例内,网络105是因特网。
中间层服务器设施403担当客户机代表来访问一些或多个数据库,并尤其访问数据库303。在优选实施例内,中间层设施403向通过因特网与中间层系统102通信的多个客户机103呈现一交互式的万维网接口。即,中间层设施403生成HTML或其他合适的格式的交互式网页以便由在客户机系统103内执行的web浏览器应用查看。对于客户机103,中间层设施403用作服务器,而客户机不知道中间层设施403后面的任何应用。但是,在一些事务中,中间层实际上用作中介物。它将从客户机103接收到的数据(例如访问数据库303的请求)从HTML或其他基于web的格式转化成适于被数据库管理系统311使用的格式,即与命令接口314相适合的命令格式。它还从数据库管理系统311接收具有数据库的本机格式的对其请求的响应,并将这些响应内的信息转化成适合于客户机的某种形式例如基于web的格式。
在优选实施例内,中间层设施403包括应用服务器404,和一个或多个中间层应用407、408(图4中示出两个中间层应用,应理解该数目可改变)。应用服务器404是用于通常代表中间层的应用407、408支持数据库访问的框架或外壳。在其他特征中,应用服务器404包含用于以多种常用的本机数据库格式访问数据库的一组功能(连接设施)。应用407、408是为了代表客户机103执行某组特定的服务器功能而开发的代码,至少一些所述功能要求访问数据库。应用407、408接收客户机请求,并根据需要确定访问数据库内的数据。如果应用407、408要求数据库访问,则它调用应用服务器404的连接设施以访问数据库。应用服务器404从数据库接收到响应,这些响应通常被转发给合适的应用。应用407、408通过共同接口409与应用服务器404通信,该接口独立于应用和要被访问的数据库。在优选实施例内,接口409符合JAVA 2 Enterprise Edition(J2EE)接口规范,虽然作为另一种选择可使用其他接口。在优选实施例内,应用服务器404是IBM WEBSPHERETM应用服务器的修改版本,应理解作为另一种选择可使用其他形式的应用服务器设施。
应用服务器404包括接口监视功能405,其监视通过接口409的数据访问并维护访问历史表406。监视功能405优选地以各自的计数器的形式在访问历史表406内记录访问一个或多个数据库表内的特定字段的历史。如下文将详细说明的,此数据用于确定当代表应用407、408访问数据库时应从数据库303请求哪些字段。
中间层系统102还包括多个本地数据库表高速缓存对象410、411,图4中示出两个该对象,应理解此数目可改变,并且通常更大得多。每个高速缓存对象410、411被应用服务器404管理,并临时存储来自数据库303的数据库表304、305各自的某一部分。具体地,每个高速缓存对象通常存储对应的数据库表内的全部项或记录的某一较小的子集。此外,对于高速缓存对象410、411内存储的每个数据库表项或记录,该高速缓存对象可包含对应项的全部字段(即,从中得到该项的数据库表内的所有字段),或者可仅包含对应项的字段的某一子集。当应用407、408调用应用服务器404的连接设施以获得数据库数据时,应用服务器将试图从现有的高速缓存对象满足对数据库数据的请求,并且如果需要访问数据库303以便获得数据,则将获得的数据临时存储在本地高速缓存对象内以便以后可能访问。这样,应用407、408并不知道存在本地高速缓存对象。在优选实施例内,每个高速缓存对象410、411是符合Sun Microsystems发布的EnterpriseJAVA Beans(EJB)规范的数据结构,应理解高速缓存对象可使用任何合适的其他可选择的结构。
各种软件实体在图3和/或4内示出为是单独的实体或者被包含在其他实体内。但是,应理解,此表示仅是为了说明,特定的模块或数据实体可以是单独的实体,或者公用模块或模块包的一部分。此外,尽管图3和4的概念图示中示出一定数量和类型的软件实体,但是应理解,这种实体的实际数量可改变,并且尤其是在复杂的数据库服务器环境内,这种实体的数量和复杂性通常要大得多。另外,尽管在图3和4内所示的各种软件组件位于两个计算机系统上,但是这些实体作为另一种选择可被包含在一个计算机系统上,或者可分布在多于两个的若干系统中。例如,用户应用可位于与数据库分离的系统上;数据库表数据可分布在多个计算机系统中,因而将对数据库的查询传送给远程系统以便解析,等等。
尽管图3和4的软件组件概念性地示出为位于存储器202内,但是应理解,通常计算机系统的存储器过小而不能同时保持所有程序和数据,并且信息通常存储在包括一个或多个海量存储设备例如旋转磁盘驱动器的数据存储设备125-127内,并且操作系统根据需要将信息入页(page into)到存储器内。具体地,数据库303通常过大而不能装入存储器,并且通常任何时候仅将全部数据库记录的一小部分装入存储器。整个数据库303通常记录在盘存储器125-127内。此外,应理解,图3和4的概念性图示并不是要暗示任何特定的存储器组织模型,系统101或系统102可使用单个地址空间虚拟存储器,或可使用交叠的多个虚拟地址空间。
图5是根据优选实施例的数据库表304、305的结构的概念图示。每个数据库表304、305包含多个各自的数据库项(也被称为记录或行)501、502,每个项包含多个数据值,这些数据值在逻辑上被组织成多个数据字段,字段503-505示出为属于表304,字段506-508属于表305。每个数据库表304、305在图3内在概念上表示为表或阵列,其中行代表数据库项或记录,而列代表数据字段。但是,如本技术领域内公知的,存储器内的数据库的实际结构通常因存储器组织、满足存储器更新等的需要而改变。数据库表将常常占据不邻接的存储块;非常大的表将分成多个文件或其他结构;数据库记录的长度可改变;一些字段可能仅存在于数据库记录的子集内;并且各个项可能是不邻接的。数据的一些部分甚至可存在于其他计算机系统上。可能需要多种指针、数组或其他结构(未示出)来标识数据库内包含的不同数据的位置。此外,如数据库设计中已知的,常常一个表内的字段用作另一个表内的项的索引,从而引用另一个表内的附加数据;这种索引有时被称为“代理键”(surrogate key)或“外键”。
图6是根据优选实施例的访问历史表406的概念图示。访问历史表406包含多个分离的部分或子表601、602,图6内示出两个子表。每个部分或子表601、602对应于相应的数据库表304、305,并具有由其对应的数据库表内的字段的数量指定的结构。即,访问历史表的不同子表601、602的结构可根据与该部分对应的数据库表内的字段的数量改变。
访问历史表406的每个子表601、602包含相应的一组一个或多个项或记录603、604(表示为各个子表的行)。每个项603、604对应于相应的中间层应用407、408。在任何一个子表内,存在一个和唯一一个对应于各自的中间层应用的项;但是,由于访问历史表可包含多个子表,所以可存在对应于相同中间层应用的多个项。
每个项603、604包含相应的中间层标识符605、606,访问计数器607、608,和字段计数器609-614。中间层应用标识符605、606标识该子表项对应的中间层应用。访问计数器607、608包含对应的中间层应用进行的对该子表对应的数据库表内的数据的访问请求的数量的计数,即通过接口409的数据请求的数量。(此数量不一定与数据库303服务的请求的数量相同,因为一些请求可从本地表高速缓存对象410、411内高速缓存的数据满足。)每个字段计数器609-614对应于该子表对应的数据库表的相应字段。例如,字段计数器609-611对应于数据库表304的相应字段503-505,而字段计数器612-614对应于数据库表305的相应字段506-508。每个字段计数器包含包括对应字段的、对应的中间层应用进行的访问请求的数量的计数。
根据优选实施例,应用服务器404为中间层应用407、408提供了访问数据库303内的数据的装置。因此,应用服务器404用作中间层应用的服务器。应用407、408的访问请求通过接口409,应用服务器获得请求的数据,并且该数据通过该接口返回给请求应用。只要接口协议得到遵守,中间层应用并不关心应用服务器如何获得请求的数据。监视功能405监视通过接口409的访问请求,并增加访问历史表406内的合适的计数器以保持对每个中间层应用访问的字段的精确计数。应用服务器使用这些计数器来确定应从数据库303请求哪些字段并将其高速缓存在高速缓存对象410、411内。
图7是示出根据优选实施例的通过中间层系统来服务访问数据库的客户机请求的过程的高层流程图。参照图7,流程图分成垂直延伸的三个部分,它们指示在客户机、中间层应用和应用服务器中的每一个内执行的操作。客户机以对客户机方便的形式制定对要求访问一个或多个数据库内包含的信息的服务的请求(步骤701)。在优选实施例内,客户机执行交互式web浏览器过程,并且通过在中间层系统提供的网页的输入字段内交互地输入合适的信息来制定该请求。但是,在客户机处制定请求可通过不同的方法实现,不需要是交互式的,并且不需要使用基于web的协议。客户机制定的请求传输给中间层系统以便由中间层应用处理。
在接收到来自客户机的请求时,中间层应用开始处理该请求(步骤702)。根据中间层应用的目的,处理可包括任意数量的任意复杂的步骤。在处理期间的某一点,应用需要访问数据库303保持的数据,并根据接口409的要求制定对这样的数据的请求(步骤703)。这种请求将标识从中将获得数据的一个或多个数据库表,以及将获得的这些表的字段。如本领域内已知的,请求可以如对单个数据库记录内的单个字段的值的请求那样简单,或者可以是请求满足某一组逻辑条件的所有数据库记录(或这种数据库记录的选择性字段)的复杂查询。通过接口409将此请求传递给应用服务器404。
然后,应用服务器404服务于该请求,即获得请求的数据。在应用服务器内服务该请求的过程在图7内示出为步骤704,并且在图8内更详细地示出。通过接口409将该数据返回给请求中间层应用。
单个客户机请求可使中间层应用生成多个对数据的请求,这些请求可针对单个数据库或多个不同的数据库。通常,客户机仅请求一般意义上的服务而不提及特定数据库,并且中间层应用确定将被访问的数据的位置(或多个位置)。如图7所示,中间层应用第二次请求数据(步骤705),并且应用服务器响应于该第二请求提供请求的数据(步骤706)。尽管图7内示出中间层应用的两个对数据的请求,但是服务于原始客户机的单个请求所需的这种请求的数量可改变,并且可以非常大。
在某一点,中间层应用完成对请求的处理(步骤707),并将结果返回请求客户机(步骤708)。在接收到时,客户机根据其目的使用该响应(步骤709)。在优选实施例内,客户机内的web浏览器将此响应呈现到用户可查看的网页中,该网页显示请求的数据,确认事务或提供某些其他信息。
图8更详细地示出在图7内表示为步骤704或706的、应用服务器响应来自中间层应用的数据请求的过程。参照图8,在接收到对数据的请求时,监视功能405增加访问历史表406内的对应的计数器(步骤801)。具体地,该监视功能增加对应于请求访问的中间层应用的每个项603、604的并被包含在对应于包含将被访问的数据的数据库表304、305的子表601、602内的访问计数607、608。监视功能还增加对应于将被访问的数据库表内的字段的、这种项603、604内的每个字段计数609-614。应记得,数据请求可请求表的所有字段(在此情况下将增加对应项内的所有字段计数609-614),或仅请求字段的某一子集(在此情况下将仅增加对应于被请求的字段子集的字段计数609-614)。请求可从单个表或多个表请求数据。
应用服务器然后确定是否可从本地数据库表高速缓存对象410、411满足该请求。如果可在一个或多个本地高速缓存对象内得到所有被请求的数据,则采取从步骤802转到步骤812的“是”分支,并绕过步骤803-811。
如果任何被请求的数据不能得到,则应用服务器必须从数据库303获得数据,并从步骤802采取“否”分支。在此情况下,应用服务器参照访问历史表以确定应访问哪些字段(步骤803)。即,应用服务器从对应于请求中间层应用和将被访问的数据库表的子表601、602获得项603、604。(为了说明的清晰,在此假设将仅访问一个表,但是应理解当访问多个表时,可对于将被访问的每个单独的表重复执行步骤803-806)。如果访问计数607、608小于某一最小阈值T1(步骤804),则认为历史表内的数据样品过小而不可靠。T1优选地是预先确定的固定量。在此情况下,从步骤804采取“否”分支,并且将适用的数据库表项的所有字段标记为访问(步骤805)。
如果从步骤804采取“是”分支,则应用服务器将被请求的数据库表的选择字段标记为访问(步骤806)。仅访问选择字段以便减小某些资源上的负担,所述资源尤其是用于通过网络将被请求的数据从数据库系统101传递给中间层系统102的网络资源,和用于存储数据库表高速缓存对象410、411的中间层系统102内的本地存储资源。应理解,在分开的请求中访问数据库记录内的字段A和字段B消耗的资源通常比在单个请求内访问相同数据所消耗的资源多得多。因此,如果在对字段A的请求之后有任何可能近期发生对字段B的请求,则最好在访问字段A时获得这两个字段,从而应用服务器不必第二次转到该数据库。但是,当近期极不可能请求字段B时,可能最好仅请求字段A。
在优选实施例内,在步骤806标记为访问的字段包括(a)被请求中间层应用明确请求的任何字段;以及(b)满足最小访问历史阈值T2的任何字段。阈值T2可以是可变的或固定的。在第一可选择实施例内,T2固定为1,即将曾被请求应用访问的任何字段标记为访问。此第一可选择实施例可较简单地实现,并且在下述意义上它是包罗性的,即它将获得已被请求应用所曾使用过的所有字段,仅遗漏那些从没有被使用过(并因此可能永远不会被使用)的字段。但是,此第一可选择实施例的问题在于可能受累于过度的包罗性,因为它会请求仅非常少地使用(例如用于从故障恢复,处理异常情况等)的字段。在第二可选择实施例内,T2是可变的阈值,其是访问计数的某一较小的分数。为了计算,可通过将访问计数移位一些二进制数位来获得合适的较小的分数,例如移位7个数位以获得1/128。如果被请求的字段以至少为该适用的分数的频率被访问,则该字段将被标记为包含在数据库访问请求内;如果它不这么频繁地被访问,则它将不被包含(除非它被中间层应用明确请求)。这样,此第二可选择实施例避免了不必要地访问仅很少使用的字段。根据第二可选择实施例的可变阈值可作为另一种选择包括其他或附加的因素;例如在确定是否将字段标记为访问时可考虑该字段的长度(较小的字段具有通常较低的用于访问的阈值T2)。此外,尽管在此描述每当要进行访问时动态地进行确定,但是作为另一种选择,可能定期地或在其他基础上确定应访问哪些字段,尤其是在进行确定时可能涉及更复杂的计算的情况下。例如,定期地(例如每N个来自应用的访问),应用服务器可再评价将包含在任何访问请求内的字段,并标记位数组或类似的数据结构(未示出)以指示将被访问的字段。
在步骤805或806将合适的字段标记为访问之后,应用服务器在数据库表高速缓存对象410、411内为将从数据库获得的数据分配空间(步骤807)。具体地,分配足够大小的空间以容纳被标记的字段,但是不必容纳以上没有被标记的、数据库表的其他字段。因此,通过在步骤806仅标记选择的字段,可减小在步骤807进行的分配的大小。
应用服务器构建向数据库的、对由来自中间层应用的原始请求指示的数据库表项的请求,该请求仅包括在步骤805或806标记的、数据表项的那些字段(步骤808)。然后将此请求传递给数据库303(步骤809),这通常但不一定涉及通过网络传输。数据库303处理该请求并返回被请求的数据(步骤810)。将该被返回的数据存储在先前分配的本地高速缓存对象中(步骤811)。该被返回的数据可包括比应用最初请求的数据多的数据(即记录的更多字段)。应用服务器然后返回该应用请求的数据(步骤812)。
如上所述,历史表406内的值简单地随时间累积。但是,可能有理由使历史表406内的数据老化以及有时无效。例如,如果特定应用由相同应用的新版本改变,则数据访问的模式将不再能被认为是可靠的。此外,数据库内的数据的改变以及其他环境改变可使得应用访问的字段的模式随时间逐步改变。在优选实施例内,如果修改应用,则将对应于该应用的历史内的每个项复位为零,从而过期数据不会歪曲未来的结果。可使用其他传统的用于使数据老化的技术来解决应用访问的数据库字段的模式随时间逐步变化的问题。
文中被描述为优选实施例的技术的优点包括在访问数据库尤其是通过网络访问时它可大大减小资源利用,同时仍使用具有标准接口的程序开发外壳或框架。由于优选实施例的应用服务器符合与其支持的应用的标准接口,所述应用开发人员可使用和再使用大量编程对象中的任何一个来设计它们的应用,从而降低开发成本。
在优选实施例内,应用服务器和应用一起形成中间层设施,该中间层设施担当优选地通过网络连接到中间层的多个客户机的服务器,并当那些客户机访问数据库时代表这些客户机。但是,在其他可选择实施例内,可仅存在客户机和服务器两层,其中应用(和应用服务器)形成客户机,而数据库形成服务器。即,在此可选择实施例内,不存在发出对服务的请求的其他客户机,而请求源自应用自身。此外,尽管旨在获得数据库数据的事务通常在此被称为“请求”,这与典型的客户机-服务器模式一致,但是应理解,根据系统体系结构,作为另一种选择,所述事务可被表征为“命令”、“函数调用”等。
通常,被执行以实现所说明的本发明的实施例的例程,不管是实现为操作系统的一部分还是实现为特定应用、程序、对象、模块或指令序列,在此都被称为“程序”或“计算机程序”。该程序通常包括这样的指令,所述指令当被符合本发明的计算机系统内的设备或系统内的一个或多个处理器读取和执行时,使得这些设备或系统执行执行体现本发明的各个方面的步骤或生成体现本发明的各个方面的元件所必须的步骤。此外,尽管已经在此以及在下文将在全功能的计算机系统的上下文内说明本发明,但是本发明的多个实施例能够作为表现为多种形式的软件产品分发,并且不管用于实际实现分发的信号承载介质的具体类型如何,本发明均可同样地应用。信号承载介质的示例包括但不局限于可记录类型的介质例如易失和非易失的存储设备、软盘、硬盘驱动器、CD-ROM、DVD、磁带,以及传输类型的介质例如通信网络。信号承载媒质的示例在图2内示出为系统存储器202和数据存储设备225-227。
尽管已公开本发明的特定实施例以及一些可选择变型,但是本领域内的那些技术人员将认识到,可在下面权利要求给出的范围内在形式和细节上做出另外的改变。
权利要求
1.一种用于访问至少一个数据库计算机系统上的数据库的方法,所述数据库具有多个字段,所述方法包括以下计算机执行的步骤自动维护关于对所述数据库内包含的数据的数据请求的历史数据;接收到数据请求,所述数据请求请求所述数据库的字段的第一子集内包含的数据,所述第一子集小于所述数据库的全部字段;响应于接收到所述数据请求,自动使用所述历史数据确定将被请求的、所述数据库的字段的第二子集,所述第二子集小于所述数据库的所有字段,所述第二子集包括所述第一子集和所述第一子集内不包含的至少一个字段;以及响应于所述使用所述历史数据确定字段的第二子集的步骤,自动向所述数据库发出对所述字段的第二子集内的数据的请求。
2.根据权利要求1的用于访问数据库的方法,其中,所述方法在用于代表一个或多个应用访问所述数据库的应用服务器内执行。
3.根据权利要求2的用于访问数据库的方法,其中,所述应用服务器为所述一个或多个应用接收具有共同的与数据库无关的格式的所述数据请求,并以所述数据库需要的格式将所述请求发送给所述数据库。
4.根据权利要求2的用于访问数据库的方法,其中,所述一个或多个应用是中间层应用,所述中间层应用为通过网络与所述中间层应用通信的多个客户机执行服务。
5.根据权利要求1的用于访问数据库的方法,其中,所述方法在请求计算机系统内执行,所述请求计算机系统不同于所述至少一个数据库计算机系统,所述请求计算机系统通过网络与所述至少一个数据库计算机系统通信。
6.根据权利要求5的用于访问数据库的方法,还包括以下步骤在所述请求系统内接收到对针对所述数据库的所述请求的响应;以及将对针对所述数据库的所述请求的所述响应内包含的数据高速缓存在所述请求系统内以用于响应随后的数据请求。
7.根据权利要求1的用于访问数据库的方法,其中所述自动维护历史数据的步骤包括为发出数据请求的多个相应的请求实体中的每一个维护单独的历史数据;以及其中所述自动使用所述历史数据确定将被请求的、所述数据库的字段的第二子集的步骤包括自动使用对应于发出所述数据请求的请求实体的所述单独的历史数据来确定所述字段的第二子集。
8.一种被应用服务器用于访问数据库的方法,所述应用服务器为一个或多个应用提供数据库访问功能,所述方法包括以下步骤维护关于所述一个或多个应用要求的来自所述数据库的数据的历史数据;接收来自所述一个或多个应用的数据请求,所述数据请求请求所述数据库内包含的数据,所述数据请求符合共同的与数据库无关的接口;以及响应于至少一些所述数据请求,生成相应的访问所述数据库的请求,每个所述访问所述数据库的请求标识相应的将响应于该请求被返回的所述数据库的一个或多个字段的子集;其中对于至少一些访问所述数据库的所述请求,所述相应的子集包含的字段小于所述数据库的全部字段;其中所述数据库的一个或多个字段的每个所述相应的子集由所述应用服务器使用所述历史数据的数据而不是这样的数据请求来确定,响应于该数据请求生成了该相应的子集。
9.根据权利要求8的方法,其中,所述一个或多个应用是为通过网络与所述中间层应用通信的多个客户机执行服务的中间层应用。
10.根据权利要求8的方法,其中,所述访问所述数据库的请求通过网络被传递给至少一个数据库计算机系统,该数据库计算机系统不同于执行所述应用服务器的所述多个计算机可执行指令的所述至少一个计算机系统。
11.根据权利要求10的方法,其中,所述应用服务器接收到对所述访问所述数据库的请求的响应,并将对访问所述数据库的所述请求的所述响应内包含的数据高速缓存在执行所述应用服务器的所述多个计算机可执行指令的所述至少一个计算机系统内,以用于响应随后的数据请求。
12.根据权利要求8的方法,其中,所述应用服务器通过监视所述数据请求并记录所述一个或多个应用请求的所述数据库的字段生成所述历史数据。
13.根据权利要求9的方法,其中所述应用服务器为多个所述应用中的每一个生成单独的所述历史数据;以及其中所述应用服务器使用对应于发出这样的数据请求的请求应用的所述单独的历史数据,所述访问数据库的请求是响应于该数据请求的。
14.一种用于访问数据库的应用服务器计算机程序产品,所述应用服务器为一个或多个应用提供数据库访问功能,该产品包括记录在信号承载介质上的多个计算机可执行指令,其中所述指令在被至少一个计算机系统执行时使得该至少一个计算机系统执行权利要求1-13中的任何一个的方法中的步骤。
15.一种用于访问至少一个数据库计算机系统上的数据库的请求计算机系统,所述数据库包含多个字段,该请求计算机系统包括至少一个存储器;用于存储数据包括可在所述至少一个处理器上执行的指令的存储器;体现为可存储在所述存储器内并且可在所述至少一个处理器上执行的指令的数据库访问设施,所述数据库访问设施响应来自多个请求实体的对数据库数据的数据请求,至少一些所述请求要求访问所述数据库,所述数据库访问设施响应于至少一些所述数据请求生成访问所述数据库的请求,每个所述访问所述数据库的请求标识相应的将响应于该请求返回的、所述数据库的一个或多个字段的子集;其中所述数据库访问设施生成关于所述请求实体所要求的、所述数据库的字段的历史数据;以及其中所述数据库访问设施使用关于所述请求实体所要求的所述数据库的字段的所述历史数据自动确定所述数据库的一个或多个字段的每个所述相应的子集。
16.根据权利要求15的请求计算机系统,其中,所述数据库访问设施包括应用服务器,该应用服务器向至少一个应用提供数据库访问功能,所述应用服务器使用所述数据库定义的接口与所述数据库通信,并提供共同的与数据库无关的接口以便与所述至少一个应用通信。
17.根据权利要求16的请求计算机系统,其中,所述至少一个应用是中间层应用,该中间层应用为通过网络与所述中间层应用通信的多个客户机执行服务。
18.根据权利要求15的请求计算机系统,其中,所述请求计算机系统和所述至少一个数据库系统是分离的计算机系统,所述请求计算机系统通过网络与所述至少一个数据库计算机系统通信。
19.根据权利要求18的请求计算机系统,其中,所述数据库访问设施接收到对访问所述数据库的所述请求的响应,并将对访问所述数据库的所述请求的所述响应内包含的数据高速缓存在所述请求计算机系统内,以用于响应随后的数据请求。
20.根据权利要求15的请求计算机系统,其中,所述数据库访问设施通过监视所述数据请求并记录所述数据请求内的、所述请求实体请求的字段来生成所述历史数据。
21.根据权利要求15的请求计算机系统,其中所述数据库访问设施为各个发出数据请求的请求实体中的每一个生成单独的所述历史数据;以及其中所述数据库访问设施使用对应于发出这样的数据请求的请求实体的所述单独的历史数据,所述访问数据库的请求是响应于该数据请求的。
全文摘要
用于访问数据库的数据库访问设施包括监视数据库数据的请求者的访问的监视功能。该监视功能跟踪请求哪些数据库字段以动态确定应用需要的字段。一旦获得足够的跟踪数据,则应用服务器自动修改代表该应用随后对数据库数据的访问以仅请求可能需要的字段。优选地,数据库访问设施是在三层客户机-服务器环境内代表多个客户机访问数据库的一个或多个中间层应用的应用服务器。
文档编号G06F17/30GK1904891SQ200610091838
公开日2007年1月31日 申请日期2006年6月12日 优先权日2005年7月28日
发明者W·T·纽波特, J·J·斯特克, R·维希涅夫斯基 申请人:国际商业机器公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1