一种大数据量分类检索网页的响应方法

文档序号:6564097阅读:145来源:国知局
专利名称:一种大数据量分类检索网页的响应方法
技术领域
本发明通常涉及万维网(在下文简称为"WEB"),具体涉及大数据 量分类检索网页的响应,即显示大数量分类检索网页的结果。
背景技术
在互联网快速发展的今天,人们越来越多的利用互联网来处理日 常的事务,社会生活各个方面的数据信息越来越多的要依靠互联网来 进行发布和传递。因此,对WEB应用提出了更高的要求。在这些WEB应用中,大都需要对系统中的数据进行分类检索。而 这些WEB应用数据量大,并发用户数大,但需要能较快的将分类检索 结果返回给用户,带来较好的用户体验。对于这些大数据量的WEB应用进行分类检索,如果采用简单的数 据库查询的方法来实现,因为其数据量较大,査询时间会随着系统数 据量的增大而增长,从而占用数据库连接的时间也较长。因此,如果 在一定的时间内,并发用户数较大的情况下,就会使得数据库连接被 占满,使越来越多用户的查询无法立即得到数据库连接,而处于等待 的状态。这样,大大增加了数据库负载,使得系统的响应速度越来越 慢,甚至会出现无法响应的情况,将远远无法满足用户需求。因此,我们可以应用缓存技术来提高网页响应速度,解决上述问 题。但现有技术存在以下问题1、 一般只适用于对静态页面的缓存,对于分类检索页面这种动态 页面就很难进行缓存了。2、 基于服务器端的动态页面输出缓存,没有利用分类检索的特点, 未对数据也进行缓存。3、 基于服务器端的动态页面输出缓存,采用轮询的方式,将所有 可能的输出页面缓存,大量占用了系统的处理时间和存储空间。4、 基于服务器端的动态页面输出缓存,页面缓存的形式采用HTML, 缓存了冗余的页面展示格式等信息,增加了不必要的缓存空间
发明内容
本发明要解决的技术问题是针对一些WEB应用数据量较大,用户 并发较多的情况,提出一种提高大数据量分类检索网页响应速度的实 现方法,能够有效提高大数据量分类检索的网页响应速度,减轻数据 库的负载。本发明一种大数据量分类检索网页的响应方法,包括以下步骤A、 当系统启动时,将需要供用户分类检索的数据从数据库中査询 出来,并缓存于内存中;B、 当用户请求某种检索条件的网页时,首先在页面缓存中査找是 否存在有效的页面缓存;如果存在,则将页面缓存直接作为结果返回; 如果不存在,则根据检索条件,在内存数据缓存中査找出所需结果, 生成相应的页面,将其缓存为页面缓存后作为结果返回;C、 对内存中的数据刷新,同时在内存数据刷新后,作废之前缓存 的页面缓存。在上述方案中,还包括根据分类检索的类型,对内存中缓存的数 据建立索引。建立分类索引的方法可以是a、 循环遍历加载于内存中的缓存数据记录,读取某一记录N;得 到某一分类X对应字段的值,即分类X的分类值keyXN;b、 从该分类X的索引表indexTableX中找到该分类值keyL的索 弓l歹接indexListXN;c、 在该索引列表indexListXN中插入该记录的编号N,即为该记录 N建立了分类X的索引。在生成内存数据缓存和建立索弓I时,将内存数据缓存和索引锁住, 只允许一个线程执行加载内存数据缓存和建立索引的操作,不允许其 它线程同时读写缓存。
本发明中的页面缓存可以采用xml的形式。 在本发明中,页面缓存于内存或磁盘中。在生成页面缓存时将页面缓存记录锁住,只允许一个线程生成某 一检索条件的页面缓存,不允许其它线程读写该检索条件的页面缓存。在本发明中,无论页面缓存于内存或磁盘中,在内存中建立一张 哈希(Hash)表,以存储某个检索条件的页面缓存是否存在以及其内 容;Hash表中的健值保存了各种检索条件,Hash表中的值保存了对应 检索条件的页面缓存是否己生成或其内容。本发明中的内存数据的刷新方式为实时刷新或定时刷新。本发明将需要检索的数据,在内存中缓存起来,数据的检索不再 是在数据库中査询,而是在内存中进行检索。大大减轻了数据库的负 载,也加快了数据查询的速度,提高了系统的性能。将各种已查询过 的分类检索条件的査询结果缓存起来,不用每次检索时都需要对内存 数据进行査询,而是直接返回缓存起来的査询结果,从而提高页面响 应速度。


图1是响应分类检索网页流程图;图2是内存数据缓存结构示意图;图3是分类的索引表结构示意图;图4是分类索引建立流程图;图5是两种分类组合检索流程图;图6是获得和生成页面缓存流程图。
具体实施方式
下面结合附图和具体实施例对本发明一种提高大数据量分类检索 网页响应速度的方法进行说明。图1描述了如何利用内存数据缓存和页面缓存,得到用户请求的分类检索网页的一种流程,具体实现如下步骤101:用户请求某种分类索引条件的xml页面。步骤102:服务器收到请求后,判断是否存在这种分类检索条件的xml缓存,如果不存在xml缓存,则执行步骤103;如果存在xml缓存, 则将此xml缓存作为结果返回,响应用户请求,流程结束。xml可以缓存在内存中,也可以缓存在磁盘上。这取决于在一定时 间内,可能生成的xml的数量。如果数量不大,可以缓存在内存中, 因为这样能够较快的读写;但是如果数目很大,这时如果再缓存于内 存中,将大量销耗内存,影响系统的性能,所以需要将页面缓存于磁 盘中,只在内存中记录己生成页面缓存,方便查找是否存在有效的xml 缓存。因此,不管xml页面缓存是存放在内存中,还是磁盘中。内存中 都建立一张Hash表,以存储某个检索条件的xml页面缓存是否存在或 其内容。Hash表中的健值(key)保存了各种检索条件,Hash表中的 值(value)保存了对应检索条件的页面缓存是否已生成或其内容。所 以,可用Hash算法,查找这张表获得是否已生成xml页面。如果xml 页面缓存是存放在内存中的,就可以直接得到xml;如果xml页面缓存 是存放在磁盘中的,可以通过检索条件,根据文件存放规则,得到xml 文件存放的路径,读取磁盘中的xml文件得到xml。可以通过配置来设置页面缓存的方式,是缓存于内存还是磁盘中, 使系统更加灵活。系统管理员,在系统的维护与管理中,可以根据系 统实际运行情况进行调整,以使系统性能达到最佳。步骤103:判断内存数据缓存是否已加载,如果未加载,则执行步 骤104;如果已加载,则执行步骤105。步骤104:加载内存数据缓存并建立索引。从数据库中查询得到需要供用户检索的数据,进行缓存。内存数 据缓存结构示意图,如图2所示,它示出了数据是如何在内存中存储 的。数据以记录为单位存储于列表中,并被编上编号,以方便建立索引。
图4示出了建立分类索引的一种流程。从步骤401的N为0开始, 402若N不小于记录数,结束。步骤403循环遍历加载于内存中的缓存 数据记录,读取记录N;得到分类X对应字段的值,即分类X的分类值(keyXN),如步骤404所示。步骤405,从分类X的索引表(indexTableX) 中找到该分类值(keyXN)的索引列表(indexListXN)。索引表可釆用 Hash表的形式存储,如图3示出了分类X的索引表(indexTableX)的 存储结构。Hash表中的健值(key)保存了该分类所有可能的分类值 keyX^ keyX2、……、keyXN; Hash表中的值(value)保存了对应分类 值的索引列表,索引列表以列表的形式存储,记录了分类X对应字段 的值为该分类值的记录编号。这样就可以用Hash算法在分类X的索引 表(indexTableX)中,快速的找到分类值(keyXN)的索引列表(indexListXN)。然后,如步骤406所示,在该索引列表(indexListXN) 中插入记录编号N,这样就为记录N建立了分类X的索引。同样的,步 骤407到409建立了分类Y的索引。记录N的索引建立完后,再建立 N+l的索引,如步骤410。需要注意的是,在生成内存数据缓存和建立索引时,需要将内存 数据缓存和索引锁住,只允许一个线程执行加载内存数据缓存和建立 索引的操作,不允许其它线程同时读写缓存,否则会出现数据脏读和 重复加载等问题。步骤105:根据检索条件,利用索引检索内存数据缓存,得到结果集。下面结合图5两种分类组合检索的流程图,描述如何利用索引表, 根据keyl和keyYN这两种分类检索条件,检索出从第startnum行(从 l开始计数)到第endnum行结果集的一种过程。如步骤501所示,先 根据分类X检索条件keyXN,在分类X索引表indexTableX中,得到索 引列表indexListXN,该列表中存储了所有分类X对应字段的值为keyXN 的记录编号;如步骤502所示,再根据分类Y检索条件keyYN,在分类 Y索引表indexTableY中,得到索引列表indexListYN,该列表中存储 了所有分类Y对应字段的值为keyYN的记录编号。然后,如步骤503-512 所示,通过循环得到indexListXjP indexListYN的交集,即分类X对 应字段的值为keyYN,分类Y对应字段的值为keyl的记录编号的集合 列表。因为检索结果是分页显示的,所以只需要得到该交集中的第startnum行到第endnum行数据,所以,如步骤511所示,在得到了第 endnum行数据后就可以结束循环,返回检索结果。在得到满足条件的 记录编号后,如步骤510所示,在内存数据缓存表dataTable中,得 到该编号的记录,将其插入检索结果列表中。循环结束就可得到所要 的检索结果记录集了。如果只需要得到一种分类Z检索的结果集,上述流程可以简化, 只需要得到对应索引列表indexListZN的第startnum行到第endnum行数据包含的记录集即可。步骤106:根据得到的记录集,生成xml,将xml缓存,并将xml作为结果返回,响应用户请求,流程结束。应用xml作为页面缓存的形式,使页面缓存的字节数较小,并且 可以直接将缓存作为响应,而无需再进行计算。检索结果的xml的结 构主要由data、 curPage、 rcdPerPage、 rcdCount禾口 extralnfo结点 组成。其中,每一个data结点描述了一条记录,其子结点fieldl、 f iled2、 f ield3、……、f ieldN描述了该记录中每个字段的值;curPage 描述当前页号;rcdPerPage描述每一页的记录数;rcdCount描述了某 一检索在不分页的情况下的记录总数;extralnfo用来描述一些页面展 示时需要的扩展信息。这种结构的xml,较完整的描述了检索结果数据,而且有效的减少 了用于描述页面展示格式的冗余信息,减少了缓存占用的空间。在xml 中定义展示xml的xsl样式表,如下所示〈7xml-stylesheet type = 〃text/xsl〃 href = 〃style.xsl"7〉将这种结构的xml发送到客户端,浏览器使用xml中定义的xsl 样式表来转换xml数据,将检索结果展示给用户,满足用户的需求。需要注意的是,在生成页面缓存时需要将页面缓存记录锁住,只 允许一个线程生成某一检索条件的页面缓存,不允许其它线程读写该 检索条件的页面缓存。具体的流程如图6所示。步骤601:请求某检索条件的页面缓存。步骤602:锁住页面缓存Hash表。步骤603:判断该检索条件的页面缓存记录是否被锁住。如果己锁 住,则执行步骤604;如果未锁住,则执行步骤606。 步骤604:释放页面缓存Hash表的锁。步骤605:线程处于休息状态,等待被唤醒。线程被唤醒后,则执 行步骤602,继续判断该检索条件的页面缓存记录是否被锁住。步骤606:判断该检索条件的页面缓存是否已生成。如果己生成, 则执行步骤607;如果未生成,则执行步骤609。步骤607:释放页面缓存Hash表的锁。步骤608:读取页面缓存返回,流程结束。步骤609:锁定该检索条件的页面缓存记录。步骤610:释放页面缓存Hash表的锁。步骤611:生成xml,并缓存。步骤612:锁住页面缓存Hash表。步骤613:释放该检索条件的页面缓存记录的锁,并记录已生成页 面缓存。步骤614:释放页面缓存Hash表的锁。步骤615:唤醒其它处于休息状态的线程,返回xml,流程结束。 采用上述流程来获取和生成页面缓存,不但能够防止出现读取脏 数据及重复生成页面缓存的问题,而且因为采用了记录级的锁,因此 在生成某一检索条件的xml时,仍可以处理其它检索条件的页面缓存 请求,提高了系统的并发处理能力,加快了响应速度。另外,需要实时或定时刷新内存数据缓存。对于数据相对比较固 定,更新较少的情况,可以采取实时刷新的策略,需要在程序变更相 关数据的时候执行刷新操作,清空或更新缓存的数据和页面;而对于 数据更新相对频繁的系统来说,如果仍然采取实时刷新的策略,不但 无法很好的缓存数据和页面,而且会增加系统的开销,所以需要采用 定时刷新的方式,需要设置一个定时任务,定时将内存数据缓存和页 面缓存清空。如果采用定时刷新的策略,可通过配置来设置内存数据缓存定时 刷新的时间间隔。系统管理员在系统管理和维护中,可根据系统的性 能和数据变化情况进行调整,以达到最佳的用户体验。
权利要求
1、一种大数据量分类检索网页的响应方法,包括以下步骤A、当系统启动时,将需要供用户分类检索的数据从数据库中查询出来,并缓存于内存中;B、当用户请求某种检索条件的网页时,首先在页面缓存中查找是否存在有效的页面缓存;如果存在,则将页面缓存直接作为结果返回;如果不存在,则根据检索条件,在内存数据缓存中查找出所需结果,生成相应的页面,将其缓存为页面缓存后作为结果返回;C、对内存中的数据刷新,同时在内存数据刷新后,作废之前缓存的页面缓存。
2、 权利要求1所述的大数据量分类检索网页的响应方法,其特征 在于,根据分类检索的类型,对内存中缓存的数据建立索引。
3、 权利要求2所述的大数据量分类检索网页的响应方法,其特征 在于,建立分类索引的方法为-a、 循环遍历加载于内存中的缓存数据记录,读取某一记录;得到 某一分类对应字段的值;b、 从该分类的索引表中找到该分类值的索引列表;c、 在该索引列表中插入该记录的编号,即为该记录建立了这一分 类的索引。
4、 权利要求2或3所述的大数据量分类检索网页的响应方法,其 特征在于,在生成内存数据缓存和建立索引时,将内存数据缓存和索 弓I锁住,只允许一个线程执行加载内存数据缓存和建立索引的操作, 不允许其它线程同时读写缓存。
5、 权利要求1所述的大数据量分类检索网页的响应方法,其特征 在于,页面缓存采用xml的形式。
6、 权利要求1或5所述的大数据量分类检索网页的响应方法,其 特征在于,页面缓存于内存或磁盘中。
7、 权利要求6所述的大数据量分类检索网页的响应方法,其特征 在于,在生成页面缓存时将页面缓存记录锁住,只允许一个线程生成 某一检索条件的页面缓存,不允许其它线程读写该检索条件的页面缓存。
8、 权利要求6所述的大数据量分类检索网页的响应方法,其特征 在于,在内存中建立一张哈希表,以存储某个检索条件的页面缓存是 否存在或其内容;哈希表中的健值保存了各种检索条件,哈希表中的 值保存了对应检索条件的页面缓存是否已生成或其内容。
9、 权利要求1所述的大数据量分类检索网页的响应方法,其特征 在于,内存数据的刷新方式为实时刷新或定时刷新。
全文摘要
一种大数据量分类检索网页的响应方法,当系统启动时,将需要供用户分类检索的数据从数据库中查询出来,并缓存于内存中;当用户请求某种检索条件的网页时,首先在页面缓存中查找是否存在有效的页面缓存;如果存在,则将页面缓存直接作为结果返回;如果不存在,则根据检索条件,在内存数据缓存中查找出所需结果,生成相应的页面,将其缓存为页面缓存后作为结果返回;对内存中的数据刷新,同时在内存数据刷新后,作废之前缓存的页面缓存。本发明减轻了数据库的负载,也加快了数据查询的速度,提高了系统的性能,提高了页面响应速度。
文档编号G06F17/30GK101154230SQ200610163469
公开日2008年4月2日 申请日期2006年12月2日 优先权日2006年9月30日
发明者蔚 王 申请人:中兴通讯股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1