查询数据的方法及装置制造方法及图纸

技术编号:10420893 阅读:73 留言:0更新日期:2014-09-12 11:47
本申请公开了查询数据的方法及装置,其中,所述方法包括:拦截当前查询请求;判断是否存在与该当前查询请求相同的历史查询请求正在执行查询数据库的操作;如果是,则阻塞所述当前查询请求;待所述历史查询请求执行完成后,利用其查询结果向所述当前查询请求返回查询结果。在实现过程中,本申请实施例不会出现在一次查询数据库操作正在执行的过程中,又有相同的查询请求重复提交到数据库的情况,有效减轻了数据库的访问负担,并提高了查询效率。

【技术实现步骤摘要】
查询数据的方法及装置
本申请涉及数据查询
,特别是涉及查询数据的方法及装置。
技术介绍
在高并发环境下,很容易发生以下情况:在同一时间段内,大量用户对数据库系统的并发查询导致数据库压力增大,响应缓慢,进而影响整个系统的正常运转。但在实践中发现,在大量的查询请求中有很多都是同样的。例如,用户点击网站首页,如果首页上面需要展示的部分或全部数据来自于数据库,则大部分内容对于用户来说是完全一样的,对于后台服务器而言,需要执行的数据库查询操作也是一样的。基于该特点,为了提高数据查询的效果,现有技术中一般会采用缓存来应对,也即,如果客户端提交的两个查询是完全一样的,则服务器端会缓存前一个查询结果,并直接将缓存的查询结果返回给下一个相同的查询,从而减少对数据库的访问。由于内存比数据库的读写效率要高,所以对于发起同样请求的客户端来说,响应时间会大大缩短。然而,现有技术中虽然使用了缓存方案,但是,在缓存尚未建立的时间段内,所有的查询请求都会无差别地提交到数据库里。如果查询时间较长,那么这段时间内产生的并发请求也足以使数据库性能骤降,因此,仍然会经常发生数据库负担过重的问题。
技术实现思路
本申请提供了查询数据的方法及装置,能够避免对数据库造成不必要的负担,有利于提高查询效率。本申请提供了如下方案:一种查询数据的方法,包括:拦截当前查询请求;判断是否存在与该当前查询请求相同的历史查询请求正在执行查询数据库的操作;如果是,则阻塞所述当前查询请求;待所述历史查询请求执行完成后,利用其查询结果向所述当前查询请求返回查询结果。一种查询数据的装置,包括:请求拦截单元,用于拦截当前查询请求;判断单元,用于判断是否存在与该当前查询请求相同的历史查询请求正在执行查询数据库的操作;请求阻塞单元,用于如果判断单元的判断结果为是,则阻塞所述当前查询请求;查询结果返回单元,用于待所述历史查询请求执行完成后,利用其查询结果向所述当前查询请求返回查询结果。根据本申请提供的具体实施例,本申请公开了以下技术效果:通过本申请,在拦截到一个数据库查询请求之后,可以首先判断是否存在相同的查询请求正在执行查询数据库的操作,如果存在,则可以将该当前查询请求阻塞,不再将其提交到数据库进行查询,等到正在执行查询数据库操作的查询请求获得查询结果之后,再利用该查询结果向当前查询请求返回查询结果。因此,在实现过程中,不会出现在一次查询数据库操作正在执行的过程中,又有相同的查询请求重复提交到数据库的情况,因此,减轻了数据库的访问负担,有利于提高查询效率。当然,实施本申请的任一产品并不一定需要同时达到以上所述的所有优点。【附图说明】为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。图1是本申请实施例提供的方法的流程图;图2是本申请实施例提供的另一方法的流程图;图3是本申请实施例提供的装置的示意图。【具体实施方式】下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员所获得的所有其他实施例,都属于本申请保护的范围。本申请专利技术人在实现本申请的过程中发现,现有技术的缓存方案中,之所以仍然会产生数据库负载过重,查询效果不高的问题,一方面原因是,现有技术中往往存在以下情况:如果数据库查询请求A在执行时,发现缓存中没有对应的查询结果,则它会立即被数据库执行,也即进行查询数据库的操作,得到查询结果;但是,如果执行过程中有新的查询Al被提交,不论Al请求的内容与A请求的内容是否相同,Al同样也会立即得到执行,这样就造成在A与Al请求相同时,两个请求都会被执行,并且直到A查询完成并缓存结果,后续的新请求才能利用缓存内容。也就是说,必须等到至少有一个查询返回查询结果并存入缓存中,才能使后续的查询能够利用缓存提升性能;而如果在第一个查询结果返回前,又同时发生了其他同样的查询,由于无缓存可用,所有的查询都会从头开始执行,而实际上查询的内容却是一样的,这显然增加了数据库系统的负担。为此,本申请实施例提供了一种查询数据的方法,参见图1,该方法可以包括以下步骤:SlOl:拦截当前查询请求;在本申请实施例中,可以在服务器端对查询请求进行拦截操作,也即,当接收到一个数据库查询请求之后,不是直接将其提交到数据库进行查询,而是首先进行一些判断处理操作,之后再确定是否需要提交到数据库进行查询。S102:判断是否存在与该当前查询请求相同的历史查询请求正在执行查询数据库的操作;具体在进行判断操作时,可以首先判断缓存中是否已经存在与该查询请求相关的查询结果,如果存在,则直接从缓存中取出查询结果返回即可。如果缓存中还没有查询结果,本申请实施例不是直接将查询请求提交到数据库进行查询操作,而是进一步判断一下是否存在与该当前查询请求相同的历史查询请求正在执行查询数据库的操作,如果存在,则不再将该请求提交到数据库进行查询,直接等待当前正在执行的查询请求的查询结果即可,这样可以减少对数据库的访问,减轻数据库的负担。具体地,为了在拦截到一个查询请求时,判断出是否存在与该当前查询请求相同的历史查询请求正在执行查询数据库的操作,本申请实施例可以在缓存中保存正在执行的查询请求的信息,例如校验信息,该校验信息可以是对应查询语句的签名信息(例如,MD5值等等),这样在接收到新的查询请求之后,就可以首先计算当前查询请求的查询语句的签名信息,得到当前查询请求的校验信息,并判断缓存中是否存在与当前查询请求的校验信息匹配的内容,如果存在,则确定存在与该当前查询请求相同的历史查询请求正在执行。也就是说,在拦截到一个查询请求之后,可以首先根据该查询请求的查询语句做MD5签名,算出信息摘要(diges t)字符串,然后判断缓存中是否存在与该diges t字符串匹配的内容,如果不存在,则证明没有相同的查询请求正在执行,进而,就可以将该查询请求对应的digest字符串保存在缓存中,例如,JAVA里面具体可以利用并发哈希表(ConcurrentHashMap)来保存diges t与查询语句的映射,这样就可以将该查询请求提交到数据库执行查询操作。在后续如果再有相同的查询请求被拦截到时,就可以利用计算出新的查询请求的digest字符串,然后通过与缓存中保存的内容进行比较,就可以判断出存在相同的查询请求正在执行数据库查询操作。需要说明的是,对于各个相同的查询请求而言,只需要在第一个查询请求被提交到数据库进行查询操作时,向缓存中写入查询请求的校验信息,后续的查询请求再被拦截到时,如果缓存中存在与其校验信息相同的内容,则不需要再重新写入缓存,也不需要执行数据库查询操作。另外需要说明的是,查询请求的查询语句一般是某种具有特定规则组合的文本,也有少数是二进制数据。因此,可以基于整个查询语句做MD5签名,算出digest字符串。根据MD5的原理,可以保证在查询语句相同的情况下,得到的digest字符串是相同的,因此,如果发现两个查本文档来自技高网...
查询数据的方法及装置

【技术保护点】
一种查询数据的方法,其特征在于,包括:拦截当前查询请求;判断是否存在与该当前查询请求相同的历史查询请求正在执行查询数据库的操作;如果是,则阻塞所述当前查询请求;待所述历史查询请求执行完成后,利用其查询结果向所述当前查询请求返回查询结果。

【技术特征摘要】
1.一种查询数据的方法,其特征在于,包括: 拦截当前查询请求; 判断是否存在与该当前查询请求相同的历史查询请求正在执行查询数据库的操作; 如果是,则阻塞所述当前查询请求; 待所述历史查询请求执行完成后,利用其查询结果向所述当前查询请求返回查询结果O2.根据权利要求1所述的方法,其特征在于,还包括: 如果不存在与该当前查询请求相同的历史查询请求正在执行查询数据库的操作,则将当前查询请求提交到数据库执行查询操作。3.根据权利要求1所述的方法,其特征在于,还包括: 在缓存中保存正在执行的查询请求的校验信息,所述校验信息为对应查询语句的签名信息; 所述判断是否存在与该当前查询请求相同的历史查询请求正在执行查询数据库的操作包括: 计算当前查询请求的查询语句的签名信息,得到当前查询请求的校验信息; 判断缓存中是否存在与当前查询请求的校验信息匹配的内容,如果存在,则确定存在与该当前查询请求相同的历史查询请求正在执行查询数据库的操作。4.根据权利要求3所述的方法,其特征在于,还包括: 当正在执行查询数据库操作的查询请求获取到查询结果之后,以所述校验信息作为键值,在缓存中保存查询结果; 通知具有相同校验信息的查询请求发起方到缓存中提取相应的查询结果。5.根据权利要求3或4所述的方法,其特征在于,还包括: 在查询缓存过程中,保持各个查询请求之间的原子性。6.根据权利要求5所述的方法,其特征在于,所述在查询缓存过程中,保持各个查询请求之间的原子性包括: 拦截到所述当前查询请求后,尝试锁定指定的计数器对象; 如果锁定成功,则查询缓存中是否存在与拦截到的查询请求的校验信息匹配的内容;如果存在,则确定存在与该当前查...

【专利技术属性】
技术研发人员:周剑周宇
申请(专利权)人:阿里巴巴集团控股有限公司
类型:发明
国别省市:开曼群岛;KY

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1