一种用于存储和检索任意内容和应用数据的设计的制作方法

文档序号:6404677阅读:216来源:国知局
专利名称:一种用于存储和检索任意内容和应用数据的设计的制作方法
技术领域
本发明一般涉及电子实体的存储和检索。更具体地说,本发明涉及基于检测到表明一种不同的结构将提供改进的性能的条件,而自动改变一个存储和检索系统的数据结构。
背景技术
某些数据存储与检索机制使用查找关键字来存储和识别数据。这样的机制包括高速缓存器、关联数组以及数据库。关键字根据一种特定的内部数据结构与相应数据关联。这些内部数据结构可以,例如,包括树、散列、栈和表。这些数据结构中的每一种都使数据能以一种不同的方式进行存储,从而提供不同的性能特性。下面简要地说明某些这样的数据结构。
一张表简单地就是一个未排序的集合(一份列表),它列出所有的关键字以及相应的数据。散列是一个关联数组,在其中,一个关键字被转换为散列表中的一项。散列表中的一项定义了相应的数据在散列表中的存储位置。散列表是静态的,并且可以只填写其中一部分。树是一种分层的数据结构,在其中,各关键字以及它们所关联的数据以一种排序的方式被存储。栈是仅被部分地排序的一棵树。混合结构可以,例如,将第一层的树或栈跟第二层的散列或表组合在一起。
不同的数据结构对不同的使用来说是最佳的。因而,为了在特殊的应用中使用而选择一种数据结构典型地取决于所预期的数据使用方式,以及待存储的数据量,以及对所需数据的存取类型。用以说明这些因素的特殊性越大,开发者就能越精确地为此项应用选择一种“最佳”的数据结构。
因此,显而易见的是,为了在一项应用中提供最佳性能而选择一种数据结构所涉及的问题之一就是确定该数据结构将被使用的条件。同时,相对容易的是确定诸如将被存储的数据的类型,以及所需的存取的类型,要确定诸如存取的频率或者用以进行存取的任何模式这样的事情通常更加困难。
由于在根据什么因素来确定哪一种数据结构是“最佳的”这个问题上是难以预测的,所以,其结果是,软件开发者只有简单地对哪一种类型的数据结构最终能提供最佳性能这个问题作出基于经验的猜测。这种猜测可能是精确的,也可能是不精确的。若开发者已经选出一种实际上不是最佳的数据结构,则由于所选出的数据结构的次最佳性能,将会使此项应用的性能实质上降低。

发明内容
借助于本发明的不同的实施例,上面所列出的一个或多个问题将能得到解决。广义地说,本发明包括,通过能响应于检测到表示切换将改进性能的条件,动态地从一种内部数据结构切换到另一种数据结构,来改进数据存储与检索系统的性能的系统与方法。这些系统和方法提供一种机制,用以在系统运行时收集统计数据,并且在必要时修改系统的内部数据结构,以便为当前的使用提供最佳的性能。这些系统和方法可应用于那些使用关键字来存储和识别数据的任何存储与检索系统,并且特别地可应用于Web高速缓存。
本发明的一个实施例包括一种方法,在其中,提供一种第一内部数据结构,用以存储多个对象。当一个在其中实现了第一内部数据结构的系统运行时,该第一内部数据结构就被使用,同时,第一内部数据结构的使用受到监测。周期性地确定与第一内部数据结构的使用相关的成本。根据经验的使用数据或者按照统计学方法估计的使用数据,来确定与可供替代的内部数据结构的使用相关的成本。与可供替代的内部数据结构相关的成本还可以包括从第一内部数据结构转换到该可供替代的内部数据结构所需的成本。然后将第一和该可供替代的内部数据结构二者的成本加以比较,以确定该系统是否应当转换到使用该可供替代的内部数据结构。若为否,则继续使用第一内部数据结构。若为是,则创建该可供替代的内部数据结构,并将数据从第一内部数据结构迁移到该可供替代的内部数据结构,开始使用该可供替代的内部数据结构进行操作,并删除第一内部数据结构。
本发明的另一个实施例包括一个系统,在其中实施一种类似于上述方法的方法。在一个实施例中,该系统包括一个网络代理,它具有一个数据处理器和一个存储器,其中,该数据处理器被配置成实现一个在存储器中使用第一内部数据结构的高速缓存器。高速缓存器中的每一项都包括一个作为数据对象的Web页面以及一个作为关键字的相应的统一资源定位符(URL)。该数据处理器被配置成监测高速缓存器的使用,并且周期性地确定与第一内部数据结构以及一种可供替代的内部数据结构的使用相关的成本。基于经验的使用数据或者按照统计学方法估计的使用数据来确定与可供替代的内部数据结构的使用相关的成本,该成本包括将从第一内部数据结构切换到该可供替代的内部数据结构所需的成本。数据处理器对第一和该可供替代的内部数据结构的成本进行比较,以确定系统是否应当切换到使用该可供替代的数据结构。若比较结果表明应当切换,则数据处理器创建该可供替代的数据结构,并将数据从第一内部数据结构迁移到该可供替代的内部数据结构,开始将该可供替代的内部数据结构应用于该高速缓存器,并且删除第一内部数据结构。
本发明的另一个实施例包括一种软件应用程序。该软件应用程序被收录于一种计算机可读介质之中,例如软磁盘、CD-ROM、DVD-ROM、RAM、ROM、数据库模式,以及诸如此类。计算机可读介质含有一些指令,这些指令被配置成使计算机执行一般如上所述的方法。要注意的是,计算机可读介质可以包括构成计算机系统的一部分的RAM或其他存储器。由此,计算机系统就能执行一种按照本发明公开内容的方法,并且被认为在所附权利要求书的范围内。
许多附加的实施例也是可能的。


通过阅读以下的详细说明并参照诸附图,将使本发明的目标和优点变得更加明显。
图1是表示使用网络代理的网络系统的示例性体系结构图。
图2是表示根据本发明一个实施例的适于用作网络代理的计算机的基本配置图。
图3是表示根据本发明的一个实施例的一种简单方法的流程图。
图4是在一个实施例中,当把网络代理高速缓存器的内部结构从表改变为栈时,本高速缓存器系统所采取的详细步骤。
在诸附图以及附带的详细说明中,借助于实例来表示特定实施例的同时,本发明也可以经受各种各样的修改以及具有可供替代的形式。然而,应当理解,本发明人不打算用附图和详细说明来将本发明局限于所描述的特定实施例。取而代之的是,作者打算覆盖所有的修改、等同物以及替代方案,它们落在由所附权利要求书所规定的本发明的范围之内。
具体实施例方式
下面将说明本发明的一个优选实施例。要注意的是,这个实施例以及任何其他的实施例都是示例性的,用以说明本发明,而不是限制本发明。
广义地说,本发明包括通过响应于检测到表示切换将改进性能的条件,动态地从一种内部数据结构切换到另一种内部数据结构,来改进数据存储与检索系统的性能的系统和方法。这些系统和方法提供一种机制,用以在系统的运行过程中收集关于该系统的统计数据,并且在必要时,修改该系统的内部数据结构,以便为当前的使用提供最佳的性能。这些系统和方法可应用于那些使用关键字来存储和识别数据的任何存储与检索系统,并且特别地可应用于Web高速缓存。
本发明的一个实施例包括在网络代理中实现的一个动态地自修改的Web页面高速缓存器系统。该Web页面高速缓存器被配置成使用各URL作为关键字来存储各Web页面。随着网络代理的运行,各Web页面就被存储在Web页面高速缓存器之中,并且可以从Web页面高速缓存器中被检索出来。在高速缓存器之中的各Web页面也可以被更新或被清除。
对Web页面高速缓存器的运行进行监测,以确定使用当前数据结构(表)的高速缓存器的运行成本。周期性地将当前的运行成本跟针对一种或多种可供替代的数据结构而计算出来的运行成本进行比较。可以根据估计的使用数据或者凭经验确定的使用数据来计算与可供替代的数据结构相关的成本。Web页面高速缓存器系统还计算与从当前使用的数据结构到可供替代的数据结构的切换相关的成本。若当前使用的数据结构的成本高于可供替代的数据结构的成本加上切换到可供替代的数据结构的成本,则Web页面高速缓存器就启动转换到后一种数据结构的切换。这实质上包括创建可供替代的数据结构,将数据从当前使用的数据结构迁移到可供替代的数据结构,以及从原先的数据结构(表)到现在的可供替代的数据结构的运行转换。然后删除原先的数据结构。
当Web页面高速缓存器开始运行于可供替代的数据结构时,在当前的使用条件下,使用这种数据结构的高速缓存器的运行成本要低于使用先前的数据结构的运行成本。然而,Web页面高速缓存器继续监测它的运行,若使用条件发生改变,则可以通过切换回到使用先前的数据结构或另一种数据结构。因此,Web页面高速缓存器根据各项条件,通过从次最优的数据结构切换到最优的数据结构,来优化其性能。
应当注意的是,虽然本公开内容集中在网络代理的Web页面高速缓存器中实现的本发明的各实施例,但是,本发明可以更广泛地应用于使用关键字来存储和识别数据的任何存储与检索系统。例如,另一个实施例可以包括一个高速缓存器,它被配置成存储各参数集。这些参数集含有这样的信息作为配置数据(例如,各项参数数值以及各相应的名字),或者网络连接数据(例如,连接所使用的协议以及连接所涉及的系统和端口)。由于在各Web页面的高速缓存中所涉及的存储模式相当容易理解,在不同应用之间,甚至在不同用户之间,参数集的使用数据可能发生大幅度的改变,所以这样的实施方式可以提供比Web页面高速缓存器实施方式更大的性能改进。因此,参数集高速缓存器就能从本系统和本方法对改变使用模式的适应性中得到更大的好处。在一个文件系统高速缓存器中实现的一个实施例就是可能从本系统和本方法的适应性中取得较多好处的实施方式的另一个实例。然而,本公开内容将集中在网络代理的实施方式,因为它们可以提供关于本发明的一些更容易理解的实施例。
如上所述,本发明的一个优选实施例是在网络代理中实现的。参照图1,该图示出了使用网络代理的一个网络系统的示例性的体系结构。在图中,该体系结构包括一部客户计算机12,它被连接到网络代理14,后者又被连接到一个Web页面服务器16。网络代理14包括一个缓冲器子系统18。客户计算机12经由一个第一网络13被连接到网络代理14。网络代理14通过第二网络15被连接到Web页面服务器16。人们设想网络13和15当中至少有一个包括因特网。这些网络中的另一个可以包括一个特定企业的内部或外部网络。然而,应当注意的是,为了本发明的目的,不需要以任何特殊的方式对客户计算机12、网络代理14以及Web页面服务器16进行配置。
代理管理介于一个客户机装置或一段程序(诸如一个Web页面浏览器)以及一个服务器装置或程序(诸如一个Web页面服务器)之间的通信。在一个基于Web页面的系统中,代理管理着各客户机对Web页面内容的请求,以及响应于这些请求,由Web页面服务器提供的Web页面内容。在管理这些通信的过程中,代理负责仿真Web页面服务器,并且由此减轻系统(Web页面服务器以及网络本身二者)的负载。代理通过存储由Web页面服务器提供的某些内容来做到这一点,并且,当有可能时,响应于对该项内容的请求,向各客户机提供此项已存储的内容。这样一来,代理减轻了Web页面服务器服务于各客户机的请求的一部分负担。
参照图2,这是表示根据本发明的一个实施例的适于用作网络代理的一部计算机的基本配置图。服务器14在计算机系统100中实现。计算机系统100包括一个中央处理单元(CPU)112,只读存储器(ROM)114,随机存取存储器(RAM)116,硬盘驱动器(HD)118以及输入输出设备(I/O)120。计算机系统100可以具有多于一个的CPU、ROM、RAM、硬盘驱动器、输入输出设备或其他各硬件组件。可是,计算机系统100被描绘为每一种类型的组件仅有一个。应当注意的是,图2所示的系统是一种示例性的硬件配置的简化形式,并且许多其他可供替代的配置也都是可能的。在发明人Phillip AlveldaVII,Todd A.Stiers和Jeremy S.De Bonet于2003年1月14日提交的题为《使用共享资源以及不同应用来进行交易的方法与系统》的美国专利申请No.__(代理案卷号No.IDET 1130-1)中,更详细地描述了一种示例性的体系结构。上述专利申请书以全文的形式被收入本文,作为参考文献。
本文所描述的各种方法的一部分可以在适当的软件应用程序中实现,这些应用程序可以驻留在存储器之中,后者例如ROM 114,RAM 116或硬盘驱动器118。这些软件应用程序可以包括一些程序指令,它们被这样配置,使得数据处理器能执行本文所描述的各种方法。这些指令可以被收录到(被存储在)内部存储装置之中,后者例如ROM 114,RAM 116或硬盘驱动器118,其他的以及外部的存储装置,或者可以由数据处理器读出的存储介质,例如计算机系统100,或者甚至CPU 112。这样的介质可以包括,例如,软磁盘,CD-ROM,DVD-ROM,磁带,光学存储介质,以及诸如此类。
在本发明的一个示意性实施例中,计算机可执行的指令可以是多行编译的C++、Java,或者其他语言代码。还可以使用其他的体系结构。例如,任何一部计算机的各项功能都可以由图2所示的一部不同的计算机去执行。此外,采用这样的代码的一段计算机程序或者它的软件组件都可以在一部以上的计算机的一个以上的数据处理系统可读介质中实现。
在上述硬件配置中,不同的软件组件都可以驻留在一部单独的计算机或者各独立的计算机的任意组合之中。在可供替代的一些实施例中,某些或全部软件组件都可以驻留在同一部计算机里面。例如,代理计算机100的一个或多个软件组件都可以驻留在一部客户计算机或服务器计算机之中,或者同时驻留在二者之中。在又一个实施例中,若代理计算机所执行的各项功能已经被融合到一部客户计算机或服务器计算机之中,则不需要代理计算机。在这样一个实施例中,客户计算机以及服务器计算机都可以定向地连接到相同的网络之中。
可以使用电子、光学、射频或其他信号来完成介于客户机、服务器以及各代理计算机之间的通信。例如,当用户位于客户计算机一侧,当与该用户进行通信时,客户计算机可以将各种信号转换为人可懂的形式,并且将来自一个人的输入转换为准备由代理或服务器计算机使用的、适当的电子、光学、射频或其他信号。类似地,当运营商位于服务器计算机一侧,当与该运营商进行通信时,服务器计算机可以将信号转换为人可懂的形式,并且将来自一个人的输入转换为准备由该计算机使用的、适当的电子、光学、射频或其他信号。
如上所述,代理负责存储先前由Web页面服务器提供的信息,以便在响应客户机的请求时,能向各客户机提供这种信息。这种信息被存储在代理的Web页面高速缓存器之中。网络代理提供一种机制,用以在使用一种当前类型的数据结构的Web页面高速缓存器工作时收集统计数据,并确定与使用此种数据结构相关的成本。同时也确定在相同的使用条件下,与使用一种可供替代类型的数据结构相关的成本。若已经确定可供替代类型的数据结构运行起来比当前在用的数据结构更为有效,则Web页面高速缓存器的内部数据结构就被修改为可供替代类型的数据结构。
参照图3,这是表示根据本发明的一个实施例的一种简单方法流程图。图中描绘了在Web页面高速缓存器工作时周期性地采取的一系列步骤。根据系统的需求,这些步骤可以频繁地或不频繁地出现。例如,若使用模式十分不规则,则希望频繁地重复本方法的各步骤。若使用模式变化得很慢,则不频繁地重复这些步骤效果较好。
在图中所描绘的方法假定Web页面高速缓存器的使用受到连续监测,因此,在任何给定的时间,都可以得到使用信息,用以确定与不同的数据结构相关的成本。然后,本方法包括成本的计算,成本的比较,以及在必要时,切换到可供替代的数据结构。
本方法的第一步骤就是确定当前数据结构的运行“成本”。这里所使用的“成本”一词指的是在Web页面高速缓存器的运行中所使用的资源,包括处理时间、存储器,以及可能的其他类型的资源。通过将各项成本跟Web页面高速缓存器的每一种运行方式联系在一起,并根据在Web页面高速缓存器上已经进行的各项操作计算出总成本,来完成运行成本的确定。可以通过使用经验数据或运行中的统计数据,来将web页面高速缓存器的运行纳入到计算之中。总成本还可以纳入其他因素,例如存储数据集的大小、可用的资源数量,等等。
下一个步骤就是确定可供替代的数据结构的运行成本。加上从当前的数据结构到可供替代的数据结构的可能的转换的成本。以相同于当前的数据结构的方法,使用关于web页面高速缓存器的运行的经验或统计数据,来确定可供替代的数据结构的运行成本。
除了确定可供替代的数据结构的运行成本以外,还有必要确定从当前的数据结构转换到可供替代的数据结构的成本。由于为了开始使用可供替代的数据结构,有必要首先创建该结构,然后将来自当前的数据结构的数据装入其中,所以这是真实的。因此,运行成本的小量的改进可能被转换成本所超过,从而使得转换到可供替代的数据结构成为不实际的。
在已经确定与当前的以及可供替代的数据结构相关的成本之后,对这些成本进行比较。若与可供替代的数据结构相关的成本低于与当前的数据结构相关的成本,则启动从当前的数据结构到可供替代的数据结构的切换。应当注意的是,虽然以介于各项成本之间的简单的“小于”关系来描述比较结果,但是在其他各实施例中,可以使用更加复杂的功能来确定是否需要启动切换到可供替代的数据结构。这样的功能可以包括上述各项成本和/或考虑到各种其他因素,来确定是否需要切换到可供替代的数据结构。
若当前的数据结构的运行成本低于切换到并运行于可供替代的数据结构的预期成本,则除了在一个稍后的时间重复该处理过程以外,不采取任何动作。若切换到并运行于可供替代的数据结构的预期成本低于当前的数据结构的运行成本,则启动切换到可供替代的数据结构。切换包括创建可供替代的数据结构,将数据从当前的数据结构迁移到可供替代的数据结构,并使用可供替代的数据结构来开始运行。在切换到可供替代的数据结构之后,原先的当前的数据结构典型地被删除。
当决定是否改变一个特定的高速缓存器实例的内部数据结构时,虽然其他各种因素也可以被考虑,但是,在优选实施例中的算法通常考虑5个因素在高速缓存器中,当前存储了多少个对象?系统执行了多少次查找(或读出)?系统执行了多少次存储(或写入)?在当前的系统中,可用的存储器(空间)有多少?存储与检索系统应当使用多大的可用存储器(空间)?重新配置当前的数据结构的成本是多少?为了考虑可供替代的各种数据结构的相对成本(即,所使用的CPU时间和RAM),虽然其他各项成本也可以容易地被纳入到高速缓存器之中,但是,在当前高速缓存器系统中的算法考虑执行下列各项操作的成本从使用当前数据结构的高速缓存器中查找(或读出)一块数据(查找时间是被存储在高速缓存器中的对象的数目的一个函数。它也依赖于高速缓存器的内部数据结构;例如,一张散列表可以在恒定的时间内查找和存储一些对象)。
将一块数据存储(或写入)到使用当前数据结构的高速缓存器之中。
重构内部数据。
当前的高速缓存器系统可以根据当前的使用数据来评估两种或多种数据结构的这些成本。它可以通过使用各种存储算法的理论上的计算复杂性、通过使用经验测量数据,或者通过使用它们的某些组合,来进行成本计算。若高速缓存器决定改变其存储与检索系统的内部数据结构,则它从内部分配一个新的对象,然后从旧结构拷贝数据,并将其存储到新结构。在将所有的数据都迁移到新结构之后,高速缓存器系统就删除旧结构。
本高速缓存器系统对使用统计数据的监测以及基于监测的使用数据来作出决定为系统带来了较低的成本(在CPU时间和RAM方面)。成本依赖于,例如,高速缓存器系统检查使用统计数据有多频繁以及它所考虑的不同的内部数据结构有多少种。对于完全不需要改变数据结构的情况来说,开发者通过将程序配置为不进行任何检查,就能完全地消除成本,在这种情况下,高速缓存器系统精确地等效于当前使用的内部数据结构。
在本发明的一个优选实施例中,高速缓存器系统收集使用统计数据,并且使用各种算法来选择对存储与检索系统的实际使用来说为最佳的一种结构,然后,修改该系统的内部数据结构,以采纳最佳结构。高速缓存器系统由此就能动态地在为该系统定义的各种数据结构中,为存储与检索系统更换内部数据结构。这些数据结构可以包括树、散列、栈、表,以及各种混合结构,例如由表构成的栈。
除了内部使用统计数据以外,本高速缓存器系统可以考虑被存储的数据类型以及用以存取数据的关键字类型。由于数据和关键字的类型可以影响使用,并且由于高速缓存器系统可以根据内部使用统计数据来改变其内部数据结构,所以本高速缓存器系统允许用一种单一的编程结构来管理多种数据和关键字类型。本高速缓存器系统在为任何类型的数据和关键字生成一个高速缓存器的能力方面是新颖的。这跟现有技术中的高速缓存或其他各种存储系统形成鲜明的对比,后者只能针对使用一种特定类型的关键字的一种特定类型的数据而生成。
本文所描述的动态自修改高速缓存器可以被认为是多种内部数据结构的一个超集,其中的任何一种都可以被高速缓存器对象用来存储与检索数据。在一个实施例中,使用C++模板来实现高速缓存器,以创建不同的内部数据结构。虽然,在本优选实施例中,C++被用来表现高速缓存器系统的编程结构,但是可以使用大多数具有宏支持的Turing完全编程语言。C++模板使得写入单独的代码体以便在不同的数据类型上完成类似的任务成为不必要。它使各项任务变为抽象,允许一组C++代码可以应用于不同的数据类型。为了完成一项特定的任务,可以使用该任务所要求的特定的数据类型来说明该模板。在用于本高速缓存器系统的模板的情况下,可以使用任何类型的高速缓存器关键字和数值来说明该模板。
本高速缓存器系统使得编程人员在建立一个存储与检索系统之前,不需要了解该系统将如何被使用。一旦创建了根据本公开内容的存储与检索系统,就不需要人工地检查统计数据、创建新的数据结构,或者要求开发者或系统管理员去迁移数据。特别是,这意味着,若使用本高速缓存器系统的程序被设计在一组环境下使用,并且这些环境发生改变,则整个程序继续以最佳方式运行,并且不需要像现有技术的程序那样进行重写。
本高速缓存器系统的一个附带的好处就是处理任何类型的数据或关键字的能力。在一部计算机中,需要存储和检索多种类型的信息。当检索时间比存储时间更为重要时,高速缓存器相对于较多的存储和检索方法来说,具有许多优点。然而,在创建本高速缓存器系统之前,高速缓存器的开发被限定于被存储的内容的类型以及用以查找该数据的关键字的类型。通过对一个高速缓存器所需的基础方法进行封装,并且对该类型的关键字以及该类型的内容所特有的功能进行抽象,本方法就能生成具有单一编程结构的任意关键字和数据类型的高速缓存器。
在优选的实施例中,高速缓存器系统的定义是完全地递归的。这就是说,系统中的一个高速缓存器的一个实例可以参照于该系统中的一个高速缓存器的另一个实例。这样就允许容易地生成多层的高速缓存器系统(高速缓存器的高速缓存器),正如由发明人Jeremy S.deBonet于2003年1月16日提交的题为《用于多样式内容的存储和检索的一种多层高速缓存机制》的共同拥有的美国专利申请No.(代理案卷号No.IDET 1220-1)中所描述的那样,上述专利申请以全文形式被引入作为参考。
在另一个实施例中,根据本公开内容的一个高速缓存器对象可以被用来生成一种方法,用以保护跨越多线程的各种共享资源。在这种情况下,所使用的关键字就是资源(或变量)的名字,并且其数值就是共享资源本身。在由发明人Jeremy S.de Bonet于2003年1月15日提交的题为《一种用于保护跨越多线程的共享资源的方法》的共同拥有的美国专利申请No._____(代理案卷号No.IDET 1190-1)中,详细地描述了这个实施例,上述专利申请书以全文形式被收入本文,作为参考文献。
在优选实施例中,本高速缓存器系统被用来作为存储各Web页面和使用各URL作为各关键字的网络代理的一个Web页面高速缓存器。图4表示在一个实施例中,当把网络代理高速缓存器的内部结构从一张表改变为一个栈时,本高速缓存器系统所采取的各详细步骤。这个实施例是示例性的,并且其他各种内部数据结构都可以应用于可供替代的各实施例中。例如,在另一个实施例中,高速缓存器系统可以存储连接以及域名服务器(DNS)信息。在这种情况下,所使用的关键字就是一个服务器的名字,其数值就是该服务器的IP地址。
本优选实施例的高速缓存器系统作为具有特定的内部数据结构的一个网络代理高速缓存器来运行,在本案例中,数据结构是一张表(1010)。每次在高速缓存器(1020)中执行get,set或remove操作时,高速缓存器系统就收集使用统计数据(1030)。若操作为get(1040),则高速缓存器系统进行一次检查,以便确定是否将其内部数据结构从一张表改变为一个栈(1050)。若操作不是get(1040),则系统以一张表(1010)作为它的内部数据结构而继续运行。在这里选择get操作来进行检查纯粹是示例性的,并且可以由在该(数据)结构上所采取的任何其他操作或者由某些其他外部触发器(例如,一个定时器)来触发此项检查。
若高速缓存器系统确定它不必改变其内部数据结构(1060),则系统以一张表(1010)作为它的内部数据结构而继续运行。若高速缓存器系统确定它必须改变其内部数据结构(1060),则get功能触发此种改变。高速缓存器系统为新的数据结构(1070)生成一个新的对象(在本例中为一个栈),然后将数据从旧的数据结构(表)迁移到新的数据结构(栈)(1080)。然后,高速缓存器系统删除作为旧的数据结构的表(1090)。在这些变化正在发生的同时,用户可以在高速缓存器上执行get和set功能。这些操作是在旧的数据结构(表)以及新的数据结构(栈)二者上进行的。在已经发生这些变化之后,高速缓存器系统将作为一个网络代理高速缓存器来运行,同时以栈作为其内部数据结构(1100)。
本优选实施例实施下列算法来确定是否从当前的内部数据结构切换到可供替代的数据结构。在这个实施例中,执行指定操作的计算成本被定义如下G(x,n)为使用当前含有n个元素的数据结构x的一个get操作的成本。
S(x,n)为使用当前含有n个元素的数据结构x的一个set操作的成本,假定该元素已经存在,并且开发者正在简单地改变其数值。
A(x,n)为使用当前含有n个元素(并且将改变为n+1个)的数据结构x的一个set操作的成本,假定该元素不存在,并且开发者必须把它添加进去。
R(x,n)为使用当前含有n个元素(并且将改变为n-1个)的数据结构x的一个remove操作的成本。
F(x,n)为释放一种数据结构的成本。
W(x1,x2,n)为从一种数据结构切换到另一种的成本。
从一种数据结构切换到另一种的成本由下式给出W(x1,x2,n)=Σnm=1(G(x1,n)+A(x,m))+F(x1,n)]]>为了确定是否值得从一种数据结构切换到另一种,高速缓存器系统着眼于下列使用统计数据g=所执行的get操作的次数s=所执行的set操作的次数(不需要添加新的元素)a=所执行的set操作的次数(添加新的元素)r=所执行的remove操作的次数开发者可以设计一段程序,以便在一个可设置的时间间隔或者在每次执行get和set功能时检查各项统计数据。在优选实施例中,这些选项完全可以由系统管理员进行设置。
在一个实施例中,可以对这些统计数据进行调整,以补偿执行每一项操作所需的时间。例如,调整统计数据的一种方法就是,在每次执行get功能时,通过执行类似于下列实例的一项操作,来更新每一个数据g′=g*.9+1s′=s*.9a′=a*.9r′=r*.9在这个实例中,当执行任何操作时,所有的数值均被修改。乘数0.9表示由于时间所导致的损耗。
当确定是否从一种数据结构切换到另一种时,高速缓存器系统使用它所收集的统计数据来预测该系统在未来的表现。若使用新的数据结构(get,set,add,free)的存取的总的未来成本加上切换的成本低于使用旧结构的存取成本,则切换是值得的。
在优选实施例中,高速缓存器系统使用下列近似或预测来确定是否从一种结构切换到另一种。它确定管理当前使用模式的成本加上切换的成本g*G(x2,n)+s*S(x2,n)+a*A(x2,n)+r*R(x2,n)+W(x1,x2,n)是否高于、低于或等于管理使用当前结构的当前使用模式的成本(不必进行切换)g*G(x1,n)+s*S(x1,n)+a*A(x1,n)+r*R(x1,n)完成此项工作的其他方法可以涉及保存更为精细的统计数据,然后,例如,当将要发生get或add操作时,尝试进行预测。
在确定是否切换数据结构时,高速缓存器系统可能还需要考虑其他一些因素,例如存储器和CPU的可用性。
当高速缓存器系统的一个实施例确定它必须改变其内部数据结构时,处理过程可以开始于两种方法其中之一。若高速缓存器系统被配置成每次调用一项特殊功能(例如,get)时,检查它的统计数据,则该功能就能实行这种改变。若高速缓存器系统被配置成在一个独立的线程中检查它的统计数据,则该线程调用一个能执行此种改变的一项功能。
当实行内部数据结构的改变时,高速缓存器系统将首先创建新的数据结构,然后将数据从旧结构迁移到新结构。在迁移所有数据之后,高速缓存器系统将删除旧结构。虽然某些实施例可以强迫这些改变同步地进行,但是在该程序实行这些改变的同时,该数据可以被需要存取该数据的其他线程读出或写入。当并发地进行get和重构操作时,可以从旧的或新的结构中读出数据。当在重构过程中执行set操作时,典型地需要将数据写入两种结构。
以上已经就各特定的实施例对本发明可能提供的一些好处和优点进行了说明。这些好处和优点,以及任何使它们得以发生或变为更加显著的各种要素或限制均不应被解释为任何或所有的权利要求的重要的、必需的或本质的特征。如同在本文中使用的那样,作者打算将名词“包括”或者它的任何其他变体解释为非排它性地含有跟随这些名词的各种要素或限制。相应地,含有一组要素的系统、方法或其他实施例并不局限于仅仅这些要素,并且可以包括没有专门地被列出或者为已主张权利要求的实施例所固有的其他要素。
在参照于特定的各实施例对本发明进行说明的同时,应当理解,各实施例都是说明性的,并且本发明的范围并不局限于这些实施例。对上述各实施例进行若干变动、修改、添加和改进都是可能的。作者打算将这些变动、修改、添加和改进都纳入如同在下列权利要求书中所详述的本发明的范围之内。
附录网络代理平台及其应用详细地参考网络代理平台及其应用的示例性的各实施例,其实例被示意在诸附图之中。在可能的情况下,在所有的附图中都用相同的附图标记来标注相同或相似的组件(元件)。
一种方法与系统可能包括这样一种软件体系结构,它允许在相同或不同的通信协议中的不同的应用跟处于一部计算机之中的各项共享资源进行互动。更具体地说,可以这样来编写用于一段计算机程序的代码,使得为一个以上的应用或通信协议所共用(即,共享)的代码的数量增加,同时用于管理专门应用或专门协议的操作的代码数量减少。在一个实施例中,一项事务可以被拆分为一组分离的操作。这些分离的操作可以包括为一个以上的网络应用所共用的一些功能。这些功能可以被各种共享资源所执行。
对每一项操作来说,为特定的协议或应用所专用的代码可以被编写成软件插入模块的一部分,它们具有对各种共享资源的功能的功能调用。每一个软件插入模块基本上都可以起到该项操作的管理员的作用,其中,共同的任务都委托给各种共享资源,并且该模块执行专门的功能。每一种协议都具有其本身的用于分离操作的软件插入模块的集合。可以通过开发新的软件插入模块的集合,取代编写一段完全新的程序,来添加对各项新的协议的新的应用和支持。可以通过从处于同一协议下的不同应用中置换或编辑小到只有一个软件插入模块,来开发针对同一协议的新应用。这种软件体系结构可以缩短开发时间,由于对现有的应用只进行很少的更改,所以增加了快速开发新的应用的可能性,更多的协议将受到良好的支持,并且减轻硬件和软件资源的负担。
对几个名词进行定义或阐明,以帮助理解随后的说明。一个网络包括在一个公众可用的介质(例如,因特网)或者在一个内部(公司所有的)系统中的一个互联的服务器和客户计算机的集合。在客户计算机一侧的用户可以通过网络接入提供商来获得对该网络的接入。因特网服务提供商(“ISP”)就是普通类型的网络接入提供商。
如同在本文中所使用的那样,作者打算用名词“包括”、“包含”、“具有”或者它们的其他变体来覆盖非排它性的包容。例如,包括一张元件表的方法、过程、物品或装置不一定局限于仅仅那些元件,还可以包括没有明确地被列出或者为这样的方法、过程、物品或装置所固有的其他元件。还有,除非明确地表示相反的意思,“或”指的是一种包容性的“或”,而不是指排它性的“或”。例如,下列几种情形都满足条件“A或B”A为真(或存在)与B为假(或不存在),A为假(或不存在)与B为真(或存在),以及A和B二者均为真(或存在)。
名词“软件组件”指的是一段计算机程序(即,一段软件应用程序)的至少一部分。一个实例包括一个软件插入模块之类。不同的软件组件可以驻留在位于同一计算机或不同计算机里面的相同的计算机程序或不同的计算机程序之中。
在讨论网络代理平台的各实施例之前,先说明一种用于网络代理平台的硬件体系结构。图1表示这样一种示例性的体系结构,它包括客户计算机120,代理计算机140,以及服务器计算机160。客户计算机120和代理计算机140被双向地连接到网络11,同时代理计算机140和服务器计算机160被双向地连接到网络13。网络11和13中的每一个都可以是一个内部网络或者一个外部网络(例如,因特网)。在一个实施例中,网络11和13可以是相同的网络,例如因特网。计算机140和160可以分别地被双向连接到数据库14和16。
客户计算机120可以包括桌面计算机、膝上型计算机、个人数字助理、蜂窝电话或者能在网络上进行通信的几乎所有的其他装置。其他客户计算机(未示出)也可以双向地被连接到网络11。代理计算机140可能是一部服务器计算机,但是在另一个实施例中,它可能是一部客户计算机。类似于服务器计算机160的其他服务器计算机(未示出)可以双向地被连接到网络13。
在一个可供替代的实施例中,可以用许多部能够在一个网络或网络的组合上互相连接的计算机(未示出)来代替每一部代理计算机140以及服务器计算机160。为了简单起见,为每一部代理计算机140以及服务器计算机160展现一个单一的系统。
客户计算机120可以包括中央处理单元(“CPU”)122,只读存储器(“ROM”)124,随机存取存储器(“RAM”)126,硬盘驱动器(“HD”)或存储器128,以及(各)输入/输出设备(“I/O”)129。“I/O”129可以包括键盘、监视器、打印机、电子指向装置(例如,鼠标、跟踪球、描画笔,等等),或者诸如此类。代理计算机140可以包括CPU142、ROM 144、RAM 146、HD 148以及I/O 149,并且服务器计算机160可以包括CPU 162、ROM 164、RAM 166、HD 168以及I/O 169。
图1中的每一部计算机都可以具有一个以上的CPU、ROM、RAM、HD、I/O,或者其他硬件组件。为了简单起见,即使被使用的不止一个,但是每一部计算机都被图解为每一种硬件组件只有一个。要注意的是,图1是一种示例性的硬件配置的简化形式。许多其他可供替代的硬件配置都是可能的,并且是本领域的技术人员所熟知的。
每一部计算机120、140和160都是一个数据处理系统的一个实例。ROM 124、144和164;RAM 126、146和166;HD 128、148和168;以及数据库14和16都可以包括能够被CPU 122、142或162读出的介质。因此,这些类型的存储器中的每一种都包括一种数据处理系统可读出的介质。这些存储器可以位于计算机120、140和160的内部或外部。
本文所描述的方法的各部分可以在适当的软件代码中实现,上述软件代码可以驻留在ROM 124、144和164;RAM 126、146和166;HD 128、148和168之中。在一个实施例中,各项指令可以被包含在一个数据存储装置(例如HD 148)之中。图2表示被实现于位于HD148的一个数据处理系统可读出的介质202之上的软件代码元素204、206和208的一个组合。可供替代地,各项指令可以作为软件代码元素被存储在DASD阵列、磁带、软磁盘、光学存储装置,或者其他适当的数据处理系统可读出的介质或存储装置之中。
在一个图解的实施例中,计算机可执行的指令可以是多行编译的汇编语言、C、C++、Java,或其他语言代码。也可以使用其他的体系结构。例如,任何一部计算机的功能都可以由图1所示的一部不同的计算机去执行。此外,一段计算机程序或者它的具有这样的代码的各软件组件都可以被实现于一部以上的计算机的一个以上的数据处理系统可读出的介质之中。
在上述的硬件配置中,各种软件组件都可以驻留在一部单独的计算机或者各单独的计算机的任意组合之中。在可供替代的各实施例中,某些或全部软件组件都可以驻留在相同的计算机之中。例如,代理计算机140的一个或多个软件组件都可以驻留在客户计算机120、服务器计算机160,或二者之中。在又一个实施例中,若由代理计算机140实现的功能被融合到客户计算机120或服务器计算机160之中,则可以不需要代理计算机140和数据库14。在这样一个实施例中,客户计算机120和服务器计算机160可以被双向地连接到同一网络(在图1中未示出)。
在图1中,可以使用电子、光学、射频或其他信号来完成介于任何计算机之间的通信。例如,当用户位于客户计算机120一侧,当向该用户发送一段通信内容时,客户计算机120可以将信号转换为人可懂的形式,并且将来自一个人的输入转换为准备由计算机140或160使用的、适当的电子、光学、射频或其他信号。类似地,当运营商位于服务器计算机160一侧,当向该运营商发送一段通信内容时,服务器计算机160可以将信号转换为人可懂的形式,并且将来自一个人的输入转换为准备由计算机120、140或160使用的、适当的电子、光学、射频或其他信号。
现在,把注意力集中在为根据一个实施例的软件开发一种软件体系结构的方法学上面。本方法包括将一项事务拆分为一组分离的动作。用于将该事务拆分为各个分离的动作的准确的定义是可变的,并且可以由本领域的技术人员按照最佳地配合于它们的特定的事务、硬件要求和软件要求的方式来进行选择。本方法还可以包括确定在该组分离动作中,哪一些功能对多于一项的应用来说是共同的。随着更多的功能被确认(为共同的),就能增加共享资源的数量,同时减少专门应用代码的数量。因此,本领域的技术人员将被鼓励去从许多不同层次的抽象中审视该软件,以发现潜在的共享资源,不然的话,就可能失去这些共享资源。
本方法还包括为各个分离动作产生各软件组件。一组软件插入模块可以对应于该项事务的不同的分离动作。每一项应用都可以具有它本身的软件插入模块的集合。若各项共享资源的识别能够正确地被实现,则在每一个软件插入模块之中的代码的数量应当保持相对地低。到了用于任何共享资源的代码当前不存在的程度时,就应当产生用于各项共享资源的代码,以便使该代码被尽可能多的不同的软件插入模块所共用的能力最大化。
至少有两种针对不同应用的软件插入模块,不管它们使用相同或不同的协议,都可以向一个或多个共享资源作出功能调用。对使用相同协议的不同应用来说,只有一个请求控制插入模块,一个内容控制插入模块,或者二者,可以成为唯一的被改变的模块。因此,由于可以从使用相同协议的另一项应用中拷贝用于该项应用的其他插入模块,所以为相同协议生成新的应用(的过程)可以被简化。这些其他插入模块在各项应用之间基本上可以是相同的。通过置换或编辑请求控制插入模块,内容控制插入模块,或者二者,就能非常快捷地开发各项新应用。
至于在不同协议中的各项应用,每一项协议都可以具有一个模块,它基本上执行相同于针对其他(各项)协议的任何或所有类似的(各)模块的动作,然而,通过把共同的功能组合在一起以减少重复的代码是更为可取的。
现在把注意力集中到根据一个实施例的软件的体系结构上面。该软件的体系结构示于图3和4,并且以在一个网络上进行电子交易为导向。在该体系结构后面的基本思路就是让用于共享资源的编程代码能够被尽可能多的不同的网络应用所使用。要注意的是,所有资源都可以或不可以被所有的应用所使用。用于每一个专门应用的插入模块的编程代码包括将处于任何被支持的应用之中的到来的通信内容连接到各共享资源的代码。通过限制在各插入模块之中的代码,软件体系结构的用户就能缩短开发时间,增加适当地支持在相同或不同协议(特别是仅被有限数目的计算机或用户所使用的各种专用协议)之中的更多应用的可能性,并且由于只有相对地较小的插入模块才可以被使用,所以就能减轻用于不同应用的硬件和软件资源的负担。
在图3中,方框3200、3400和3600中的每一行代表在相同或不同协议中的不同应用。例如,行3200代表使用HTTP的第一应用,行3400代表使用HTTP的一项不同的应用,并且行3600代表处于不同协议(例如POP,SNMP,WAP以及诸如此类)之中的另外的应用。要注意的是,介于行3400和3600之间的一系列点表示可能出现处于相同或不同协议之中的许多其他应用。此外,这种体系结构可以被配置成允许添加未来的各项应用。这种软件体系结构容易地支持至少3种不同的以及可能更多的协议。
参照行3200,方框3202到3214中的每一个都代表在一项电子交易中可能出现的不同阶段(动作)。例如,方框3202代表一个请求接收插入模块,方框3204代表一个授权插入模块,方框3206代表一个请求控制插入模块,方框3208代表一个内容检索插入模块,方框3210代表一个内容控制插入模块,方框3212代表一个内容提供插入模块,方框3214代表一个后响应通信插入模块(例如,感谢、计费,等等)。每一个模块都可以对应于一个或多个分离动作。稍后,将在本文中详细说明具体的插入模块。要注意的是,行3400和3600都包括基本上用于相同的动作类型的对应的方框,除非它们被设计用于不同的应用。更具体地说,方框3402代表一个用于使用跟方框3202相同的协议的一个不同的应用的到来消息接收插入模块,并且方框3602代表用于使用不同于方框3202的协议的另一项应用的到来消息接收插入模块。
可以用最小的努力来开发各项新的应用,后者利用已被支持的各项协议。这可以通过下列步骤来实现生成一个新行,它利用在另一行中所使用的专门协议插入模块,并且将它们跟为手边的专门应用而开发的其他各插入模块组合在一起。对在同一协议中的许多不同应用来说,某些插入模块可以是基本上相同的。虽然在这些插入模块中的代码可以不同于用于其他协议的类似模块的代码,但是在不同的协议中,用于至少某些不同应用的插入模块可以提供基本上相同的功能。
在软件体系结构中,各种共享资源被图解为位于每一行3200、3400和3600下方的平面3102、3104和3106。参照图4,可以为每一个插入模块建立通往每一个共享资源的接口。特别地参照方框3214,功能连接4102将模块3214跟共享资源3102连接在一起,类似地,功能连接4104将模块3214跟共享资源3104连接在一起,功能连接4106将模块3214跟共享资源3106连接在一起。通过对各共享资源进行功能调用来实现连接4102、4104和4106。各共享资源的实例包括一个内容高速缓存器、一个参数高速缓存器、一个连接池、一个域名服务器高速缓存器、一个时钟、一个计数器、一个数据库、一个全局变量空间(例如,一个记录数据库),或者诸如此类。一份潜在的共享资源的列表几乎是无限的。要注意的是,并不是所有的共享资源都可以被连接到沿着一行的所有模块。例如,模块3202和3204可以不需要访问内容高速缓存器,因为它们不接收或处理针对一项请求而返回的内容。来自一部客户计算机的每一处连接都可以在其本身的线程上被独立地控制。然而,在其他实施例中,可以使用很少的或一个单一的线程来操作通往一个支持特定的应用或协议的一个特定行的所有连接。除非表示相反的意思,以下的方法是从代理计算机140的角度来说明的。
图5包括用以实现电子交易的方法的流程图,它对应于沿着任何一行3200、3400和3600设置的各插入模块。要注意的是,并非所有模块都是需要的,还要注意,某些模块的功能可以跟其他模块组合在一起(例如,授权可以是处理一项初始请求的一部分)。下面将简要地述及处理流程图,跟随其后的是每一个模块的更详细的说明。
本方法包括使用一个请求接收插入模块(方框502)来接收来自一部客户计算机的一项请求,并使用授权插入模块(方框504)来进行授权。本方法还包括使用一个请求控制插入模块(方框512)来控制一项请求。本方法还包括使用一个内容检索插入模块(方框522)来检索内容。本方法还包括使用一个内容控制插入模块(方框532)来控制被返回的内容,并使用一个内容提供插入模块(方框534)来向客户计算机发送已修改的内容。本方法还包括使用一个后响应插入模块(方框542)来处理后响应通信内容。
要注意的是,并不是在处理流程图中所描述的所有活动都是需要的,还要注意,除了那些被图解的以外,还可以进行更多的活动。同样,某些活动基本上可以跟其他活动同时进行。在阅读本说明书以后,本领域的技术人员将能确定哪些活动可以被用于它们的特定的需求。
现在,把注意力集中到沿着行3200、3400和3600的各专用协议插入模块,以及它们如何跟图5所示的各项活动联系在一起。虽然针对行3200来进行讨论,但是沿着其他行的对应模块也能提供类似的功能。同样,在下面的实例中,客户计算机120正在向代理计算机140发送一项内容请求,同时服务器计算机160响应于该项请求,正在提供所需内容。信息流可能处于相反方向(服务器计算机160查找来自客户计算机120的信息)。
本方法还包括使用一个请求接收插入模块3202(图5中的方框502)来接受来自客户计算机120的一项请求。当代理计算机140接收到或访问到来自客户计算机120的一项请求时,就可以使用请求接收插入模块3202。模块3202可以从该项请求的报头的各部分初始地产生一个关联数组。这些关联数组的一部分或全部可以被沿着同一行的其他模块所使用。关联数组可以提供作为对共享资源的功能调用的一部分的信息。可以从任何先前的插入模块(例如,模块3202)向沿着同一行的任何或所有的后继的各插入模块(例如,3204、3206、3208、3210、3212或3214)传送任何或所有数据(包括关联数组)。
本方法还包括使用授权插入模块3204(方框504)来进行授权。授权插入模块3204是可选的,并且可以被用来确定处于客户计算机120一侧的用户是否具有适当的授权。各授权模块可以基于网际协议(“IP”)地址或者一个名字和一个口令字。模块3204可以向一个共享资源发送该IP地址或者名字和口令字,以确定该用户是否被允许访问。
本方法还包括使用一个请求控制插入模块3206(方框512)来控制一项请求。请求控制插入模块3206可以被用来修改、置换或控制该项请求。例如,代理计算机140可以具有这样的代码,它把在一项请求里面的一个URL重定向于一个不同的URL。更具体地说,代理计算机140可以使用所请求的URL向共享资源作出功能调用。该共享资源可以向模块3206返送该不同的URL。模块3206还具有将该不同的URL置入正确的协议之中的逻辑,因此,它将被一部可以接收该项重定向请求的计算机所理解。
本方法还包括使用一个内容检索插入模块3208(方框522)来检索内容。内容检索插入模块3208可以被用来响应于原始的请求或受控制的请求,发送该项请求,并接收或访问内容。更具体地说,来自客户计算机120的一项请求可能在被服务器计算机160接收之前,就已经被代理计算机140处理。响应于来自代理计算机140的已处理的请求,将使用模块3208对来自服务器计算机160的内容进行处理。类似于模块3202,该代码将来自服务器计算机160的内容分解为一个报头部分和一个内容部分,并将该信息添加到一个先前产生的关联数组之中。
本方法还包括使用一个内容控制插入模块3210(方框532)来控制从服务器计算机返回的内容。内容控制插入模块3210可以被用来在向客户计算机120进行发送之前添加或修改内容。更具体地说,代理计算机140可以将来自第三方的广告或补充信息添加到由服务器计算机160提供的内容之上。在一个可供替代的实施例中,可以对来源于服务器计算机160的部分或全部内容进行删除,或者用其他内容来置换。
本方法还包括使用一个内容提供插入模块3212(方框534)来向客户计算机发送已修改的内容。内容提供插入模块3212可以被用来在经过控制之后,如果有的话,将该项内容按路由送往客户计算机120。当来自客户计算机120的原始请求被处理时所产生的关联数组中的某些信息,在向客户计算机120发送外送内容时可以被模块3212使用。
本方法还包括使用一个后响应插入模块3214(方框542)来处理后响应通信内容。后响应插入模块3214可以被用于感谢、计费或其他用途。例如,在成功地将内容从模块3212发送到客户计算机120之后,模块3214将从该用户的信用卡中收取该项事务的费用。可供替代地,模块3214将等待一个送往或来自客户计算机120或服务器计算机160的信号在当前的事务中被终结。若一项产品或服务不完整、或者在正确地反映一项事务的连接时间方面存在缺陷,则这样的后响应处理将有助于避免将发票或帐单发送到位于客户计算机120一侧的用户那里。
沿着类似的各行,如图3所示的各平面其中之一可以包括全局变量空间,它需要被其他共享资源、代理计算机140或各插入模块使用。系统统计数据就是可以处于一个全局变量空间之中的信息的实例。在监测活动中,这种信息对代理计算机140或另外的计算机,例如客户计算机120或服务器计算机160来说,可能是有用的。统计数据可以包括有多少部计算机被连接到代理计算机140,这些计算机中的每一部被连接到代理计算机140的时间量,通过代理计算机140来处理交易所经历的时间量,等等。
这些全局变量可以结合一个模块(例如授权模块3204)来使用。若当前登录到代理计算机140的用户太多,则即使该计算机试图跟具有适当安全许可证的代理计算机140进行连接,授权仍然可以被拒绝。在另一部客户计算机结束另一项交易之后,来自模块3214的一组信号才被送往共享资源中的记录系统。在来自其他交易的连接结束之后,现在,一部新的客户计算机才能访问由代理计算机140提供的各项业务。
现在,把注意力集中到可能由一个专门的模块执行的更加专门的活动,以及该专门的模块如何跟使用一个专门应用的相同交易的其他各模块进行互动上来。图6-8所示的处理流程图被用来说明某些专门的活动。再有,除非表示相反的意思,本方法主要地是从代理计算机140的角度来进行说明的。
为了帮助理解图6-8所示的方法,使用一个特例,并且在必要时加以参照。在这个实例中,到来的通信内容可以是从客户计算机120发送到代理计算机140的用于连接www.yahoo.com的一项请求。客户计算机120使用一部NetscapeTM浏览器(纽约州纽约市的美国在线时间华纳公司出品)以HTTP的方式进行通信,并且具有一个MacOS XTM操作系统(加利福尼亚州库佩梯诺市的苹果电脑公司出品)。
参照图6,本方法包括接收用于专门应用的一项到来的通信内容(方框602)。该项通信内容包括一项请求、一段消息,或者其他形式的通信内容。该项通信内容可以经由网络11由客户计算机120发送,并由代理计算机140接收和处理。代理计算机140可以访问或读出到来的通信内容的至少一部分,并确定针对该通信内容的专门应用。在这个实例中,到来的通信内容是从客户计算机120发送到代理计算机140的用于连接www.yahoo.com的一项请求。到来的通信内容还将含有处于该项请求的报头之中的其他信息。在这个实例中,其他信息可能包括客户计算机120的浏览器以及操作系统。
在确定针对该通信内容的应用之后,代理计算机140就能确定在各行3200、3400、3600,或者其他,或者各插入模块的行当中,哪一行将被用于该项事务。在本方法的这一点上,代理计算机140可以为对应于该项专门应用的行激活任何或所有的插入模块。在一个实施例中,只有在各插入模块被首次使用时,每一行中的各插入模块才可以被激活。参照该实例,该项请求是针对与行3200相对应的一项应用的,因此,插入模块3202可以被激活。若该通信内容是针对其他应用的,则可以为该项专门应用激活插入模块3402或3602。
本方法还包括为该项专门应用将到来的通信内容按路由传送到第一软件插入模块(方框604)。由于到来的请求使用对应于行3200的应用,所以代理计算机140可以将该项请求按路由传送到请求接收软件插入模块3202。
本方法还包括将到来的通信内容分解为一个报头部分和一个内容部分(方框622)。可以通过模块3202进行此种分解,以获得来自该项请求的信息。
本方法还包括使用在报头部分中所包含的信息来产生一个关联数组(方框624)。该关联数组可以包括几乎任何有限数目的行。每一行都可以包括一个关键字和一个数值。该关键字可以包括处于报头部分之中的一个参数,并且该数值可以包括针对该参数的一个数值。一般来说,报头部分可以包括一个或多个命令行,其后跟随一个命令自变量。该命令可以是一个关键字,并且该命令自变量可以是针对该关键字的对应的数值。可以用该关键字或该数值来检索关联数组。
通过了解针对到来的通信内容的每一项协议所使用的常规以及用于这些协议的各报头的特性,就能在没有复杂的编码要求的情况下形成关联数组。关联数组在行数方面是灵活的,同时允许不同大小的关联数组用于不同的协议。
对HTTP来说,在报头中的一行可以包括具有“用户代理Mozilla/5.0(Macintosh;U;PPC Mac OS X;en-US;rv1.1)Gecko.”的一行。关键字为“用户代理”,并且数值为“Mozilla/5.0(Macintosh;U;PPC Mac OS X;en-US;rv1.1)Gecko.”。对POP来说,一行可以包括“RETR 27”,这里27是一个用于待检索的特定项目的对象标识符。关键字为“命令”,并且数值为“RETR”。第二行将具有一个关键字“自变量”以及数值“27”。对SNMP来说,一行可以包括“get47.12.112.38”,其中,47.12.112.38对应于一个对象标识符。关键字为“命令”,并且数值为“GET”,第二行将具有关键字“自变量”,并且数值为“47.12.112.38”。
内容可以或者不可以成为关联数组的一部分。若为是,则关联数组可以包括关键字“内容”,并且整个内容数据块作为数值。对于一幅图像来说,内容可以是非常大量的数据。可供替代地,关联数组可以跟指向数据块的数据指针配对,而不是直接地将数据块纳入关联数组。
回到这个实例,关联数组可以包括如下面表1所示的信息。说明性的名字被用来取代实际的名字,以帮助理解关联数组。同样,关联数组可以包括更多的行。由于可以通过关键字或数值来检索关联数组,所以各行的顺序是不重要的。
表1.示例性的关联数组

本方法还可以包括使用在关联数组里面的数据,来产生对至少一种共享资源的功能调用(图7中的方框702)。在这个实例中,代理计算机140可以向一种共享资源作出功能调用,更具体地说,向一个时钟(共享资源)和一个记录系统(另一种共享资源)作出功能调用,以便获得时间,并且记录该项事务的开始时间。记录信息可以包括该时间以及一个事务标识符。要注意的是,可以将处于关联数组里面的某些信息,连同功能调用一起,发送到共享资源那里。
本方法还包括从功能调用接收数据(方框704)。在这个实例中,可以向模块3202返送事务标识符。本方法还包括用处于第一软件模块之中的其他代码来处理来自功能调用的数据(方框706)。模块3202可以更加集中地处理到来的消息,而不是处理从功能调用返送的数据。其他各模块,例如内容提供插入模块3212,也可以进行这样的数据处理。要注意的是,在向(各)共享资源作出功能调用之前、当中或之后,都可以发生专门应用的处理,如果有的话。可以判定第一软件插入模块是否最后的软件插入模块(判断框722)。若为是,则本方法可以结束。否则,本方法将继续进行,将任何或所有的数据(包括关联数组)从先前的软件插入模块送往下一个软件插入模块(图8中的方框802)。在这个实例中,下一个软件插入模块就是授权模块3204。授权模块3204可以使用由模块3202收集或产生的某些信息。通过不从代理计算机140向另一部计算机(例如客户计算机120)发送通信内容,或者向一个共享资源作出关于相同信息的相同的或类似的功能调用,使信息的传送能减轻硬件的负载。
本方法还包括使用在关联数组中的数据,来向至少一种共享资源产生功能调用(方框822)。授权模块3204可以向参数系统作出功能调用,以确定该用户是否具有适当的授权,访问是否可以被许可(当前被连接到代理计算机的用户数目是否已经超过它的限值),连接的优先等级(准备提供的服务的等级或速度),等等。当向记录系统作出功能调用时,模块3204可以送出用户名字以及口令字。模块3204还可以向共享时钟作出功能调用,以便获得针对该动作的时间。
本方法还包括从功能调用那里接收数据(方框824)。该数据可以包括涉及位于客户计算机120一侧的该用户是否具有适当的安全许可证,是否可以进行连接,连接的优先等级,等等。本方法还包括用处于当前软件插入模块之中的代码来处理来自功能调用的数据(方框826)。一个实例可能包括从代理计算机140向客户计算机120发送一段通信内容,将是否进行连接这一情况通知该用户。可供替代地,不会出现使用模块3204的进一步的处理。
将判定当前的软件插入模块是否最后的软件插入模块(判断框842)。若为是,则本方法可以结束。否则,本方法将从图8的方框802继续,并且以叠代方式一直进行下去,直到到达最后的软件插入模块为止。
沿着行3200的剩下的各模块将被委托去完成实例中的事务,以便给出在本模块范围内对各项动作的较好的理解,同时给出这些模块可能作出的某些功能调用。可以使用或多或少的模块。同样,这些模块可以作出或多或少的,或者不同的功能调用。
数据可以被送往请求控制软件插入模块3206。可以向一个共享资源作出功能调用,以确定该项请求是否应当改变。该项功能调用可以送出信息,表明针对www.yahoo.com的一项请求已经被接收或访问。共享资源可以包括用www.google.com来取代原始的客户请求的逻辑。可以对关联数组作出改变,以便用www.google.com来取代www.yahoo.com,或者可以被添加,以提示被控制的请求是www.google.com。
模块3208可以执行内容检索。可以向位于代理计算机140的一个内容高速缓存器(共享资源)作出功能调用,以便确定该内容高速缓存器是否包括一个专门地为具有一个NetscapeTM浏览器以及一个MacOS XTM操作系统的计算机而格式化的www.google.comWeb页面。要注意的是,可以从关联数组获得关于浏览器以及操作系统的信息。若内容高速缓存器具有该Web页面,则它将被送往模块3208。否则,模块3208将形成一项送往服务器计算机160的HTTP请求,为客户计算机120的专门浏览器和操作系统的计算机请求该Web页面。在代理计算机140从服务器计算机160那里获得适当的Web页面之后,模块3208就可以向代理计算机140的内容高速缓存器发送一个功能调用,以便对该Web页面进行高速缓存。可以向模块3210发送适当的Web页面以及先前收集的其他信息。
内容控制模块3210可以删除、添加或置换在被返回的适当的Web页面之中的某些或全部的内容。例如,当适当的GoogleWeb页面被接收或访问时,模块3210可以环绕该Web页面的(各)边界添加(各种)广告。可以向一个共享资源作出功能调用,以确定应当添加哪些广告。记录系统可以跟踪哪一件广告被添加,这是谁的广告,以及在当前计费周期内,已经添加了多少次广告。作为共享资源的记录系统可以由它自己去访问该计数器(另一种共享资源)。在其他工作中,在无须特定应用的软件插入模块进行干预的情况下,某些或全部共享资源可以进行互动。可以将被控制的内容和其他信息送往模块3212。
内容提供软件插入模块3212可以取得按照NetscapeTM浏览器以及MacOS XTM操作系统而进行格式化的GoogleWeb页面,同时从模块3210中取得各种广告,并且准备一项使用HTTP协议的通信内容。该通信内容可以从代理计算机140发送到客户计算机120。可以向记录系统作出功能调用,以记录被被送往客户计算机120的实际内容以及发送时间。由模块3202-3212收集和产生的任何或全部信息都可以被送往模块3214。
后响应通信模块3214可以被用来跟踪使用数据或计费信息。在一项事务结束时,模块3214可以向时钟作出功能调用,以确定当前时间,同时向记录系统作出另一项功能调用,以确定在该事务进行过程中经历了多长时间并记录任何计费信息。计费信息可以处于由会计部门所管理的共享资源里面。针对在客户计算机120一侧的用户的计费信息可以从一个共享资源送往模块3214,后者可以向位于客户计算机120一侧的用户返送一些信息。代理计算机140可以向客户计算机120发送类似于“您已经被连接了2.1分钟,应收费1.27美元。谢谢您使用我们的服务。”这样的消息。可供替代地,也可以不发送信息并结束本方法。
要注意的是,并非在图6-8的处理流程图中所描述的所有活动都是必需的,还要注意到,在一项特定的活动中可以不加以限制,还要注意到,除了已图解的以外,还可以进行更多的活动。同样,某些活动基本上可以跟其他活动同时进行。在阅读本说明书之后,本领域的技术人员将能确定哪些活动可以应用于他们的特定需求。
通过图9的流程图以及一个实例,将能更好地理解生成针对相同协议的新应用的能力。在一个实施例中,可以为一个网站的不同优先等级的各用户产生不同的应用。通信协议可以使用HTTP。本方法可以包括拷贝第一组插入模块以形成第二组插入模块(方框922)。
对新的应用来说,只有请求控制插入模块、内容控制插入模块或者二者可以被置换。剩下的各插入模块可以保持不变,并且基本上相同于第一项应用的其余的各插入模块。
本方法可以包括针对第二项应用,用一个第二请求控制插入模块来置换第一请求控制插入模块(方框924)。例如,超值用户可以访问普通用户不能访问的某些Web页面。若普通用户访问一个超值Web页面,则第二请求控制插入模块将引导该普通用户进入该普通用户享有适当的访问权的另一个Web页面。
本方法可以包括针对第二项应用,用一个第二内容控制插入模块来置换第一内容控制插入模块(方框926)。超值用户在他或她的窗口中,只有10%被广告所占据,而普通用户在他或她的窗口中,则有50%被广告所占据。第二内容控制插入模块可以重新安排已检索内容的格式,以便提供更多的广告空间。第二内容控制插入模块还可以访问各共享资源,以获得各种广告,同时跟踪哪些广告已被使用。通过插入这样一个模块,它使用为作出初始请求的特定装置而开发的设置来对内容进行换码,就能实现Web页面的设备依赖性优化(桌上计算机对蜂窝电话,等等)。
在请求控制模块和内容控制模块其中之一或二者被置换之后,本方法还可以包括使用第二组插入模块来执行第二项应用(方框942)。
要注意的是,本实例更多地专注于置换特定的模块,在其他各实施例中,可以通过在第一项应用的第一组的对应模块范围内对代码进行编辑,来产生这些模块。
在阅读本说明书之后,本领域的技术人员将能理解,使用相同的网络协议,通过简单地将新的(各)插入模块插入到请求控制位置、内容请求位置,或者二者的位置,就能开发出完全不同的应用。
在其他各实施例中,本方法和系统可以用于几乎任何的其他网络通信。作为一个实例,客户计算机120可以提出对位于服务器计算机160的一个数据库之中的信息的请求。此项请求可以按照类似于一项关于Web页面的请求的方式来进行处理。若该用户不具备在一项请求中的所有信息的适当的授权,则请求控制模块可以仅请求该用户有权访问的信息,或者内容控制模块可以添加一段信息,说明该用户对某些或所有信息不享有适当的访问权。
在另一个实施例中,可以在客户计算机120或服务器计算机160中安装多协议软件体系结构以及各插入模块。并不是在代理计算机140中的所有模块都是客户计算机120或服务器计算机160所需要的。可以不使用各授权模块3204、3404和3604,或者可以对它们进行编码,以便允许在客户计算机120一侧得到授权(通常是被授权)。服务器计算机160可以不使用内容控制模块3210、3410和3610。在阅读本说明书之后,本领域的技术人员将能确定,哪些模块是需要的,哪些可以被消除或者被绕过(模块仍然存在,但仅传送信息,不进行任何其他重要的活动)。
各软件组件可以被设计成令它们使用共享资源的能力最大化,同时令用于专门应用操作的代码数量最小化。这样就能以相对地较小的插入模块(跟共享资源相比较)来访问被图示于各模块下面的各平面上的共享资源。这样一来,跟现有技术中为一项专门的协议编写、拷贝以及修改一段完整的程序的做法相比,需要为一项新的协议而写入的代码较少。对处于相同协议之中的各项应用来说,特殊的编码要求可能更少。而且,由于编码要求较低,所以多种协议都能得到支持,因此,就能为那些用户数目比其他协议更少的协议生成代码。跟现有技术相比,本方法和系统在处理处于相同或不同协议之中的许多不同应用方面,在时间和成本上是显著地更加有效的。
以上已经就特定的各实施例说明了各种好处、其他优点和对各种问题的解决方案。然而,各种好处、优点和对各种问题的解决方案,以及能导致任何好处、优点或解决方案出现或使之变为更加显著的任何(各种)要素都不应当被解释为任何或所有权利要求的一种重要的、必需的或本质上的特征或要素。
权利要求
1.一种系统包括一个数据处理器;以及一个被连接到该数据处理器的存储器;其中,该数据处理器被配置用于实现一个高速缓存器系统,所述高速缓存器系统在所述存储器的一种内部数据结构中存储多个数据对象和相应的关键字,监测所述高速缓存器系统的使用,确定该高速缓存器系统的使用是否表明在该高速缓存器系统中应当使用一种可供替代的内部数据结构,以及若该高速缓存器系统的使用表明在该高速缓存器系统中应当使用可供替代的内部数据结构,则创建该可供替代的内部数据结构,将数据从当前内部数据结构迁移到该可供替代的内部数据结构,以及开始使用该可供替代的内部数据结构进行操作。
2.如权利要求1所述的系统,其中,该数据处理器和存储器驻留在一个网络代理内。
3.如权利要求2所述的系统,其中,所述数据对象包括Web页面,并且所述相应的关键字包括统一资源定位符(URL)。
4.如权利要求1所述的系统,其中,该系统被配置成通过存储含有IP地址的数据对象以及含有对应于IP地址的服务器名的关键字,来存储网络连接数据和域名服务器(DNS)信息。
5.如权利要求1所述的系统,其中,该系统被配置成通过存储作为对象的被选定的配置数据以及作为对应于所述对象的关键字的参数名,来存储配置参数。
6.如权利要求1所述的系统,其中,该系统被配置成存储作为对象的共享资源以及作为对应于所述对象的关键字的资源标识符。
7.如权利要求1所述的系统,其中,该系统被配置成存储作为对象的开放网络连接,以及作为对应于所述对象的关键字的对应于所述开放网络连接的系统、端口和通信协议。
8.如权利要求1所述的系统,其中,在所述高速缓存器系统中的内部数据结构包括从以下小组中选出的至少两种类型表,散列,树,栈以及混合数据结构。
9.如权利要求1所述的系统,其中,该高速缓存器系统是多层的,并且高速缓存器的至少一层被配置成存储对作为数据对象的高速缓存器的引用。
10.如权利要求1所述的系统,其中,该数据处理器被配置成在该高速缓存器系统中,使用C++模板创建一个或多个高速缓存器。
11.如权利要求1所述的系统,其中,该数据处理器被配置成,通过确定与当前内部数据结构相关的成本和与该可供替代的内部数据结构相关的成本并对这些成本进行比较,来确定该高速缓存器系统的使用是否表明应当使用该可供替代的内部数据结构。
12.如权利要求11所述的系统,其中,确定与该可供替代的内部数据结构相关的成本包括确定转换到该可供替代的内部数据结构所需的成本。
13.如权利要求12所述的系统,其中,转换到该可供替代的内部数据结构包括创建该可供替代的内部数据结构,将数据从当前内部数据结构迁移到该可供替代的内部数据结构,以及开始使用该可供替代的内部数据结构进行操作。
14.一种方法,包括提供一种用以存储多个对象的第一内部数据结构;使用该第一内部数据结构;监测该第一内部数据结构的使用;确定与该第一内部数据结构的使用相关的成本;确定与一种可供替代的内部数据结构的使用相关的成本;将与该第一内部数据结构的使用相关的成本跟与该可供替代的内部数据结构的使用相关的成本进行比较;以及若与该第一内部数据结构的使用相关的成本高于与该可供替代的内部数据结构的使用相关的成本,则创建该可供替代的内部数据结构,和将所述多个对象迁移到该可供替代的内部数据结构。
15.如权利要求14所述的方法,其中,确定与该可供替代的内部数据结构的使用相关的成本包括,确定与创建该可供替代的内部数据结构以及将所述多个对象迁移到该可供替代的内部数据结构相关的成本。
16.如权利要求14所述的方法,其中,确定与该可供替代的内部数据结构的使用相关的成本还包括,确定将对象存储在该可供替代的内部数据结构之中以及从该可供替代的内部数据结构中检索对象相关的成本。
17.如权利要求14所述的方法,还包括周期性地重复执行以下各步骤确定与第一内部数据结构的使用相关的成本,确定与该可供替代的内部数据结构的使用相关的成本,并且将与第一内部数据结构的使用相关的成本跟与该可供替代的内部数据结构的使用相关的成本进行比较。
18.如权利要求14所述的方法,其中,确定与第一内部数据结构和该可供替代的内部数据结构的至少其中之一的使用相关的成本包括基于估计的使用计算成本。
19.如权利要求14所述的方法,其中,确定与第一内部数据结构和该可供替代的内部数据结构的至少其中之一的使用相关的成本包括基于经验的使用数据计算成本。
20.如权利要求14所述的方法,还包括,若与第一内部数据结构的使用相关的成本高于与该可供替代的内部数据结构的使用相关的成本,则在将所述多个对象迁移到该可供替代的内部数据结构之后,删除第一内部数据结构。
21.如权利要求14所述的方法,其中,提供用于存储多个对象的第一内部数据结构包括提供一个在网络代理中具有第一内部数据结构的高速缓存器系统。
22.如权利要求21所述的方法,其中,使用第一内部数据结构包括在第一内部数据结构中存储和检索项目,其中,每一项都包括一个含有Web页面的对象,以及一个含有与该Web页面对应的统一资源定位符(URL)的对应关键字。
23.如权利要求21所述的方法,其中,使用第一内部数据结构包括在第一内部数据结构中存储和检索项目,其中,每一项包括一个含有IP地址的对象,以及一个含有与该IP地址对应的服务器名的对应关键字。
24.如权利要求21所述的方法,其中,使用第一内部数据结构包括在第一内部数据结构中存储和检索项目,其中,每一项包括一个含有被选定的配置数据的对象,以及一个含有参数名的关键字。
25.如权利要求21所述的方法,其中,使用第一内部数据结构包括在第一内部数据结构中存储和检索项目,其中,每一项包括一个含有共享资源的对象,以及一个含有资源标识符的关键字。
26.如权利要求21所述的方法,其中,使用第一内部数据结构包括在第一内部数据结构中存储和检索项目,其中,每一项包括一个含有开放网络连接的对象,以及至少一个含有一个或多个以下项目的关键字已经与之建立连接的系统和端口,和用于该连接的通信协议。
27.如权利要求14所述的方法,其中,所述第一和可供替代的内部数据结构包括从以下小组中选出的至少两种类型表,散列,树,栈以及混合数据结构。
28.如权利要求14所述的方法,其中,第一内部数据结构包括一个多层高速缓存器系统内的一个高速缓存器,并且其中,该多层高速缓存器系统中的各高速缓存器的至少一层被配置成存储对作为数据对象的高速缓存器的引用。
29.如权利要求14所述的方法,其中,提供每一种内部数据结构包括使用C++模板创建一个相应的高速缓存器。
30.一种软件产品,包括收录在一种数据处理器可读介质上的多条指令,其中,这些指令被配置使数据处理器执行包括以下步骤的方法提供一种用以存储多个对象的第一内部数据结构;使用该第一内部数据结构;监测该第一内部数据结构的使用;确定与该第一内部数据结构的使用相关的成本;确定与一种可供替代的内部数据结构的使用相关的成本;将与该第一内部数据结构的使用相关的成本跟与该可供替代的内部数据结构的使用相关的成本进行比较;以及若与该第一内部数据结构的使用相关的成本高于与该可供替代的内部数据结构的使用相关的成本,则创建该可供替代的内部数据结构,将所述多个对象迁移到该可供替代的内部数据结构。
31.如权利要求30所述的软件产品,其中,确定与该可供替代的内部数据结构的使用相关的成本包括确定与创建该可供替代的内部数据结构以及将所述多个对象迁移到该可供替代的内部数据结构相关的成本。
32.如权利要求31所述的软件产品,其中,确定与该可供替代的内部数据结构的使用相关的成本还包括确定将对象存储在该可供替代的内部数据结构中以及从该可供替代的内部数据结构中检索对象相关的成本。
33.如权利要求30所述的软件产品,其中该方法还包括周期性地重复执行以下各步骤确定与第一内部数据结构的使用相关的成本,确定与该可供替代的内部数据结构的使用相关的成本,并且将与第一内部数据结构的使用相关的成本跟与该可供替代的内部数据结构的使用相关的成本进行比较。
34.如权利要求30所述的软件产品,其中,确定与第一内部数据结构和该可供替代的内部数据结构至少其中之一的使用相关的成本包括基于估计的使用计算成本。
35.如权利要求30所述的软件产品,其中,确定与第一内部数据结构和该可供替代的内部数据结构至少其中之一的使用相关的成本包括基于经验的使用数据计算成本。
36.如权利要求30所述的软件产品,其中,该方法还包括,若与第一内部数据结构的使用相关的成本高于与该可供替代的内部数据结构的使用相关的成本,则在将所述多个对象迁移到该可供替代的内部数据结构之后,删除第一内部数据结构。
37.如权利要求30所述的软件产品,其中,提供用以存储多个对象的第一内部数据结构包括提供一个在网络代理中具有第一内部数据结构的高速缓存器系统。
38.如权利要求37所述的软件产品,其中,使用第一内部数据结构包括在第一内部数据结构中存储和检索项目,其中,每一项都包括一个含有一个Web页面的对象,以及一个含有与该Web页面相对应的统一资源定位符(URL)的对应关键字。
39.如权利要求37所述的软件产品,其中,使用第一内部数据结构包括在第一内部数据结构中存储和检索项目,其中,每一项都包括一个含有IP地址的对象,以及一个含有与该IP地址对应的服务器名的对应关键字。
40.如权利要求30所述的软件产品,其中,该内部数据结构被配置成,通过存储作为对象的选定的配置数据以及作为与所述对象相对应的关键字的参数名,来存储配置参数。
41.如权利要求30所述的软件产品,其中,该内部数据结构被配置成存储作为对象的各共享资源以及作为与所述对象对应的关键字的资源标识符。
42.如权利要求30所述的软件产品,其中,该内部数据结构被配置成存储作为对象的开放网络连接,以及作为与所述对象对应的关键字的对应于所述开放网络连接的系统、端口和通信协议。
43.如权利要求30所述的软件产品,其中,第一和该可供替代的内部数据结构包括从以下小组中选出的至少两种类型表,散列,树,栈以及混合数据结构。
44.如权利要求30所述的软件产品,其中,第一内部数据结构包括一个多层高速缓存器系统内的一个高速缓存器,并且其中,该多层高速缓存器系统中的各高速缓存器的至少一层被配置成存储对作为数据对象的各高速缓存器的引用。
45.如权利要求30所述的软件产品,其中,提供每一种内部数据结构包括使用C++模板创建一个相应的高速缓存器。
全文摘要
通过响应于检测到表明切换将改进性能的条件,动态地从一种内部数据结构切换到另一种内部数据结构,来改进数据存储与检索系统的性能的系统与方法。在一个实施例中,网络代理被实现为使用第一内部数据结构的高速缓存器。该高速缓存器的对象包括Web页面,该高速缓存器的关键字包括对应于Web页面的统一资源定位符(URL)。该代理监测高速缓存器的使用,并且周期性地确定与第一数据结构以及可供替代的数据结构的使用相关的成本。若与可供替代的数据结构的使用相关的成本低于与第一数据结构的使用相关的成本,则代理创建可供替代的数据结构,将数据从第一数据结构迁移到可供替代的数据结构,开始将可供替代的数据结构应用于该高速缓存器,并删除第一数据结构。
文档编号G06F12/08GK1751307SQ03805548
公开日2006年3月22日 申请日期2003年1月14日 优先权日2002年1月18日
发明者杰里米·S.·德博内特, 托德·A.·施蒂尔斯, 杰弗里·R.·安妮森, 飞利浦·阿尔维达七世, 保罗·M.·斯坎伦 申请人:伊迪蒂克公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1