一种分布式的大数据分类检索网页的响应方法
【专利摘要】本发明公开了一种分布式的大数据分类检索网页的响应方法,属于Web访问【技术领域】,包括以下步骤:S1:启动分布式服务器,根据Hash?Code将页面按关键字分类,将从数据库中检索出的数据缓存在各服务器中;S2:当用户请求到达时,先检查其检索条件,将用户请求的关键字根据Hash?Code来选择匹配的服务器;S3:刷新内存中的数据,并作废之前缓存的页面。本发明的有益效果如下:能够有效的提高大数据的分类检索页面响应速度,减轻数据库压力,减少服务器负担。
【专利说明】一种分布式的大数据分类检索网页的响应方法
【技术领域】
[0001]本发明属于Web访问【技术领域】,具体涉及一种分布式的大数据分类检索网页的响应方法。
【背景技术】
[0002]随着云技术和互联网络的蓬勃发展,人们越来越愿意使用网络来处理日常事务,社会生活各方面的数据信息越来越集中,同时,数据量也大量增长,因此许多系统和平台都将面临海量数据。这对Web应用提出了更高的要求。在Web应用中,大都需要把大量数据进行分布式存储,从而提高数据的检索速度,快速地响应用户的需求,给用户带来更好的体验。
[0003]然而,对于这些大数据如果只是简单的分布式处理,由于分布的服务器众多数据的分散也将导致检索准确率下降,从而降低了响应速度,这将给用户带来非常不好的体验。如果大量用户同时在线检索数据,会给服务器带来更大的压力。因此,在分布式技术的基础上,将数据进行分类缓存,快速检索,从而达到快速响应。
[0004]现有技术存在问题归纳如下:
[0005]第一,基于服务器端的动态页面缓存,并没有利用分布式分类检索的特点,读数据进行分布式缓存。
[0006]第二,一般只能对静态页面进行部分缓存,不能处理分布式的数据存储动态页面检索。
[0007]第三,基于一台服务器,将页面缓存在服务器端,将所有可能访问的页面进行缓存,大量的占用了服务器的处理时间和存储空间。
【发明内容】
[0008]本发明针对现有技术的不足,提供了一种分布式的大数据分类检索网页的响应方法,能够有效的提高大数据的分类检索页面响应速度,减轻数据库压力,减少服务器负担。
[0009]为解决以上问题,本发明采用的技术方案如下:一种分布式的大数据分类检索网页的响应方法,包括以下步骤:s1:启动分布式服务器,根据Hash Code(JAVA中的编码方式)将页面按关键字分类,将从数据库中检索出的数据缓存在各服务器中;
[0010]S2:当用户请求到达时,先检查其检索条件,将用户请求的关键字根据HashCode来选择匹配的服务器,然后在该服务器的缓存中查找是否存在有效的页面缓存,如果存在,则直接将有效的页面作为结果返回;如果不存在,则查找有效的页面缓存,将查找到的页面作为结果返回,并缓存查找到的页面。
[0011]S3:刷新内存中的数据,并作废之前缓存的页面。
[0012]作为优选:分类检索时,对S2所述的缓存数据建立索引。
[0013]作为优选:S2所述的建立索引的步骤如下:
[0014]S21.循环遍历内存中的所有缓存数据,读取某一数据记录为N,获得其分类字段对应的值,记录为key ;
[0015]S22.从分类索引表indexTable中,找到分类值为对应key的索引列表indexListο
[0016]S23.在该索引列表indexList中插入记录,并编号为N。
[0017]作为优选:生成数据缓存和为数据建立索引的时候,需要将缓存数据和索引数据上锁,一台服务器中只允许一个线程读写内存中的缓存和为数据建立索引。
[0018]作为优选:所述的页面缓存是采用xml的记录形式。
[0019]作为优选:在内存中建立一张Hash表,Hash表用来记录数据是否存在缓存中并指出其缓存内容所存在的位置。
[0020]作为优选:S3所述的内存数据的刷新方式为实时刷新或定时刷新。
[0021]本发明的有益效果如下:将需要检索的数据以xml的形式缓存在内存中,这样数据的检索就不用在数据库里查询,而是在内存中的xml文件中查询。这么做不仅大大减轻了数据库的负担,同时也加快了数据查询的速度,挺高了系统性能。在服务器上将各种查询过的分类检索的结果缓存起来,不用每次检索时都对内存数据进行一次查询,而是直接将返回的结果缓存起来,从而提高了响应速度。
【专利附图】
【附图说明】
[0022]图1是分布式分类检索快速响应的流程图;
[0023]图2是数据在内存中缓存的示意图;
[0024]图3是分类索引表的结构;
[0025]图4是缓存的分类数据建立索引的流程图;
[0026]图5是两种分类组合检索的流程图;
[0027]图6是获得和生广缓存的流程图;
[0028]图7是整个系统的架构图。
【具体实施方式】
[0029]为使本发明的目的、技术方案及优点更加清楚明白,以下参照附图并举实施例,对本发明做进一步详细说明。
[0030]一种分布式的大数据分类检索网页的响应方法,其特征在于,包括以下步骤:S1:启动分布式服务器,根据Hash Code将页面按关键字分类,将从数据库中检索出的数据缓存在各服务器中;
[0031]S2:当用户请求到达时,先检查其检索条件,将用户请求的关键字根据HashCode来选择匹配的服务器,然后在该服务器的缓存中查找是否存在有效的页面缓存,如果存在,则直接将有效的页面作为结果返回;如果不存在,则查找有效的页面缓存,将查找到的页面作为结果返回,并缓存查找到的页面。
[0032]S3:刷新内存中的数据,并作废之前缓存的页面。
[0033]分类检索时,对S2所述的缓存数据建立索引。
[0034]S2所述的建立索引的步骤如下:
[0035]S21.循环遍历内存中的所有缓存数据,读取某一数据记录为N,获得其分类字段对应的值,记录为key ;
[0036]S22.从分类索引表indexTable中,找到分类值为对应key的索引列表indexListο
[0037]S23.在该索引列表indexList中插入记录,并编号为N。
[0038]生成数据缓存和为数据建立索引的时候,需要将缓存数据和索引数据上锁,一台服务器中只允许一个线程读写内存中的缓存和为数据建立索引。
[0039]所述的页面缓存是采用xml的记录形式。
[0040]在内存中建立一张Hash表,Hash表用来记录数据是否存在缓存中并指出其缓存内容所存在的位置。
[0041]S3所述的内存数据的刷新方式为实时刷新或定时刷新。
[0042]具体实施例:
[0043]图1描述了如何利用缓存数据和页面缓存,得到用户请求的分类检索页面的流程,具体实现如下:
[0044]步骤101:用户请求某种分类索引的页面。
[0045]步骤102:根据用户请求分类的关键字计算哈希值,找到该分类所属的服务器。
[0046]步骤103:服务器收到请求后,判断是否存在这种分类检索条件的缓存,如果缓存存在,则直接将缓存作为结果返回,请求结束;如果不存在,则执行步骤104。
[0047]Xml可以缓存在内存中,也可以缓存在磁盘上。这取决于在一定时间内生成的xml文件的数量。如果文件数量不是很多,那么可以直接将文件缓存在内存中,这样可以提高读写速度,更快地响应用户请求;如果文件数量很大的话,再将文件缓存在内存中就会耗费大量的内存,影响系统的性能了,所以这个时候应该将页面文件缓存在磁盘中,但是内存中仍要记录已经生成的页面缓存,方便更快的查找有效的磁盘缓存。
[0048]因此,不管页面文件缓存在内存中,还是磁盘中。内存中都要建立一张Hash表,用来检索用户请求的关键字内容的位置。Hash表中的关键字保存了各种检索条件,Hash表中的value字段保存了对应检索条件的页面缓存时候已经生成或直接保存的页面内容。所以可以直接根据hash值找到内存中的缓存或在磁盘上的缓存页面。
[0049]页面的缓存方式可以通过配置来更改,系统管理员在实际的运行情况下进行调整,以使系统性能达到最佳。
[0050]步骤104:判断用户请求的数据是否加载到内存中,如果已存在内存中,则执行步骤105,如果请求的数据不在内存中,则执行步骤106。
[0051]步骤105:加载内存数据缓存并建立索引。
[0052]从数据库中查询得到需要提供给用户检索的数据,进行缓存。内存数据缓存结构示意图,如图2所示,它示出了数据是如何在内存中存储的。数据已记录为单位存储于列表中,并被编上编号,以方便建立索引。
[0053]图4示出了建立分类索引的一种流程。从步骤401的N为O开始,402若N不小于记录数,结束。步骤403循环遍历加载于内存中的缓存数据记录,读取记录N ;得到分类X对应的字段的值,即分类X的分类值(keyX),如步骤404所示。步骤405,从分类X的索引表(indexTableX)中找到该分类值(keyX)的索引列表(indexListX)。索引表可采用Hash表的形式存储,如图3所示,分类X的索引表的索引表(indexTableX)的存储结构。Hash表中的键值(key)保存了该分类所有可能的分类的值keyXl,keyX2......keyXn ;Hash表中的值
(value)保存了对应分类值的索引列表,索引列表以列表的形式存储,记录了分类X对应字段的值为该分类值的记录编号。这样就可以用Hash算法在分类X的索引表(indexTableX)中,快速的找到分类值(keyXn)的索引列表(indexListX)。然后,如步骤406所示,在该索引列表QndexListXn)中插入记录编号N,这样就为记录N建立了分类X的索引。同样的,步骤407到409建立了分类Y的索引。记录N的索引建立完后,再建立N+1的索引,如步骤410。
[0054]需要注意的是,在生成内存数据缓存和建立索引时,需要将内存数据缓存和索引锁住,只允许一个线程执行加载内存数据缓存和建立索引的操作,不允许其他线程同时读写缓存,否则会出现数据脏读和重复加载等问题。
[0055]步骤106:根据检索条件,利用索引检索内存数据缓存,得到结果集。
[0056]结合图5两种分类组合检索的流程图,描述如何利用索引表,根据keyx和keyY这两种分类检索条件,检索出从第startnum行(从I开始计数)到第endnum行结果集的一种过程。如步骤501所示,先根据分类X检索条件keyX,在分类X索引表indexTableX中,得到索引列表indexListX,该列表中存储了所有分类X所对应字段的值为keyX的记录编号;如步骤502所示,再根据分类Y检索条件keyY,在分类Y索引表indexTableY中,得到索引列表,该列表中存储了所有分类Y对应字段的值为KeyY的记录编号。
[0057]然后,如步骤503-512所示,通过循环得到indexListX和indexListY的交集,即分类X对应字段的值为keyY,分类Y对应字段的值为keyY的记录编号的集合列表。因为检索结果是分页显示的,所以只需要得到该交集中的第startnum行到第endnum行数据,所以,如步骤511所示,在得到了第endnum行数据后就可以结束循环,返回检索结果。在得到满足条件的记录编号后,如步骤510所示,在内存数据缓存表dataTable中,得到该编号的记录,将其插入检索结果列表中。循环结束就可以得到所要的检索结果记录集了。
[0058]如果只需要得到一种分类Z检索的结果集,上述流程可以简化,只需要得到对应索引列表indexListZ的第startnum行到第endnum行数据包含的记录集即可。
[0059]步骤107:根据得到的记录集,生成xml,将xml缓存,并将xml作为结果返回,响应用户请求,流程结束。
[0060]应用xml作为页面缓存的形式,使页面缓存的字节数较小,并且可以直接将缓存作为响应,而无需再进行计算。检索结果的xml的结构主要由data、curPage、redPerPage、redCount和extrainfo结点组成。其中每一个data结点描述了一条记录,其子结点fieldl、field2, field3...fieIdN描述了该记录中每个字段的值;curPage描述当前页号;redPerPage描述每一页的记录数;redCount描述了某一检索在不分页的情况下的记录总数;extralnf0用来描述一些页面展示时需要的扩展信息。
[0061]这种结构的xml,叫完整的描述了检索结果数据,而且有效的减少了用于描述页面展示格式的冗余信息,减少了缓存占用的空间。在xml中定义展示xml的xsl样式表,如下所示:
[0062]< ? xml-stylesheet type =,,text/xsl,,href =,,style, xsl,,>
[0063]将这种结构的xml发送到客户端,浏览器使用xml中第一的xsl样式表来转换xml数据,将检索结果展示给用户,满足用户的需求。
[0064]需要注意的是在生成页面缓存是需要将页面缓存记录锁住,只允许一个线程生成某一检索条件的页面缓存,不允许其他线程读写该检索条件的页面缓存。具体的流程如图6所示。
[0065]步骤601:请求某检索条件的页面缓存。
[0066]步骤602:锁住页面缓存Hash表。
[0067]步骤603:判断该检索条件的页面缓存记录是否被锁住。如果已锁,则执行步骤604 ;如果未锁住,则执行步骤606。
[0068]步骤604:释放页面缓存Hash表的锁。
[0069]步骤605:线程处于休息状态,等待被唤醒。线程被唤醒后,则执行步骤602,继续判断该检索条件的页面缓存记录是否被锁住。
[0070]步骤606:判断该检索条件的页面缓存是否已生成。如果已生成,则执行步骤607 ;如果未生成,则执行步骤609。
[0071]步骤607:释放页面缓存Hash表的所。
[0072]步骤608:读取页面缓存返回,流程结束。
[0073]步骤609:锁定该检索条件的页面缓存记录。
[0074]步骤610:释放页面缓存Hash表的锁。
[0075]步骤611:生成xml,并缓存。
[0076]步骤612:锁住页面缓存Hash表。
[0077]步骤613:释放该检索条件的页面缓存记录的锁,并记录已生成的页面缓存。
[0078]步骤614:释放页面缓存Hash表的锁。
[0079]步骤615:唤醒其他处于休息状态的线程,返回xml,流程结束。
[0080]采用上述流程来获取和生成页面缓存,不但能够防止出现读取脏数据及重复生成页面缓存的问题,而且因为采用了记录级的锁,因此在生成某一检索条件的xml时,仍可以处理其他检索条件的页面缓存请求,提高了系统的并发处理能力,加快了响应速度。
[0081]另外,需要实时或定时刷新内存数据缓存。对于数据相对比较固定,更新较少的情况,可以采取实时刷新的策略,需要在程序变更相关数据的时候执行刷新操作,清空或更新缓存的数据和页面;而对于数据更新相对频繁的系统来说,如果仍然采取实时刷新的策略,不但无法很好的缓存数据和页面,而且会增加系统的开销,所以需要采用定时刷新的方式,需要设置一个定时任务,定时将内存数据缓存和页面缓存清空。
[0082]如果采用定时刷新的策略,可通过配置来设置内存数据缓存定时刷新的时间间隔。系统管理员在系统管理和维护中,可根据系统的性能和数据变化情况进行调整,以达到最佳的用户体验。
[0083]本领域的普通技术人员将会意识到,这里所述的实施例是为了帮助读者理解本发明的实施方法,应被理解为本发明的保护范围并不局限于这样的特别陈述和实施例。本领域的普通技术人员可以根据本发明公开的这些技术启示做出各种不脱离本发明实质的其它各种具体变形和组合,这些变形和组合仍然在本发明的保护范围内。
【权利要求】
1.一种分布式的大数据分类检索网页的响应方法,其特征在于,包括以下步骤: 51:启动分布式服务器,根据Hash Code将页面按关键字分类,将从数据库中检索出的数据缓存在各服务器中; 52:当用户请求到达时,先检查其检索条件,将用户请求的关键字根据HashCode来选择匹配的服务器,然后在该服务器的缓存中查找是否存在有效的页面缓存,如果存在,则直接将有效的页面作为结果返回;如果不存在,则查找有效的页面缓存,将查找到的页面作为结果返回,并缓存查找到的页面。 53:刷新内存中的数据,并作废之前缓存的页面。
2.根据权利要求1所述的方法,其特征在于,分类检索时,对S2所述的缓存数据建立索引。
3.根据权利要求2所述的方法,其特征在于,S2所述的建立索引的步骤如下: 521.循环遍历内存中的所有缓存数据,读取某一数据记录为N,获得其分类字段对应的值,记录为key ; 522.从分类索引表indexTable中,找到分类值为对应key的索引列表indexList。 523.在该索引列表indexList中插入记录,并编号为N。
4.根据权利要求3所述的方法,其特征在于,生成数据缓存和为数据建立索引的时候,需要将缓存数据和索引数据上锁,一台服务器中只允许一个线程读写内存中的缓存和为数据建立索引。
5.根据权利要求4所述的方法,其特征在于,所述的页面缓存是采用xml的记录形式。
6.根据权利要求2-4任一项所述的方法,其特征在于,在内存中建立一张Hash表,Hash表用来记录数据是否存在缓存中并指出其缓存内容所存在的位置。
7.根据权利要求1所述的方法,其特征在于,S3所述的内存数据的刷新方式为实时刷新或定时刷新。
【文档编号】G06F17/30GK104077397SQ201410310820
【公开日】2014年10月1日 申请日期:2014年7月1日 优先权日:2014年7月1日
【发明者】唐雪飞, 张小盼, 楚龙辉, 王淋铱 申请人:成都康赛信息技术有限公司