具体实施方式
本发明涉及方法,系统,计算机程序产品,和用于注册和检索可以用来使缓存记录无效的数据库表格变化信息的数据结构。具有浏览器的客户端计算机系统对于可以生成和提供网络响应给客户端计算机系统(例如,网页和/或网络服务的结果)的服务器计算机系统是可网络连接的。服务器计算机系统至少从数据库中的数据表中访问网络响应的部分内容。服务器计算机系统包括一个可以存储所提供内容(包括来自数据表的内容)的缓存(例如,在系统存储区中)以提高所后提供相同的内容至安全客户端网络请求的效率。
服务器计算机系统(例如,响应于用户输入)配置了数据库中的一个数据表以在当数据表中的内容被替换(例如,插入,删除,更新)时提供一个关于更新的版本信息(例如,改变ID)的变化通知表。服务器计算机系统不时地查询该变化通知表或者响应于检索所缓存内容以请求相应数据表的已更新的版本信息。在响应中,数据库提供相应于该查询的数据表的已更新的版本信息。服务器计算机系统可以使用已更新的版本信息以使缓存记录(例如,基于预先分配的数据库缓存依赖性)无效。
在一些实施例中,服务器计算机系统接收一用于包括包含在数据表中的所请求内容的网络响应的客户端网络请求。服务器计算机系统决定被包含在网络响应中的内容的至少一部分当前没有缓存在服务器计算机系统中。服务器计算机系统从数据表中访问所请求的内容并且构建该网络响应以包括所请求的内容。服务器计算机系统给基于在构建该网络响应期间所执行的命令所构建的网络响应的至少一部分分配了一数据库缓存依赖性。至少一部分所构建的网络响应被缓存在服务器计算机系统中。
本发明的一些实施例可以包含特定的用途或一般用途计算机,其包括各种各样计算机硬件和软件的计算机,下面将具体阐述。特别地,在本发明的范围内的实施例包括用于携带或具有计算机可执行指令或存储于其上的数据结构的计算机可读媒体。这种计算机可读媒体可以是任何可以通过特定应用计算机或一般应用计算机访问的可用媒体。举个例子,但并不限于此,这种计算机可读媒体可以包含RAM,ROM,EEPROM,CD-ROM或其他物理存储媒体,例如光学磁盘存储,磁盘存储或其他磁性存储设备,或任何其他可以以计算机可执行指令或数据结构的形式用来记载或存储所需程序代码的方法的介质并且该介质可以被特定应用计算机和一般应用计算机访问的。当信息通过网络或其他与计算机的通信连接(硬件线路,无线,或硬件线路和无线结合的连接)被传送或提供时,该计算机可以适当地把该连接视为一计算机可读介质。因此,任何这种连接可以称为一计算机可读介质。上述方式的结合也可以包含在计算机可读介质范围内。计算机可执行指令包括,例如,会导致一般应用计算机,特殊应用计算机,或特殊应用处理设备,例如一GPU去进行一特定功能或一组功能的指令和数据。
在该描述中和在后面的权利要求中,“计算机系统”被定义为一个或多个软件模块,一或多个硬件模块,或它们的结合,它们结合在一起以处理指令或电子数据。例如,计算机系统的定义包括个人计算机的硬件元件,软件模块也一样,例如个人计算机的操作系统。模块的物理设计是不重要的,计算机系统包括一个或多个通过网络耦合的计算机。同样地,计算机系统也可以包括一个单个的其内部模块(例如存储器和处理器)一起工作处理指令和电子数据的物理设备(例如一移动电话或个人数字助理“PDA”)。
在该描述中和在后面的权利要求中,一“网络响应”被定义为一人类可读的页面,例如,像这样的,一网页,和/或来自网络服务的结果。网页可以从网络检索,例如,像这样的,通过访问相应的统一资源定位器(“URL”)的万维网(“WWW”)。网页可以包括个一或多个可显示在网络浏览器上的超文本标记语言(“HTML”)指令,例如,像这样的,浏览器102。网络服务提供用于不同应用和不同资源之间进行通信(用户交互作用的潜在依赖性)的机制而不必开发用户指令。网络服务可以集成一些不同的技术,例如,像这样的,用于标记数据的扩展标记语言(“XML”),用于传送数据的简单对象访问协议(“SOAP”),用于说明可用服务的网络服务说明语言(“WSDL”),和用于列出可用服务的通用说明,发现和综合语言(“UDDI”)。网络服务可以共享事务逻辑,数据,和通过网络的程序界面进行处理。
在该描述中和在后面的权利要求中,“网络请求”被定义为对于”网络响应“的请求。也可以是这样,用户在用户界面输入适当的命令以初始化一网络请求。例如,用户在客户端计算机系统101的浏览器102可以输入适当的命令以访问一相应网页的URL。另一方面,也可以通过应用来初始化一网络请求。例如,在客户端计算机系统101的网络服务应用可以初始化一网络请求至服务器计算机系统111的网络服务应用。
本领域的技术人员将会明白本发明可以应用在许多种计算机系统配置之中,包括,个人计算机,膝上电脑,多处理器系统,微机,大型计算机,及其类似。本发明也可以使用在包括本地和远程计算机系统的分布式系统环境中使用,它们通过网络相连(或者通过硬件线路相连,无线相连,或者通过硬件线路和无线的结合相连)一起执行任务,在分布式系统环境中,程序模块和相关数据结构可以位于本地或远程存储器存储设备中。
现在来看图1,图1示出了依据本发明原理的一个配置了依赖于其上的缓存记录和基于数据表中的变化无效的设备的网络结构100的例子。网络结构100中的矩形元件(例如,浏览器102,缓存界面模块132,响应结构模块133,数据库界面模块136,触发器167,和触发器177)表示促进本发明原理的可执行模块。卷形元件(缓存121和126,响应内容134,记录151和156,以及数据163和164)表示由可执行模块处理的数据。因此,网络结构100中描述的可执行模块和卷形元件根据本发明的原理相互协作。
在网络结构100中,客户端计算机系统101和服务器计算机系统111通过相应连接103和104分别与网络106相连的。网络106可以是局域网络(“LAN”),广域网(“WAN”),或者甚至是因特网。客户端计算机系统101包括浏览器102,它可以发送网页的网络请求(例如,超文本传送协议(“HTTP”)请求)并接收响应于一网络请求所返回计算机系统101的网页。浏览器102也可以在客户端计算机系统101上显示所接收的网页内容(例如,文本,图形,视频,和音频)。客户端计算机系统101也可以包括与在服务器计算机系统111上的相应的网络服务应用通信的网络服务应用。
服务器计算机系统111包括可以构建响应客户端网络请求的网络响应的响应结构模块133。响应结构模块133可以处理页面文件,例如,像这样的,动态服务器页面(“ASP”)文件,以构建网页。页面文件可以包括多种不同语言形成的指令和/或命令,例如,像这样的,超文本标记语言(“HTML”),扩展标记语言(“XML”),JavaScript,和VBScript。响应结构模块133可以处理页面文件中的指令和/或命令以生成网络响应的内容。响应结构模块133可以被配置以生成网页,例如,从浏览器响应于一网络请求,并配置以生成网络服务结果,例如,从一网络服务响应一网络请求。
服务器计算机系统111通过连接107与数据库141(例如,一SQL数据库)相连。数据库界面模块136可以通过连接107传送数据库命令至数据库141。数据库命令可以被用来在数据库141中处理内容(例如,添加,删除,或改变行或记录)或从其中检索内容。数据库界面模块136可以接收用户输入(例如,从键盘或鼠标),其可以被翻译成数据库命令并被传送到数据库141。可替代地,数据库界面模块136可以从在一网络响应中包含内容的响应结构模块133接收输入。在响应中,数据库界面模块136可以从数据库141中检索内容并提供该已检索的内容至响应结构模块133。响应结构模块133可以将在响应内容134中的静态内容与所检索的内容相结合以构建一个适当的网络响应。
数据库141可以存储包含在数据库141中的数据表的版本信息。数据库界面模块136可以检索数据表的版本信息并提供所检索的版本信息至缓存界面模块132中。缓存界面模块132可以利用所检索的版本信息来决定何时使缓存112中的记录无效(并在之后删除)。例如,基于所检索的版本信息缓存界面模块132可以决定何时使缓存记录121或缓存记录126无效。缓存112可以是一个具有降低潜在性的存储位置,例如,像这样的,服务器计算机系统111的系统存储器。
版本信息可以被存储在表示被包含在数据库141中的数据表的版本的版本信息数据结构中。版本信息数据结构的一个域可以是表示鉴定数据库141中数据表的表ID的表ID域。一个表ID可以是一个值,例如,可以唯一标识一个数据表的,包括数字和/或字母的字符。例如,表ID“销售表3”可以用来识别表162。
版本信息数据结构的另一个域可以是一个表示由一相应表ID识别的数据表的一变化ID的变化ID域。变化ID域可以是一个值,例如,可以识别识别数据表的当前版本的,包括数字的字符。当数据表中的内容被改变时,相应的变化ID可以被更新(例如,通过增加该变化ID)。例如,当内容被插入到表172中时,变化ID158可以被递增。版本信息数据结构的另一个域可以是表示数据库141何时开始寻找由相应表ID识别识别的数据表的版本的日期的日期域。例如,日期154可以说明何时数据库141开始寻找表162的版本信息。因此,版本信息数据结构可以是下面的形式:
版本信息
{
表ID域
变化ID域
日期域
}
一个或多个版本信息数据结构可以被存储为包含在数据库141中的变化通知表的记录。例如,变化通知表142包括记录151和156。而且,在变化通知表142中每一组包括三个竖向的省略号表示变化通知表142可以包括其他记录。相应于数据表的在变化通知表142中的每个记录都被配置以寻找版本信息。例如,记录151和156可以分别与表162和172对应。因此,表ID152可以存储一个用以识别识别表162的值,变化ID153可以存储一个说明表162当前版本信息的值,日期154可以存储说明数据库141何时开始寻找表162的版本信息的值。同样地,表ID157可以存储一个用来识别识别表172的值,变化ID158可以存储一个说明表172当前版本的值,并且日期159可以存储一个说明数据库141何时开始寻找表172的版本信息的值。
一个数据表可以被配置为通过使用相应的在一变化通知表中更新一适当变化ID的数据库触发器(例如,一部分计算机可执行指令)来寻找版本信息。当数据表中的内容被替换时,数据库触发器被执行并且适当的变化ID被更新。例如,当在记录164中的数据被替换,触发器167可以被执行以更新变化ID153的值。类似地,当记录176被插入到数据173中时,触发器177可以被执行以更新变化ID158的值。数据库141(或服务器计算机系统111的备用系统)的一个管理员或用户可以输入导致与数据表相关的适当的触发器上的用户输入。
表162和表172是包含在数据库141中的数据表。表162和172中的每一个都可以包括在由数据库界面模块136潜在检索的一个网络响应的所包含的内容。例如,表162和表172可以分别包括公司总量和销售信息。在数据表中的内容可以被一或多条记录所表示。例如,数据163由记录164和166(而潜在的其他记录由竖向的省略号表示)表示。同样地,数据173可以由记录174和176表示(而潜在的其他记录由竖向的省略号表示)。
数据库界面模块136可以传送命令至数据库141(或其他数据库)从而导致来自数据库141(或其他数据库)的内容被检索。所检索的内容可以用作后来被传送到一发送请求的计算机系统的网络响应的内容。例如,服务器计算机系统111可以从客户端计算机系统101接收网络请求。该网络请求可以被传送到响应结构模块133以处理相应的页面文件从而构建相应的网络响应。响应结构模块133可以检查缓存112以决定该网络响应(或其一部分)是否存储在缓存112之中。当一网络响应存储在缓存112时,网络响应可以直接被返回至客户端计算机系统101。
当网络响应没有存储在缓存112中时,脚本,包括相应的页面文件可以被执行以决定一网络响应。脚本的执行可以包括检查,和如果可用则使用存储在缓存112之中的网络响应。当内容没有存储在缓存112中时,所执行的脚本可以从数据库141中请求内容。因此,对内容的请求被传送到数据库界面模块136中,它可以发布适当的命令以检索变化ID和表ID以及基于变化ID和表ID的被检索的内容。例如,基于变化ID153和表ID152,数据库界面模块136随后可以从表162中检索数据。
也可以这样,版本信息在查询数据之前被检索。例如,数据库界面模块136可以被配置为在查询数据(例如,数据163和/或数据173)之前检索版本信息(例如,一或多个变化ID和一或多个相应的表ID)。在查询数据之前检索版本信息可以明显地减少在数据表中的数据在数据被查询后在版本信息被检索之前被改变这种很少出现的情况的可能性。
响应结构模块133也可以决定所检索的内容是否要被缓存以及所检索的内容是否依赖于一数据表。响应结构模块133可以将要被缓存的所检索的内容,与任何数据表(例如,表ID和相应的变化ID)的依赖性的指示一起,传送到缓存界面模块132。缓存界面模块132可以将所检索的内容插入到缓存112中。因此,后面的该被检索内容的网络请求可以以提高的效率被处理。
所缓存的内容可以存储在表示所缓存内容和相应依赖性的缓存记录数据结构中。缓存记录数据结构的一个域可以是表示在所请求的网络响应中已经(或将要)返回客户端计算机的内容的页面内容域。页面内容可以包括网络响应的一部分(例如,一条或多条来自数据表的记录)或可以包括一完整的网络响应。例如,响应内容122可以包括来自记录164和166的内容。可替代地,响应122可以包括包含数据库141中内容的,来自响应内容134的内容的,以及来自其他位置(例如,来自其他数据库或来自其他网络服务)的内容的一完整的网络响应。
缓存记录数据结构的另一个域可以是一个表示识别识别数据库141中数据表的表ID的表1D域。一表ID可以是一个值,例如,从一变化通知表中检索到的,包括数字和/或字母的字符。例如,当从表162中检索内容时,表ID152也可以从变化通知表142中被检索。因此,在缓存112中的一个表ID可以与在变化通知表中的表ID相对应。例如,当从表172中检索内容时,表ID128和表ID157都可以识别识别表172。
在一些实施例中,一个单个的表ID/变化ID元组,例如,像这样的,一个主码记录,对于每个被监视的数据表来说都存在于缓存中。任何存在于表中的内容都可以依赖于相应的主码记录。因此,可以这样,许多个缓存记录依赖于相同的主码记录。当表通过表ID变化来识别识别时,相应的变化ID可以在主码记录中被更新或者主码将被移除。更新或移除一条主码记录导致任何依赖于缓存的记录(例如,缓存记录126)被从缓存中移除。使一条单独的主码的从属性无效的多条缓存记录会减少所需查询和版本比较的数量以维持缓存记录。因此,主码记录可以被用来提高决定何时从属内容无效的效率。
缓存记录数据结构的另一个域可以是表示一由相应表ID识别识别的数据表的变化ID的变化ID域。一个变化ID可以是一个值,例如,从变化通知表中被检索到的,包括数字的字符。例如,当从表162中检索内容时,变化ID153可以从变化通知表142中被检索。因此,在缓存112中的变化ID可以对应于在变化通知表142中的变化ID。例如,当数据从表172中被检索时,变化ID129和变化ID158可以相等。因此,缓存记录数据结构可以是下面的格式:
缓存_记录
{
页面内容
表ID域
变化ID域
}
一条或多条记录数据结构可以被存储在缓存112中。例如,缓存112包括缓存记录121和126。而且,在缓存112中的每列圆点号(也就是,省略号)表示缓存112可以包括的其他缓存记录。在缓存112中的每一条缓存记录对应于包括在前面所构建的网络响应中的部分内容。例如,缓存记录121和126分别包括响应内容122和127,它们可以被包括在传送到客户端计算机系统101的网络响应(或可以是网络响应)中。
有时,服务器计算机系统111可以查询数据库141的版本信息。例如,数据库界面模块136可以被配置成在指定的时间间隔(例如,每五秒钟)查询数据库141。响应于接收的查询,数据库141可以给任何已经从接收的最后一个查询信号后被替换的数据表返回版本信息。一个查询可以是一指定的对数据表的具有区别于包含在该查询中版本信息的版本信息的请求。数据库界面模块136可以接收从数据库141中返回的版本信息。数据库界面模块136将所接收的版本信息传送到缓存界面模块132。缓存界面模块132可以处理所接收的版本信息以识别识别要被无效和从缓存112中移除的缓存记录。可替代地,缓存界面模块132可以处理所接收的版本信息以在缓存112中更新合适的主码记录。
在一替代实施例中,服务器计算机系统111可以查询数据库141中已经变化的版本信息,并且请求该查询不要返回直到一些变化被决定。例如,数据库界面模块136可以被用来给每个被监视的表发布一个阻塞查询。所发布的阻塞查询对于每个受监视的表来说可以包括当前持有的版本信息。在接收所发布的阻塞查询时,数据库141一直等待直到一个或多个被请求的表的版本信息被更新。响应于该更新,数据库141可以返回该变化表的表ID和版本信息。阻塞查询可以被同步执行,从而对数据的请求并不返回直到变化信息可用。另一方面,阻塞查询可以被异步执行,从而请求被立即返回,并且在当变化信息可用时服务器计算机系统111发送一个回复信息。
图2示出了依据本发明原理的一种用于配置一个数据库以提供表格变化通知的方法200一个流程图的例子。可以讨论一下与网络结构100中描述的系统和数据库相关的方法200。方法200包括选择一个数据表的步骤以监视变化的步骤(步骤201)。步骤201可以包括一个对于从要被监视内容变化的数据库中选定的数据表来说是可连接(或包含)的计算机系统。选定的以监视变化的数据表可以包括数据库界面模块136接收识别要被监视的数据表的用户输入。例如,服务器计算机系统111和/或数据库141的一个管理员可以提交选定用来监视的表选定的162和表172的命令。当一个变化通知表并不总是存在时,管理员也可以输入命令以创建一个变化通知表。例如,服务器计算机系统111和/或数据库141的一个管理员可以提交命令至数据库141以创建变化通知表。
可替代地,计算机系统111可以自动提交选定用来监视数据表的命令,以响应于接收的对于相应包括从所选定的数据表中的内容的网络响应的网络请求。例如,响应于接收一相应包括来自表162和/或表172中内容的网络相应的网络请求,服务器计算机系统111可以自动提交选定用来监视的表162和/或表172选定的命令。当一变化通知表不存在时,服务器计算机系统111可以自动的,例如,基于脚本上的页目录,提交可以导致变化通知表被创建的命令。例如,响应于接收相应包括来自数据库141中数据表的内容的网络响应的网络请求,服务器计算机系统111可以自动提交导致变化通知表142被创建的命令。数据库界面模块136可以传送用户输入和/或自动产生变化通知表创建命令和数据表选择命令至数据库141。
方法200包括插入一条相应于数据表的记录到变化通知表(步骤202)。步骤202可以包括当变化通知表并不总是包括一条相应于数据表的记录时插入一条相应于数据表的记录到变化通知表。例如,与数据库网络互连(或包含)的计算机系统可以插入一条相应于被选定数据表的记录到变化通知表中。一条插入的记录可以包括相应于被选定数据表的版本信息(例如,由版本信息数据结构表示的)。插入到变化通知表的记录可以包括数据库界面模块136接收指示一条将要被插入到变化通知表的记录的用户输入。
例如,服务器计算机系统111和/或数据库141的一个管理员可以提交导致记录151和156将被插入到变化通知表142中的命令。可替代地,计算机系统111可以自动提交导致记录要被插入到相应于接收一相应网络响应的网络请求的变化通知表中的命令,其中该网络响应包括包括相应选定数据表中的内容。例如,响应于接收对应于包括来自表162和/或表172的内容的网络响应的网络请求,服务器计算机系统111可以自动提交导致记录151和156被插入到变化通知表的命令。数据库界面模块136可以将用户输入或自动生成的记录插入命令传送到数据库141。
方法200包括一个给选定的数据表分配触发器的步骤(步骤203)。步骤203可以包括在当触发器没有分配给该选定的数据表时给选定数据表分配该触发器。例如,与数据库网络互联(或包含)的计算机系统可以分配一个触发器给选定的数据表。一个分配的触发器可以导致当在选定数据表中的内容被替换时选定数据表的版本信息在变化通知表中被更新。例如,当在表162中的内容被替换时(例如,当在数据163中一条记录被插入,移除,或改变时)触发器167会导致变化ID153被更新(例如,增长)。类似地,当在表172中的内容被替换时(例如,当在数据173中一条记录被插入,移除,或改变时)触发器177可以导致变化ID158被更新(例如,增长)。
分配触发器可以包括数据库界面模块136接收指示一个触发器将要被分配到选定的数据表的用户输入。服务器计算机系统111和/或数据库141的一个管理员可以提交导致触发器分配到所选定数据表的命令。例如,管理员可以提交导致将触发器167分配到表162和将触发器177分配到表172的的输入。可替代地,计算机系统111可以自动分配一个响应于接收一相应于包括所选定数据表的内容的网络响应的网络请求。例如,响应于接收一相应于包括来自表162和/或表172的数据的网络响应的网络请求,服务器计算机系统111可以自动提交导致将触发器167分配到表162的和/或导致将触发器177分配到表172的的命令。数据界面模块136可以将用户输入或自动生成的分配命令传送到数据库141。
一个触发器可以包括附属于一个表的部分计算机可执行指令。触发器可以是事件驱动从而当事件发生时该部分计算机可执行指令被执行。例如,触发器167可以被设置为激活当在数据163中的内容被替换时并且可以包括导致变化ID153被递增的部分计算机可执行指令。
方法200包括更新响应于在选定数据表中的被变化的内容的版本信息的步骤(步骤204)。步骤204可以包括与一更新响应于所选定的被改变的数据表的数据库网络互联(或包含)的计算机系统。例如,当数据162中的内容被替换(或者是自动或者是用户输入的结果)时计算机系统可以执行包括导致变化ID153被递增的触发器167的部分计算机可执行指令。
方法200包括返回该已更新的版本信息至请求的服务器计算机系统(步骤205)。步骤205可以包括返回该已更新的版本信息至请求的服务器计算机系统以至于该被更新的版本信息可以被用来决定服务器计算机系统中的缓存记录中内容的有效性。例如,数据库141可以发送记录151和156(或它们的部分)至服务器计算机系统111以响应于来自服务器计算机系统111的查询。数据库界面模块136可以从数据库141中接收数据记录。数据库界面模块136可以将来自记录151和156的数据(例如,表ID152和157与变化ID153和158)中传送数据至缓存界面模块132以用来识别要被无效的缓存记录。
在一些实施例中,所缓存的内容以对象和结果的形式被用来生成网络响应,例如表格数据,对象,样本,或部分的网络响应。当结果可以被用在超过一个网络响应的的生成中时缓存这些中间结果是合适的,其中每个网络响应包括附加的差异信息(例如,自定义或其他相关信息的结合)。在其他一些实施例中,一个完整的网络响应被缓存。当一个完整的网络响应可以被多个不同网络请求所共享时缓存该完整的网络响应是适当的。当缓存一个完整的网络响应时,该网络响应可能以较低优先级被推迟被缓存在服务器计算机系统中,例如,一个核心模式响应缓存。因此,当该网络响应无效时,它就被从低优先级的缓存中被移除。
图3示出了依据本发明的原理的一个使部分缓存内容无效的方法300的一个流程图的例子。方法300将与在网络结果100中描述的相关计算机和数据库一起讨论。方法300包括查询一相应于一个或多个数据表的版本信息的变化通知表(步骤301)。步骤301可以包括一个服务器计算机系统,它构建包括来自一个或多个数据表中内容的网络响应,在查询变化通知表的相应于一个或多个数据表的版本信息时。例如,数据库界面模块136可以查询变化通知表142的相应于表162和163的版本信息。数据库界面模块136可以查询变化通知表142以作为接收用户输入的结果,指定查询的间隔的出现,响应于一个检索所缓存内容的请求,或一个优先于来自依赖表中请求的数据初始化的阻塞查询。
一个查询可以被配置为请求所有被监视的在变化通知表中显示的数据表的版本信息,请求用于具有突出依赖性的被监视的数据表的版本信息,或者请求用于已经改变(例如,通过包括在查询中的当前版本信息)被监视的的数据表的版本信息。响应于一个查询,更新的版本信息从从数据库返回到服务器计算机系统。基于查询的配置,数据库可以返回,例如,所有被监视数据表的版本信息,具有突出缓存依赖性的被监视的数据表的版本信息,或者已经改变的被监视的数据表的版本信息。
可替代地,服务器计算机系统可以发布一个查询至变化通知表并请求被发布的查询阻塞在服务器计算机系统上直到所请求表的版本信息被更新。例如,服务器计算机系统可以发布查询,该查询被阻塞在服务器计算机系统上直到当前的版本信息大于一指定的阈值。所发布的阻塞的查询可以被同步执行,从而使服务器计算机系统上的一个相应的线程被阻塞直到结果是可用的。另一方面,所发布的阻塞的查询可以被异步执行,从而使相应的在服务器计算机系统上的一个线程(例如,在一独立的线程)不被阻塞并且在服务器计算机系统上的结果可用时调用一个回复信息。
方法300包括一个接收至少一个来自变化通知表被最后查询时就已经改变的数据表的列表的步骤的步骤302。步骤302可以包括一个服务器计算机系统,它构建包括来自至少一个数据表的网络响应,接收来自至少一个自从变化通知表被最后查询时就已经改变的数据表的列表的步骤。至少一个数据表的列表可以包括该至少一个数据表的当前版本信息。例如,数据库141可以返回包括数据表162的版本信息(例如,表ID152和变化ID153)以及表172的版本说明的数据表(例如,表ID157和变化ID158)的版本信息到服务器计算机系统111。数据库界面模块136可以接收从数据库141返回的数据表的一个列表。
方法300包括一个决定所缓存的内容依赖于至少一个数据表的步骤(步骤303)。步骤303可以包括一个服务器计算机系统,它构建包括来自至少一个数据表的内容的网络响应,决定所缓存的内容依赖于至少一个数据表。例如,服务器计算机系统111可以决定依赖于表162的响应内容122和依赖于表172的响应内容127。缓存界面模块132可以将所接收的表ID(表ID152和157)与相应的缓存的表ID(表ID123和128)相比较。当表ID的比较如此说明(例如,当所接收的表ID和所缓存的表ID识别属于相同的数据表时)时,缓存界面模块132决定依赖于一个数据表所缓存的内容。例如,当表ID123的值与表ID152的值匹配时,缓存界面模块132可以决定依赖于表162响应内容。类似地,当表ID128的值与表ID157的值匹配时,缓存界面模块132可以决定依赖于表172响应内容127方法300包括当前版本信息与所缓存的版本信息的比较步骤(步骤304)。步骤304可以包括一个服务器计算机系统,它包括构建包括来自至少一个数据表的内容的网络响应,比较当前的版本信息和所缓存的版本信息。例如,服务器计算机系统111可以将从返回的列表中的版本信息与存储在缓存112中的版本信息相比较。缓存界面模块132可以将所接收的变化ID(变化ID153和158)与相应的所缓存的变化ID(变化ID124和129)相比较。
方法包括移除基于比较结果的部分所缓存内容的步骤(步骤305)。步骤305可以包括一个服务器计算机系统,它构建包括来自至少一个数据表的内容的网络响应,移除基于比较结果的所缓存的部分内容。例如,服务器计算机系统111可以从缓存112中移除所缓存的基于当前版本信息与所缓存的版本信息的比较。当变化ID的比较这样指示(例如,当一个所接收的变化ID的值比所缓存的变化ID的值大时),缓存界面模块132移除缓存的内容。例如,当变化ID153比变化ID124大时,缓存界面模块132可以从缓存112中移除缓存记录121。类似地,当变化ID158比变化ID129大时,缓存界面模块132可以从缓存112中移除缓存记录126。当变化ID相等时所缓存内容不会从缓存112中被移除。
因此,通过使用数据库缓存依赖性,适当的使所缓存内容无效的可能性会增加。当数据表没有改变时,从缓存中预先完全移除无效的依赖内容的机会会增加。因此,来自缓存的无效依赖内容可以被用来更为有效的构建网络响应。另一方面,当数据表已经被改变,从缓存中移除相应无效依赖内容的机会会增加。因此,无效依赖内容潜在地阻止被包含在网络响应中。
图4示出了依据本发明原理的一种用于访问请求客户端计算机系统显示内容的方法400的一个流程图的例子。方法400将与在网络结构100中描述的相关的计算机系统和数据库一起讨论。方法400包括从一客户端计算机系统接收网络请求的步骤(步骤401)。步骤401可以包括一个服务器计算机系统,它构建包括来自至少一个数据表的内容的网络响应,从一客户端接收网络请求。例如,服务器计算机系统111可以从客户端计算机系统101(例如,在浏览器102接收的作为用户输入的结果发起的)接收网络请求。一个网络请求可以推导,例如,当浏览器102访问一个相应于网络响应的通用资源定位器(“URL”)时。
一个网络请求可以请求包括被包含在一数据表中的所请求的内容的网络响应的递送。例如,一个来自客户端计算机系统101的网络响应可以是一个包括来自表162和/或表172的网络响应的请求。表162和表172通常可以访问其他的可以替换在数据表162和172(包括将要被包括在所请求的网络响应中的内容)中被包含的内容的应用(例如,工作流程或应用总量)。因此,可以这样,包括在数据163和数据173中的内容通过在网络请求之间的其它应用被替换。
响应于接收一网络请求,服务器计算机系统111可以决定一个完整的相应网络响应被存储在缓存112中(或在一低优先级缓存中)。当该完整的相应网络响应被缓存时,服务器计算机系统111可以从缓存112中返回该完整的被缓存的网络响应而不需进一步请求任何作为网络请求的结果的处理。因此,当一完整的网络响应被缓存时,与一网络响应的完成相关的潜在性可以明显的减少。
另一方面,响应于接收一网络请求,服务器计算机系统111可以决定至少一部分的相应网络响应当前不被缓存。方法400包括一个决定要被包括的相应网络响应的内容的至少一部分当前不被缓存(步骤402)。步骤402可以包括一个服务器计算机系统,它构建包括来自至少一个数据表的内容的网络响应,决定包括在网络响应中的至少一部分内容当前没有被缓存到服务器计算机系统。例如,服务器计算机系统111可以决定包括在将被递送到客户端计算机系统101的网络响应中的至少一部分内容当前没有被缓存在计算机系统111。
一个在服务器计算机系统111接收的网络请求可以被传送到响应结构模块133。因此,响应结构模块133可以检索一个适当的页面文件(例如,一个ASP文件)和处理该页面文件以构建一相应的网络响应。包括在该页面文件中的脚本可以请求存储在服务器计算机系统(例如,在表162和/或163中)外部位置的内容。当一个外部内容的请求被处理时,响应结构模块133可以发送适当的指令至缓存界面模块132以致使缓存界面模块132尝试查找在缓存112中的外部内容的地点。当外部内容被存储在缓存112中时,缓存界面模块132可以响应说明外部内容存储在缓存112中的响应结构模块。另一方面,当外部内容没有存储在缓存112中时,缓存界面模块132可以响应说明外部内容没有存储在缓存112中的响应结构模块。
当决定了包括在没有被缓存的一个网络响应的至少一部分内容时,服务器计算机系统111可以进一步决定该至少一部分内容是否依赖于数据库141中的任何数据表。当该至少一部分内容依赖于数据库141中的一个数据表时,服务器计算机系统111可以进一步决定数据表的一条相应主码记录是否存储在缓存112中。当相应的主码记录不是存储在缓存112中时,服务器计算机系统111可以检索数据表(例如,来自变化通知表142)的适当的版本信息并将一个包括适当版本信息相应的主码记录存储在缓存112中。
方法400包括一个访问来自数据表请求的内容的步骤(步骤403)。步骤403可以包括一个服务器计算机系统,它构建包括来自至少一个数据表的内容的网络响应,来自访问数据表中所请求的内容。例如,服务器计算机系统111可以从数据库141的一个表中访问所请求的内容。作为不存储在数据库141中的所请求的内容的指示的响应,响应结构模块133可以发送适当的指令(例如,通过发布一个查询)至数据库界面模块136以致使数据库界面模块136尝试找到数据库141中所请求内容的位置。数据库141可以寻找所请求内容(例如,在记录164,166,174,和/或176中)的位置并返回所请求的内容至数据库界面模块136。数据库界面模块136然后可以传送所请求的内容至响应结构模块133。
方法400包括构建相应网络响应的步骤,该网络响应包括所请求的内容(步骤404)。步骤404可以包括一个服务器计算机系统,它构建包括来自至少一个数据表的内容的网络响应,并构建该网络响应。例如,服务器计算机系统111可以包括在一要被返回到客户端计算机系统101的网络响应中的来自数据库141的内容。响应结构模块133可以包括从数据库界面模块136接收的所请求的内容(例如,来自记录164,166,174,和/或176)以满足一网络请求。基于所请求的内容(与潜在的包括在一适当页面文件中的在其他HTML和XML命令以及脚本一样),响应结构模块133可以生成一个适当的网络响应。
方法400包括用于存储所请求内容以至于所请求的内容可以被有效的访问以满足后续的网络请求的面向结果的功能步骤(步骤407)。步骤407可以包括任何用于存储所请求的内容的相应步骤从而使所请求的内容被有效的访问以满足后续的网络请求。然而,在图4的方法的例子中,步骤407包括一给所构建的网络响应的至少一部分分配数据库缓存依赖性的相应步骤(步骤405)。步骤405可以包括一个服务器计算机系统,它构建包括来自至少一个数据表的内容的网络响应,给所构建的网络响应的至少一部分分配数据库缓存依赖性。
步骤407也包括一个缓存至少一部分所构建的网络响应的相应步骤(步骤406)。步骤406可以包括一个服务器计算机系统,它构建包括来自至少一个数据表的内容,缓存至少一部分所构建的网络响应,服务器计算机系统可以在服务器计算机系统的缓存位置缓存至少一部分所构建的网络响应。例如,缓存界面模块132可以导致由响应结构模块133构建的网络响应的至少一部分优先于所构建的网络响应被递送到客户端计算机系统而被存储在缓存112中。
当缓存一个完整的网络响应时,该网络响应可以被推迟被缓存在一服务器计算机系统的低优先级存储器上,例如,在一核心模式响应缓存中。例如,一个完整的网络响应可以被发送到一由因特网信息服务器(“IIS”)模块维持的缓存位置。因此,当该网络响应无效时,就被从低优先级缓存中被移除。
数据库缓存依赖性可以被分配并且所缓存内容的至少一部分可以作为在网络相应构建过程中所执行命令的结果。在一些实施例中,数据库缓存依赖性被分配给一个网络响应中的部分内容。下面的第一个例子的指令可以被包括在一页面文件中以导致在网络响应的部分内容被分配一数据库缓存依赖性:
1.<HTML>
2. <Script>
3. SqlCacheDependency c;
4. c=new SqlCacheDependency(pubs,products);
5. ProductCollection p=getproducts();
6. Cache.Insert(“Pinfo”,p,c);
7. </Script>
8. </HTML>
这个例子的第3行的指令创建一个数据类型为SqlCacheDependency的变量“c”。SqlCacheDependency可以是一个已经被预先建立的用于表示数据库缓存依赖性的数据类型。这个例子的第4行的指令分配该变量c以表示包含在“pubs”数据库中的表“products”的依赖性。这可以表示,例如,包含在数据库141上的表162的依赖性。这个例子的第5行的指令创建一个数据类型为“productCollection”的变量“p”。ProductCollection可以是一个预先被建立的用于表示从产品数据库中接收的产品列表的数据类型。函数“getproducts()”在第5行被执行以返回一个存储在变量p里的产品列表(例如,从表162和/或163中)。
这个例子的第6行的指令创建一条缓存记录(例如,在缓存112中)。缓存记录用主码“Pinfo”创建,随后它可以被用做缓存记录的参考。该缓存记录被创建并存储在由变量p表示的产品列表中(例如,作为响应内容122)并且缓存记录依赖于在pubs数据库中的用变量c(例如,作为表ID123)表示的产品表。当大量的网络响应都包括相同部分的内容时第一个例子中的指令可以是特别有利的。
下面例子中的指令可以被包括在一个页面文件中以检索所缓存的产品列表:
ProductCollection p=Cache(“Pinfo”);
当检测到在pubs数据库中的产品表被替换时,通过主码Pinfo所参考的缓存记录是无效的。在其他一些实施例中,一个数据库缓存依赖性被分配给一完整的网络响应。下面的第二个例子的指令可以被包含在一页面文件中导致一完整的网络响应被分配给一数据库缓存依赖性:
1. <%Output Cache SqlTableDepend=“pubs:products”%>
2. <HTML>
3. <Script>
4. ...
5. </Script>
6. </HTML>
第二个例子的第1行指令是导致该从网页文件产生的依赖于包含在“pubs”数据库中的“products”表的完整网络响应的指示。一条缓存记录可以被创建以缓存该从网页文件产生的完整的网络响应(例如,作为响应内容127)。在第4行的省略号表示其他可以执行的脚本指令,例如,像这样的,当页面文件被处理时,访问在pubs数据库里的产品表的。当大量客户端请求相同的网络响应时第二个例子的指令可以是很有利的。
数据库缓存依赖性被结合一个或多个其他缓存依赖性使用也是可以的,例如,像这样的,一时间,文件,主码,和/或网络服务缓存依赖性或者甚至其他数据库缓存依赖性。例如,下面的例子的指示可以被包含在一页面文件中导致一完整的网络响应被分配到不光数据库缓存依赖性还有时间依赖性:
<%Output Cache Duration=600s SqlTableDepend=“pubs:customers”%>
该例子的指示会导致从相应网络响应被创建或直到该在“pubs”数据库中的“用户”表被替换时在缓存中要维持600秒的相应网络响应。
在一些实施例中,一或多条缓存记录是关联于(或者,与之有联系的)数据库依赖缓存记录的(因此产生一个主码依赖性)主码依赖缓存记录。因此,使数据库依赖缓存记录无效会导致每一个主码依赖缓存记录也无效。因为主码依赖缓存记录是依赖于在缓存中(例如,在系统存储器中)的其他数据的,使一主码依赖缓存记录无效是比使一数据库依赖缓存记录(它可以要求一数据库查询,网络通信,数据串行化,等等)无效更有效。因此,为了增加使缓存记录的无效的效率,,一个具有依赖内容的第一缓存记录可以被配置为依赖于一第二缓存记录(通过一主码依赖性)。当在相应数据表中的变化被检测时,该第二缓存记录使任何依赖缓存记录无效。响应于一检测到的变化,该第二缓存记录也可以从存储或者适当的用于可以被更新的相应的数据表的版本信息中被移除。
例如,缓存记录121和缓存记录126都依赖于表162(例如,表ID123和表128都对应于表ID152)也是可以的。为了优化决定何时响应内容122和响应内容127被无效的效率,一条依赖于表162的主码记录可以被插入到缓存112中(也就是,插入到系统存储器中)。缓存记录121和126可以依赖于所插入的主码记录。当表ID162被替换时,数据库141的一个后续查询可以识别变化ID153被更新并使所插入的主码记录无效。使所插入的主码记录无效会自动使缓存记录121和126无效而不是要求变化ID124和变化ID129直接与变化ID153进行比较。因此,数据库查询的次数和版本信息可以被减少并且网络,数据库,和处理资源得以保留。
方法400包括一个将所构建的网络响应传送至响应于网络请求的客户端计算机系统的步骤(步骤408)。步骤408可以包括一个服务器计算机系统,它构建包括来自至少一个数据表的内容的网络响应,将所构建的网络响应传送至响应于网络请求的客户端计算机系统。例如,响应于该来自客户端计算机系统101的网络请求服务器计算机系统111可以递送一网络响应至客户端计算机系统101。所递送的网络响应可以是一个由响应结构模块133构建的网络响应。
图5示出了一种用于本发明原理的适合的操作环境。图5以及下面的论述会提供实施本发明涉及的适合的计算环境一个简洁,通用的描述。虽然没有被要求,该环境仍然以用计算机可执行指令通用格式被描述,例如程序模块可以被计算机系统执行。一般来说,程序模块包括例行程序,程序,对象,组件,数据结构,以及其类似,其执行特殊任务或执行特别的抽象数据类型。计算机可执行指令,相关的数据结构,和程序模块表示用于执行这里公开的方法中的步骤的程序代码方式的例子。
参照图5,一个用于实行本发明的示范性系统可以包括一在计算机系统520形式的通用计算机设备,包括一处理单元521,一系统存储器522,和一系统总线523用于将包括系统存储器522的多种系统组件相连至处理单元521。处理单元521可以执行设计用来实现计算机系统520特点的计算机可执行指令,包括本发明中的特点。系统总线523可以是多种总线结构类型中的任何一种,包括一存储器总线或存储控制器,一外设总线,和一使用各种总线结构中任一种的本地总线。系统存储器包括只读存储器(“ROM”)524和随机存储器(“RAM”)525。一基本输入/输出系统(“BIOS”)526,它包括基本的例行程式有助于在计算机520中的组件之间传送信息的事务,例如在启动期间,可以存储在ROM524中。
计算机系统520也可以包括一个用来从硬磁盘539读出和写入的硬磁盘驱动器527,一用来从可移动磁盘529读出和写入的磁盘驱动器528,以及一用来从一可移动光盘531中读出或写入的光学磁盘驱动器630,例如,或者是,一CD-ROM或其他光学媒体。硬磁盘驱动器527,磁盘驱动器528,以及光学磁盘驱动器530都通过硬磁盘驱动器接口552、磁盘驱动器接口533和光学磁盘驱动器接口534与系统总线523分别相连。这些驱动器和它们相关的计算机可读媒体提供计算机可执行指令、数据结构、程序模块、以及其它用于计算机系统520的其他数据的非易失性的存储。虽然这里描述的本发明的实例环境使用了一个硬磁盘539,一可移动磁盘529和一可移动光盘531,也可以使用用来存储数据的其他类型的计算机可读媒体,包括磁带,闪存卡,数字通用磁盘,Bernoulli磁盘,RAM,ROM,及其类似。
程序代码方法包括一个或多个可以存储在硬盘539、磁盘529、光盘531、ROM524或RAM525中的程序模块,包括一个操作系统535,一个或多个应用程序536,其他程序模块537,和程序数据538。一个用户可以通过键盘540,定位设备542,或其他输入设备(未示出)给计算机系统520输入命令或信息,例如,像这样的,一个话筒,游戏手柄,游戏控制台,扫描仪,或其类似。这些和其他输入设备可以通过与系统总线523耦合的串行接口546被连接到处理单元521。可替代地,输入设备可以通过其他接口被连接,例如,像这样的,一并行端口,一游戏端口,一通用串行总线(“USB”)端口,或一带电线的端口。一监视器547或其他显示设备也通过视频适配器548与系统总线523相连。计算机系统520也可以连接到其他外部输出设备(未示出),例如,像这样的,扬声器和打印机。
计算机系统520和网络是可互连的,例如,像这样的,一个办公室范围或企业范围的计算机网络,一内部网,和/或互联网。计算机系统520可以与外部资源交换数据,例如,像这样的,通过这种网络连接的远程计算机系统,远程应用程序,和/或远程数据库。
计算机系统520包括网络接口553,通过它计算机系统520从外部资源接收数据和/或传送数据至外部资源。如图5所述,网络接口553使通过链接551与远程计算机系统583交换数据更为容易。链接551表示网络的一部分。而远程计算机系统583表示网络中的一个节点。例如,远程计算机系统583可以维持一给为在计算机系统520所构建的网络响应提供内容的数据库。另一方面,计算机系统583可以是一个从一计算机系统520所维持的数据库中请求内容的服务器计算机。
同样地,计算机系统520包括串行接口546,通过它计算机系统520从外部资源接收数据和/或传送数据至外部数据。串行接口546耦合至调制解调器554,通过它计算机系统520从外部资源接收数据和/或传送数据。可替代地,调制解调器554可以是一个通过适当接口与计算机系统520相连的符合电缆服务接口规格的数据(“DOCSIS”)调制解调器或数字用户线(“DSL”)调制解调器。然而,如图5所描述的,串行接口54和调制解调器554使通过链接552与远程计算机系统593的数据交换更为容易。链接552表示网络的一部分,而远程计算机系统表示网络中的一个节点。例如,远程计算机系统593可以是一个从计算机系统520请求网络响应的客户端计算机系统。另一方面,计算机系统593可以是一个给计算机系统520提供网络响应的服务器计算机系统。
而图5表示一个用于本发明的适合的操作环境,本发明的原理在该系统中可以得到体现,如果必要可进行适当的修改,以实现本发明的原理。图5所示的环境仅仅是示范性的决不是表示在本发明原理可以实现的环境中的很大范围中的一小部分。
本发明的模块,除了相关的数据外,可以从任何与计算机系统520相关的计算机可读媒体被存储并访问。例如,部分的这些模块和部分相关的程序数据可以被包括在操作系统535,应用程序536,程序模块537和/或程序数据538中,用于系统存储器522的存储。当一大容量存储设备,例如,像这样的,硬磁盘539,与计算机系统520耦合时,这些模块和相关程序数据也可以被存储在该大容量存储设备中。在一个网络环境中,被描述为与计算机系统520相关的程序模块和相关数据,或者它们的部分,可以被存储在远程存储设备中,例如,像这样的,与远程计算机系统583和/或远程计算机系统593相关的系统存储器和/或大容量存储设备。这些模块的执行可以在一如前所述的分布式环境中进行。
本发明可以在不脱离其精神和本质特点的情况下用其它的指定方式实现。所描述的实施例是在所有方面仅仅用于示例性的而不是限制性的。因此,本发明的范围是,由所附的权利要求书来说明而不是前面的说明书。所有的在权利要求范围内的等效的改变都是包含在其范围内的。