首页> 中国专利> 一种实现网络查询缓存的系统和查询方法

一种实现网络查询缓存的系统和查询方法

摘要

本发明提供一种实现网络查询缓存的系统,包括:查询绑定器,用于绑定与查询请求实例相关的虚拟视图元信息到系统内存中,并从下层至上层依次设置虚拟视图的写操作时间标志;查询解析器,用于根据查询请求实例的有效性将虚拟视图解析成查询树;查询描述符管理器,用于存储施加在虚拟视图上的查询请求实例的队列,确定查询请求实例进出所述队列,并判断查询请求实例的有效性;查询调度器,用于调度查询树的查询节点执行查询;查询缓存器,用于创建和删除临时表,管理临时表中的数据集,并更新查询描述符中查询请求实例的时间特性标识,输出查询结果。本发明基于增量进行缓存,提高了查询的性能和吞吐率,同时对查询请求执行过程提供透明性支持。

著录项

  • 公开/公告号CN101329686A

    专利类型发明专利

  • 公开/公告日2008-12-24

    原文格式PDF

  • 申请/专利权人 中国科学院计算技术研究所;

    申请/专利号CN200810117515.4

  • 发明设计人 李晓林;徐志伟;谢毅;

    申请日2008-07-31

  • 分类号G06F17/30(20060101);

  • 代理机构11280 北京泛华伟业知识产权代理有限公司;

  • 代理人王勇

  • 地址 100190 北京市海淀区中关村科学院南路6号

  • 入库时间 2023-12-17 21:15:08

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2018-08-17

    未缴年费专利权终止 IPC(主分类):G06F17/30 授权公告日:20100317 终止日期:20170731 申请日:20080731

    专利权的终止

  • 2013-11-20

    专利权的转移 IPC(主分类):G06F17/30 变更前: 变更后: 登记生效日:20131104 申请日:20080731

    专利申请权、专利权的转移

  • 2012-05-02

    专利权的转移 IPC(主分类):G06F17/30 变更前: 变更后: 登记生效日:20120327 申请日:20080731

    专利申请权、专利权的转移

  • 2010-03-17

    授权

    授权

  • 2009-02-18

    实质审查的生效

    实质审查的生效

  • 2008-12-24

    公开

    公开

查看全部

说明书

技术领域

本发明涉及计算机应用技术领域,特别涉及网络环境中数据库应用的一种实现网络查询缓存的系统和查询方法。

背景技术

随着网络应用层业务逻辑的处理和计算变得越来越复杂,一个查询请求可能涉及到对网络上多个分布数据源的即时访问,这种大量基于分布数据源上的联合查询,由于受网络带宽、请求负载、数据量等因素的影响,访问性能常常是这类应用的瓶颈,因此,针对这类应用模式的性能优化技术研究一直是热点。

从技术方法层面,到目前为止,主要有两种思路实现这类分布式查询的缓存机制来提高访问的性能。

思路一是在内存中做cache,将查询请求需要的数据结果集预先(或者第一次请求时)读取到内存中,以后的请求就是基于内存访问的。

例如开源项目memcache,其是一种高性能的分布式对象缓存,安装位置介于应用程序与数据存储之间,它把对象保存在RAM中。访问对象时,如果已经缓存,只需检索该对象并继续进行处理,否则,转至数据库、获取必需的数据、将其映射到对象中并把它添加到缓存中。这样,memcache将最小化或消除针对先前处理过的信息的数据库查询开销。这种做法的缺点是:1)数据对象是缓存在内存中,因此,受内存大小的约束,不可能支持大量数据查询结果集的缓存需要;2)memcache内存数据组织是以内存对象模式,不是以关系数据模式,因此,为应用开发提供的是专用的访问接口,不接受标准的SQL语句。

又例如MySQL数据库的缓存机制,也是利用内存缓存数据表,如果运行相同的SQL,服务器直接从缓存中取到结果,而不需要再去解析和执行SQL。如果表更改了,那么使用这个表的所有缓冲查询将不再有效,查询缓存值的相关条目被清空。更改包括表中任何数据或是结构的改变,也包括那些映射到已改变的表的使用MERGE表的查询。显然,这对于频繁更新的表,查询缓存是不适合的,而对于一些不常改变数据且有大量相同SQL查询的表,查询缓存会节约很大的性能。这种做法的缺点是:1)同样受内存大小的约束;2)缓存数据的替换策略是以整个数据表为单元,而不是以更细粒度的查询请求为单元;3)查询必须是逐字节相同才能够被认为是相同的,而条件相同但访问的字段集不同的被认为是不同的请求;4)缓存数据只存在数据库所在的服务器上,目前还不支持分布式网络环境的多节点服务器间的缓存。

思路二是通过建立临时存储的数据表机制,将部分中间结果存储在临时表中,部分查询访问是针对临时表进行的。这种模式不受内存大小的约束,能支持大量数据的访问,各种应用程序会有不同的解决方案,关键在于如何确定临时表的创建、删除、有效性检查机制。其中的核心问题是要解决好两个因素的权衡:一是尽可能少的数据访问,特别是网络数据访问,避免大量数据在网络上的传输;二是在保证时效性要求下尽可能的提高cache的利用率。联邦数据库系统和数据仓库系统用到了一些类似的技术。

如图1所示,联邦数据库系统(FDBS)由半自治数据库系统构成,相互之间分享数据,联盟各数据源之间相互提供访问接口,同时联邦数据库系统可以是集中数据库系统或分布式数据库系统。应用程序可以向联邦服务器提交用SQL编写的查询。联邦服务器优化该查询,产生一个执行方案,其中这条查询被分解为可以在各个数据源上执行的片段。对这条查询可能存在多种分解,优化器根据最少资源总耗估计值从多种可能中做出选择。一旦选定一个方案,联邦数据库就开始执行,调用相应的底层数据源包装器来执行分配给它们的片段。为了执行某个代码段,包装器会执行任何所需的数据源操作,这些操作也许是一系列函数调用,或者是提交给数据源用其本机查询语句执行的查询。生成的数据流被返回给联邦服务器,由联邦服务器来组合它们,执行任何其它的由数据源无法完成的处理,然后将最终结果返回给应用程序。为了提高性能,联邦数据库常常采用自动摘要表(AST)机制实现了某种形式的高速缓存,它使管理员可以定义一组底层表中数据的物化的视图。对于某些类型的查询,数据库可以自动地确定是否使用AST回答查询,而不用访问基本表。这种做法的缺点是:1)物化的视图的替换策略是以整个数据表为单元,而不是以更细粒度的查询请求为单元;2)难以在网络环境确保相对较高的物化视图的时效性。

如图2所示,数据仓库是在企业管理和决策中面向主题的、集成的、与时间相关的和不可修改的数据集合,由底层数据库管理系统(DBMS)提供数据资源和软件支持。其中,数据被归类为广义的、功能上独立的、没有重叠的主题。全局数据缓冲器缓存数据库页和数据仓库的导出数据,将需要访问的数据预先全部读取到数据仓库的本地数据库中,并进行周期性的更新,为查询操作提供工作空间,应用程序请求都是基于本地库表或者视图访问的,同时,全局数据缓冲器需要为多查询生成有效的缓冲分配方案和替换策略。这种做法可以提高数据查询处理的效率,但不便于解决下列需求:1)多用户查询请求之间结果数据集的共享;2)难于在分布式网络环境确保相对较高的缓冲时效性,同时容易导致网络周期性的高负载现象。

要解决上面的问题需要将请求相对数据访问的时间和空间特征与相应的缓存机制相互结合,提供一种基于增量的透明化的查询缓存机制。

发明内容

本发明是针对网络环境大量数据源的分布式查询需求,提供一种实现网络查询缓存的系统和查询方法,以提高查询的性能和吞吐率,同时对查询请求执行过程提供透明性支持。

为实现上述目的,根据本发明的一个方面,提供了一种实现网络查询缓存的系统,包括查询绑定器、查询解析器、查询描述符管理器、查询调度器和查询缓存器,其中:

所述查询绑定器,用于绑定与查询请求实例相关的虚拟视图元信息到系统内存中,并从下层至上层依次设置所述虚拟视图的写操作时间标志;

所述查询解析器,用于根据所述查询请求实例的有效性将所述虚拟视图解析成为由查询节点构成的查询树;

所述查询描述符管理器,用于存储施加在所述虚拟视图上的查询请求实例的队列,确定所述查询请求实例进出所述队列,并根据所述虚拟视图的写操作时间标志和所述查询请求实例的时间特性标识判断所述查询请求实例的有效性;

所述查询调度器,用于按照所述查询树的下层到上层的顺序逐层调度所述查询解析器生成的所述查询树的查询节点执行查询;

所述查询缓存器,用于创建和删除临时表,并根据所述查询请求实例进出所述队列来管理所述临时表中的数据集,并更新查询描述符中查询请求实例的时间特性标识,输出查询结果。

上述系统中,所述查询描述符管理器包含查询锁,用于控制对所述查询描述符的写操作和所述查询描述符中查询请求实例的时间特性标识的更新。

上述系统中,所述查询解析器利用查询合并和查询下推技术,将多个虚拟视图解析成所述查询树的一个子查询节点。

上述系统中,所述查询调度器进行并发调度。

根据本发明的另一个方面,还提供了一种网络查询方法,包括下列步骤:

1)绑定与查询请求实例相关的虚拟视图元信息到系统内存中,并从下层至上层依次设置所述虚拟视图的写操作时间标志;

2)根据所述虚拟视图的写操作时间标志和所述查询请求实例的时间特性标识判断所述查询请求实例的有效性,并根据所述查询请求实例的有效性将所述虚拟视图解析成为由查询节点构成的查询树;

3)按照所述查询树的下层到上层的顺序逐层调度所述查询树的所有查询节点执行查询,将所述每个查询节点查询得到的数据集导入临时表,并更新查询描述符中查询请求实例的时间特性标识;

4)输出所述临时表中所述请求实例对应的根查询节点的数据集。

上述方法中,所述步骤2)进一步包括:

21)创建或获得当前要解析的虚拟视图对应的查询描述符;

22)根据所述虚拟视图的写操作时间标志和所述查询请求实例的时间特性标识判断所述查询请求实例的有效性,如果有效则执行步骤3);

23)判断所述查询请求实例对应的虚拟视图是否未访问其他虚拟视图,如果是则执行步骤3);

24)根据虚拟视图的映射关系,将所述查询请求实例解析成对应所述虚拟视图的下层虚拟视图的子查询节点;

25)将当前解析的针对该虚拟视图的查询请求实例放入所述查询描述符的查询请求实例队列中;然后再依次进行步骤21)、22)、23)和24)直到形成由查询节点构成的查询树。

上述方法中,所述步骤22)包括下列步骤:

221)判断所述查询请求实例是否在所述查询描述符的请求队列中,如果不在则所述查询请求实例缓存无效;

222)判断所述查询请求实例的时间特性标识是否过期,如果过期,则所述查询请求实例缓存无效;否则,有效。

上述方法中,所述步骤3)包括下列步骤:

31)调度当前最下层查询节点执行查询;

32)将查询的数据集导入临时表,并更新所述查询请求实例的时间特性标识;

33)基于下层的查询节点的执行结果,执行所述下层查询节点的上层查询节点,实现数据的汇聚查询;

34)判断是否已经是根查询节点,如果不是,则依次进行步骤31)、32)和33),获得所述根查询节点查询的数据集。

上述方法中,

所述步骤2)还包括步骤:获得所述查询描述符的查询锁;

所述步骤3)还包括步骤:将所述每个查询节点查询得到的数据集导入临时表后,释放对应所述查询节点的查询描述符的查询锁;

所述步骤4)还包括步骤:释放根查询节点的查询锁。

本发明的效果在于:借助虚拟化技术和视图技术,实现分布式查询请求的统一管理和表示;执行过程中,不需要一次性的将所有数据搬迁到临时表中,临时表数据的建立是在执行过程中逐渐通过增量累加建立的;同时对数据的有效性检查、管理和更新不是基于表的粒度,而是以请求实例为粒度单位进行的,请求实例的结果集数据量的大小是不确定的,查询描述符中一个请求实例对应标识一个数据集(请求实例条件所标识的数据集之间有可能存在交叉,但物理数据记录只有一份);同时,这种增量缓存机制对应用程序是完全透明的。

使用本发明的方法,可以实现分布式多数据源查询中,利用请求存在对数据访问的时间局部性和空间局部性,通过对请求实例的有效性检查、管理和调度,在请求实例间实现数据访问结果集的细粒度共享,在保证较高时效性前提下,充分提高系统中的宏观吞吐率和性能。

附图说明

图1是联邦数据库体系结构示意图;

图2是数据仓库体系结构示意图;

图3是根据本发明一个实施例的实现网络分布式查询增量缓存的系统结构图;

图4是根据本发明一个实施例的虚拟视图形成的访问和映射关系图,以及由查询解析器优化解析后形成的对应查询树结构图;

图5是根据本发明一个实施例的网络查询方法流程图。

具体实施方式

下面结合附图对本发明的具体实施方式作进一步详细的说明。

如图3所示,根据本发明一个实施例,提供了一种实现网络环境分布式查询的增量缓存的系统,包括查询绑定器(query binder)、查询解析器(query parser)、查询描述符管理器(query descriptor)、查询调度器(queryscheduler)、查询缓存器(query cacher)五个主要功能模块。各部件的功能和实现具体如下:

查询绑定器:分布的多数据源的查询请求,需要首先利用虚拟化的方法和视图技术,将应用程序需要的数据表示成虚拟视图。由于虚拟视图通过关系的连接、联合等操作可以形成新的虚拟视图,因此可以构建复杂应用程序所需要的虚拟视图。根据本发明一个实施例,建立一个具有层次结构的应用程序最终需要的虚拟视图,通过虚拟视图之间的访问关系来表示对数据源的联合查询。应用程序的访问是基于这些虚拟视图提交查询请求的,系统在接收到一个查询请求实例时,查询绑定器根据虚拟视图的访问关系,绑定与该查询请求实例相关的虚拟视图元信息到系统内存中,形成与该查询请求实例相对应的虚拟视图。由于对下层虚拟视图的写操作导致的数据变化可能导致上层虚拟视图的临时数据无效,所以在绑定的时候,还需要从下至上依次设置虚拟视图的写操作时间标志为该虚拟视图和其所有下层虚拟视图中的最近一次写操作时间,为查询解析时检查有效性提供依据。

查询解析器:应用程序提交的查询请求实例是针对虚拟视图的,需要依据绑定的虚拟视图元信息做查询请求实例的分解解析,根据该查询请求实例的有效性将其解析成针对虚拟视图的具有一定偏序关系的由查询节点构成的查询树,其中每个子查询节点代表施加在该虚拟视图上的查询请求实例。优选的,适当利用查询合并、查询下推等优化技术,将对几个视图的查询联合形成一个查询节点,这不影响本发明的方法。

如图4(a)所示,通过连接(join)、联合(union)等关系操作,形成一种层次结构的虚拟视图访问和映射关系,其中,虚拟视图4,5通过连接操作形成虚拟视图2;虚拟视图6,7通过联合操作形成虚拟视图3;而虚拟视图2和3再通过连接操作形成虚拟视图1。在解析时,查询解析器从顶层(根)开始,依据虚拟视图模式映射关系,对依次施加在每层虚拟视图上的查询请求实例进行解析,形成如图4(b)所示的最终查询树。注意到查询树与虚拟视图访问关系并不是一一对应的,在图4(a)中,虚拟视图2对虚拟视图4和5有访问关系,当虚拟视图4和5分别映射到同一个物理数据源中的两个数据表时,通过解析的优化机制,查询树中的查询2直接映射到这两个数据表模式上,执行时就可以直接施加该连接查询请求实例到这个数据源上。如图4(b)所示,查询2,查询4,查询5是子查询节点,而查询1是根查询节点。

在解析一个具体的查询请求实例时,需要获得代表所有下层视图的查询描述符的查询锁,避免多个用户同时访问一个虚拟视图时,对相应的临时表临界资源读写操作的冲突。

查询描述符管理器:施加在虚拟视图上的查询请求实例由查询描述符管理器进行管理,虚拟视图与查询描述符一一对应,由于多个用户会话并发性的存在,存在多个查询请求实例同时访问一个视图的情形,但是每个查询请求实例具体施加到该虚拟视图上的查询条件、时间不尽相同,这样为查询请求实例之间共享部分数据集创造了条件。所以,一个查询描述符中有一个专门存储管理查询请求实例的队列,至于队列的大小设置可以根据服务器配置以及请求特征设定。施加在该虚拟视图上的每个查询请求实例是该队列的一个对象元素。描述一个查询请求实例有三个重要属性:请求条件,用于标识该查询请求实例的数据集的条件;查询请求实例发生的时间特性标识——读操作时间标志;表示查询请求实例的会话的所有者属性。这样便于确定查询请求实例之间具有集合性质的关系,例如,某个查询请求实例请求条件标识的数据集是另一个查询请求实例请求条件所标识的数据集的子集。该队列大小有限,因此需要有一种进出的替换计算方法。查询描述符与物理存在的临时表也一一对应,上述计算方法也就直接对应到临时表中数据集的进出替换更新策略,也即具有检查当前请求的数据集是否缓存有效的判断标准。策略描述如下:

如果当前查询请求实例不在查询描述符的请求队列中,表示缓存无效。是否在请求队列中的判断标准是:当前查询条件与某个查询请求实例的条件相等;或者当前查询条件是某个查询请求实例条件所代表数据集的子集。如果满足在其中,则判断查询请求实例的时间特性标识的读操作时间标志是否过期,具体为,如果对应的虚拟视图的写操作时间标志标识的写操作时间是在查询请求实例的最近一次读操作后发生,则该查询请求实例的时间标识过期。如果时间特性标识过期,表示该查询请求实例对应的缓存无效,否则有效。无效时该虚拟视图将继续向下进一步解析;有效时,针对该查询就不会被查询解析器继续向下分解形成新的子查询节点,可直接由查询调度器调度该子查询节点执行。当执行一个新的查询请求实例时,如果队列已满,需要将某个查询请求实例替换出队列,被替换的对象是最后一次访问时间最早的查询请求实例。

每个查询描述符管理器还有一个对应的锁控制,叫查询锁,只有获得了查询锁,才能对查询描述符做写操作和查询请求实例时间特性标识的变更操作,从而控制对临时表内数据集的读写操作。

查询调度器:查询解析器生成查询树后,需要通过查询调度器调度查询节点执行查询。调度可以直接将查询施加到对应的数据库服务器上,也可以将查询分发到其他协同执行的服务器上,再在这个服务器上继续执行访问请求的一个完整过程,这实际上是优化机制尽量确保网络间传递的中间数据结果最少。

因为生成的查询树具有偏序依赖关系,也即时间关系,和查询缓存,也即空间关系,所以查询调度可以是并发调度,但需要满足查询节点之间的关系。当下层的子查询全部执行结束时,包含数据结果的数据集都存储到对应的物理存在的临时表中,此时再针对临时表中数据执行上层查询节点,实现数据在多层的汇集,进而形成每个查询节点的临时数据集。一旦执行上层查询节点后,就可以完全释放其下层查询节点对应的查询锁。依次类推,直到执行最顶层的查询节点,而获得最终数据结果。在返回给应用程序请求最终结果同时,释放顶层查询节点的查询锁。

查询缓存器:如上所述一个查询描述符对应一个物理存在的临时表,查询缓存器将包括每个查询描述符的所有查询请求实例的数据集累加导入到对应的临时表中,其中已经在临时表中的有效数据集不再导入。查询缓存器对临时表中的数据集作细粒度管理,主要包括:临时表创建/删除、数据集的调入/调出。当查询描述符的某个查询请求实例被替换后,该查询请求实例的条件对应的数据集有可能仍然被其他查询请求实例所共享访问,也即,查询请求实例条件所标识的数据集之间可能有交叉,查询缓存器在做调出时,不允许将这部分数据调出。因此,在调出数据时,需要获得和检查查询请求实例队列,并计算调出数据的条件约束语句。假设查询请求实例队列长度是n,对应的查询请求实例条件分别为cond1,cond2,...,condn。如果要替换m(1≤m≤n)查询请求实例出对列,那么导出数据表示的条件理论上应该是condm and not(cond1 or cond2...or condm-1 orcondm+1...or condn)。实际操作时候,需要进行约束条件的等效优化处理。查询缓存器还用于设置和更新查询描述符中对应查询请求实例的时间特性标识;而且在执行完顶层查询节点后,向应用程序输出临时表中该请求实例对应的根查询节点的数据集。

图5是根据本发明一个实施例的网络查询方法流程图,具体包括下列步骤:

步骤S1,应用程序针对虚拟视图提交的一个查询请求实例。

步骤S2,绑定与该查询请求实例相关的虚拟视图元信息到系统内存中,并从下至上依次设置虚拟视图的写操作时间标志为该虚拟视图和其下层虚拟视图的最近一次写操作时间标志。

根据所述虚拟视图的写操作时间标志和查询请求实例的时间特性标识判断查询请求实例的有效性,根据查询请求实例的有效性解析虚拟视图成为由查询节点构成的查询树,其中查询节点代表查询请求实例。具体操作为:

步骤S3,创建或获取当前要解析的虚拟视图对应的查询描述符,并获得该查询描述符的查询锁,实现对临时表内数据集的读写控制;步骤S4,判断查询请求实例的缓存有效性,即检查该查询请求实例所需数据是否在临时表中存在且其时间特性标识未过期,如果是则执行步骤S8;步骤S5,判断该查询请求实例对应的虚拟视图是否未访问其他虚拟视图,如果是则执行步骤S8;步骤S6,查询解析器根据该虚拟视图的映射关系,将该查询请求实例解析成对应该虚拟视图的下层虚拟视图的子查询节点;步骤S7,将当前解析的针对该虚拟视图的查询请求实例放入对应的查询描述符的查询请求实例队列中,如果请求实例队列已满,则将最后一次访问时间最早的查询请求实例替换出队列,并调出其在临时表中的数据集;然后再依次进行步骤S3、S4、S5、S6、S7,直到形成一个由查询节点构成的查询树;

按照从所述查询树的下层到上层的顺序逐层调度所述查询树的所有查询节点执行查询,将所述每个查询节点查询得到的数据集导入临时表,并更新查询描述符中查询请求实例的时间特性标识。具体操作为:

步骤S8,查询调度器在满足查询之间形成的偏序依赖情况下,调度当前最下层查询节点执行查询;步骤S9,每个子查询节点的查询执行完后,将查询的数据集导入临时表,并更新对应查询请求实例的时间特性标识;步骤S10,当下层的查询节点都执行完后,基于下层查询节点的查询结果执行该下层查询节点的上层查询节点,实现数据的汇聚查询,并释放下层所有节点的查询锁;步骤S11,判断是否已经是根查询节点,如果不是,依次进行步骤S8、S9、S10,获得调度根查询节点查询的数据集。

步骤S12,输出所述根查询节点查询的数据集作为结果返回给应用程序,释放顶层查询锁。

应该注意到并理解,在不脱离后附的权利要求所要求的本发明的精神和范围的情况下,能够对上述详细描述的本发明做出各种修改和改进。因此,要求保护的技术方案的范围不受所给出的任何特定示范教导的限制。

去获取专利,查看全文>

相似文献

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

客服邮箱:kefu@zhangqiaokeyan.com

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

  • 服务号