数据查询处理方法及装置与流程

文档序号:11177158阅读:671来源:国知局
数据查询处理方法及装置与流程

本发明涉及数据处理技术,具体而言,涉及一种数据查询处理方法及装置。



背景技术:

随着互联网的迅猛发展,越来越多的互联网服务器面临高并发、海量访问查询的问题。为了解决这种问题,目前主要有两种解决方法,一种是采用分布式存储的硬件式解决方案;另一种是采用多线程操作的软件式解决方案。但分布式存储将会带来存储成本的增加;而多线程操作在数据查询过程中,常会出现数据反馈混乱甚至丢失的情况。



技术实现要素:

有鉴于此,本发明提供一种数据查询处理方法及装置,能够提高数据查询处理效率。

本发明的其他特性和优点将通过下面的详细描述变得显然,或部分地通过本发明的实践而习得。

根据本发明的一方面,提供了一种数据查询处理方法,包括:接收客户端发送的数据查询请求;为各数据查询请求分配一个空闲的数据查询线程;利用多线程操作,由各数据查询线程判断一缓存中是否存储有其对应的数据查询请求所请求查询的数据;当所述数据查询线程判断所述缓存中没有存储其对应的数据查询请求所请求查询的数据时,为所述各数据查询请求在一数据库中进行数据查询;将所述数据库返回的数据查询结果写入所述缓存中;通知所有数据查询线程,以使各数据查询线程读取所述缓存;以及当各数据查询线程从所述缓存中读取到其对应的数据查询请求所请求查询的数据时,将读取到的所述数据返回给发送所述数据查询请求的客户端。

根据本发明的一实施方式,该方法还包括:当所述数据查询线程判断所述缓存中没有存储其对应的数据查询请求所请求查询的数据时,所述数据查询线程进入等待状态。

根据本发明的一实施方式,该方法还包括:当所述数据查询线程判断所述缓存中有存储其对应的数据查询请求所请求查询的数据时,从所述缓存中读取所述数据,并将读取到的所述数据返回给发送所述数据查询请求的客户端。

根据本发明的一实施方式,在为所述数据查询请求在一数据库中进行数据查询之前,该方法还包括:将所述数据查询请求加入到一查询队列中;将从所述查询队列中取出的数据查询请求合并为一数据库查询请求;以及根据所述数据库查询请求,为所述各数据查询请求在一数据库中进行数据查询。

根据本发明的一实施方式,将从所述查询队列中取出的数据查询请求合并为一数据库查询请求包括:当所述查询队列中的数据查询请求数量达到一预设阈值时,将所述数据查询请求从所述查询队列中取出并放置于一取数队列中;将所述取数队列中的数据查询请求合并为一数据库查询请求。

根据本发明的一实施方式,将从所述查询队列中取出的数据查询请求合并为一数据库查询请求还包括:利用一取数线程,将所述取数队列中的数据查询请求合并为所述数据库查询请求。

根据本发明的一实施方式,所述数据库查询请求为基于sql的查询请求。

根据本发明的另一方面,提供了一种数据查询处理装置,包括:请求接收模块,用于接收客户端发送的数据查询请求;线程分配模块,用于为各数据查询请求分配一个空闲的数据查询线程;缓存判断模块,用于利用多线程操作,由各数据查询线程判断一缓存中是否存储有其对应的数据查询请求所请求查询的数据;数据库查询模块,用于当所述数据查询线程判断所述缓存中没有存储其对应的数据查询请求所请求查询的数据时,为所述各数据查询请求在一数据库中进行数据查询;缓存写入模块,用于将所述数据库返回的数据查询结果写入所述缓存中;线程通 知模块,用于通知所有数据查询线程,以使各数据查询线程读取所述缓存;以及请求响应模块,用于当各数据查询线程从所述缓存中读取到其对应的数据查询请求所请求查询的数据时,将读取到的所述数据返回给发送所述数据查询请求的客户端。

根据本发明的一实施方式,所述缓存判断模块还用于当所述数据查询线程判断所述缓存中没有存储其对应的数据查询请求所请求查询的数据时,通知所述数据查询线程进入等待状态。

根据本发明的一实施方式,所述请求响应模块还用于当所述数据查询线程判断所述缓存中有存储其对应的数据查询请求所请求查询的数据时,从所述缓存中读取所述数据,并将读取到的所述数据返回给发送所述数据查询请求的客户端。

根据本发明的一实施方式,该装置还包括:队列加入模块和查询生成模块;其中所述队列加入模块用于在所述数据库查询模块为所述各数据查询请求在一数据库中进行数据查询;所述查询生成模块用于将从所述查询队列中取出的数据查询请求合并为一数据库查询请求;所述数据库查询模块还用于根据所述数据库查询请求,为所述各数据查询请求在一数据库中进行数据查询。

根据本发明的一实施方式,所述查询生成模块包括:请求数量判断子模块,用于判断所述查询队列中的数据查询请求数量是否达到一预设阈值;查询请求取出子模块,用于当所述请求数量判断子模块判断所述查询队列中的数据查询请求数量达到所述预设阈值时,将所述数据查询请求从所述查询队列中取出并放置于一取数队列中;以及查询请求生成子模块,用于将所述取数队列中的数据查询请求合并为一数据库查询请求。

根据本发明的一实施方式,所述查询请求生成子模块还用于利用一取数线程,将所述取数队列中的数据查询请求合并为所述数据库查询请求。

根据本发明的一实施方式,所述数据库查询请求为基于sql的查询请求。

根据本发明的数据查询处理方法,在采用多线程的基础上,利用缓 存作为存储中介,将从数据库返回的数据查询结果存储于缓存中,并通知所有线程来读取缓存,确定是否有其待查询的数据。这样的方法可以避免相关技术中多线程反馈无法直接对应到相应客户端的混乱问题,同时又充分地发挥了多线程并行操作的高效率。此外,因为缓存中存储数据查询结果也是一种自我学习,可以减少相同查询需求的重复查询操作,进一步提高了查询效率。

应当理解的是,以上的一般描述和后文的细节描述仅是示例性的,并不能限制本发明。

附图说明

通过参照附图详细描述其示例实施例,本发明的上述和其它目标、特征及优点将变得更加显而易见。

图1是根据一示例性实施方式示出的一种数据查询处理方法的流程图。

图2是根据一示例性实施方式示出的另一种数据查询处理方法的流程图。

图3是根据一示例性实施方式示出的一种数据查询处理装置的框图。

图4是根据一示例性实施方式示出的另一种数据查询处理装置的框图。

图5是根据一示例性实施方式示出的再一种数据查询处理装置的框图。

具体实施方式

现在将参考附图更全面地描述示例实施方式。然而,示例实施方式能够以多种形式实施,且不应被理解为限于在此阐述的范例;相反,提供这些实施方式使得本发明将更加全面和完整,并将示例实施方式的构思全面地传达给本领域的技术人员。附图仅为本发明的示意性图解,并非一定是按比例绘制。图中相同的附图标记表示相同或类似的部分,因而将省略对它们的重复描述。

此外,所描述的特征、结构或特性可以以任何合适的方式结合在一个或更多实施方式中。在下面的描述中,提供许多具体细节从而给出对本发明的实施方式的充分理解。然而,本领域技术人员将意识到,可以实践本发明的技术方案而省略所述特定细节中的一个或更多,或者可以采用其它的方法、组元、装置、步骤等。在其它情况下,不详细示出或描述公知结构、方法、装置、实现或者操作以避免喧宾夺主而使得本发明的各方面变得模糊。

图1是根据一示例性实施方式示出的一种数据查询处理方法的流程图。该方法可以由服务器来实施,如图1所示,数据查询处理方法10包括:

在步骤s102中,接收客户端发送的数据查询请求。

例如,服务器接收一个客户端或多个客户端发送的一个或多个数据查询请求。当在某一时刻,数据访问量比较大,服务器接收到多个数据查询请求时,称之为高并发数据请求。

在步骤s104中,为各数据查询请求分配一个数据查询线程。

每收到一个数据查询请求,则为该数据查询请求分配一个空闲的数据查询线程。当同时收到多个数据查询请求时,则分别为多个数据查询请求分配多个数据查询线程。通过多线程操作,可同时并行处理多个数据查询请求,充分发挥多线程的工作效率,加快数据查询的处理速度。需要说明的是,本领域技术人员应理解,下文中提到的各数据查询线程执行的操作均为并行的操作。

在步骤s106中,利用多线程操作,由各数据查询线程判断一缓存中是否存储有对应的数据查询请求所查询的数据;如果有,则进入步骤s108;否则,进入步骤s110。

该缓存可以设置于服务器中,也可以设置在服务器之外,作为一个独立的物理实体。

在步骤s108中,从该缓存中读取该数据查询请求所请求查询的数据,并将读取到的该数据返回给发送该数据查询请求的客户端。

该缓存中存储有部分地待查询数据,因此如果当该数据查询请求所 请求查询的数据存储于该缓存中,则可以直接从缓存中读取数据,并返回给客户端,从而避免了对数据库的查询操作。未在缓存中取得其对应的查询数据的数据查询线程进入等待状态。

在步骤s110中,为该数据查询请求在数据库中进行数据查询。

在步骤s112中,将该数据库返回的数据查询结果写入缓存中。

之后数据查询结果可以直接存储于缓存中,从而使得待下次查询时,如果有相同的查询需求,则可以直接从缓存中读取数据并返回给客户端。

在步骤s114中,通知所有数据查询线程,以使各数据查询线程读取缓存。

例如可以使用java语言中的notifyall()函数通知所有数据查询线程。

在步骤s116中,当各数据查询线程从缓存中读取到其对应的数据查询请求所述请求查询的数据时,将读取到的数据返回给发送该数据查询请求的客户端。

本发明的数据查询处理方法10在采用多线程的基础上,利用缓存作为存储中介,将从数据库返回的数据查询结果存储于缓存中,并通知所有线程来读取缓存,确定是否有其待查询的数据。这样的方法可以避免相关技术中多线程反馈无法直接对应到相应客户端的混乱问题,同时又充分地发挥了多线程并行操作的高效率。此外,因为缓存中存储数据查询结果也是一种自我学习,可以减少相同查询需求的重复查询操作,进一步提高了查询效率。

应清楚地理解,本公开描述了如何形成和使用特定示例,但本公开的原理不限于这些示例的任何细节。相反,基于本公开公开的内容的教导,这些原理能够应用于许多其它实施方式。

图2是根据一示例性实施方式示出的另一种数据查询处理方法的流程图。该方法可以由服务器来实施,如图2所示,数据查询处理方法20包括:

在步骤s202中,接收客户端发送的数据查询请求。

例如,服务器接收一个客户端或多个客户端发送的一个或多个数据 查询请求。当在某一时刻,数据访问量比较大,服务器接收到多个数据查询请求时,称之为高并发数据请求。

在步骤s204中,为各数据查询请求分配一个空闲的数据查询线程。

每收到一个数据查询请求,则为该数据查询请求分配一个空闲的数据查询线程。当同时收到多个数据查询请求时,则分别为多个数据查询请求分配多个数据查询线程。通过多线程操作,可同时并行处理多个数据查询请求,充分发挥多线程的工作效率,加快数据查询的处理速度。需要说明的是,本领域技术人员应理解,下文中提到的各数据查询线程执行的操作均为并行的操作。

在步骤s206中,利用多线程操作,由各数据查询线程判断一缓存中是否存储有对应的数据查询请求所查询的数据;如果有,则进入步骤s208;否则,进入步骤s210。

该缓存可以设置于服务器中,也可以设置在服务器之外,作为一个独立的物理实体。

在步骤s208中,从该缓存中读取该数据查询请求所请求查询的数据,并将读取到的该数据返回给发送该数据查询请求的客户端。

该缓存中存储有部分地待查询数据,因此如果当该数据查询请求所请求查询的数据存储于该缓存中,则可以直接从缓存中读取数据,并返回给客户端,从而避免了对数据库的查询操作。

在步骤s210中,将该数据查询请求加入到一查询队列中。

该查询队列例如可以采用消息队列(messagequeue,mq)。为了便于扩展,该查询队列也可以为分布式mq。

当没有从缓存中读取到数据查询请求所述请求查询的数据时,则由数据查询线程将该数据查询请求加入到查询队列中,同时各数据查询请求进入等待状态。

在步骤s212中,将从所述查询队列中取出的数据查询请求合并为一数据库查询请求。

为了避免对数据库的反复操作,可以将多个数据库查询请求合并为一个数据库查询请求,从而通过一次数据库查询操作获得多个数据查询请求的结果。

例如,可以判断查询队列中的数据查询请求的数量,当该数量达到一预设阈值时,则将其中的数据查询请求取出,并放置于一取数队列中。该预设阈值在实际应用时,可以根据实际需求进行设置,本发明不以此为限。之后,将取数队列中的数据查询请求合并为该数据库查询请求。例如可以利用一单独的取数进程来进行上述合并数据库查询请求的操作。取数队列也可以实施为mq。

或者,也可以基于定时器,定时地从该查询队列中取出其中的数据查询请求,并放置于取数队列中,从而使取数队列将取数队列中的数据查询请求合并为该数据库查询请求。

该数据查询请求例如可以为基于sql(structuredquerylanguage,结构化查询语言)的查询请求。

在步骤s214中,根据该数据库查询请求,在一数据库中进行数据查询。

该数据库例如为sql数据库。基于该数据库查询请求,服务器向该数据库请求数据查询操作。

在步骤s216中,将该数据库返回的数据查询结果写入缓存中。

之后数据查询结果可以直接存储于缓存中,从而使得待下次查询时,如果有相同的查询需求,则可以直接从缓存中读取数据并返回给客户端。

由上述说明可知,本发明的数据查询处理方法在处理数据查询请求时,采用多线程操作,充分发挥了多线程的高效性;而在向数据库进行数据查询操作及返回查询结果时,是基于单线程进行的,从而可以有效避免在该过程中采用多线程反馈所引起的混乱问题。

在步骤s218中,通知所有数据查询线程,以使各数据查询线程读取缓存。

例如可以使用java语言中的notifyall()函数通知所有数据查询线程。

在将数据查询结果返回到缓存后,重新唤醒所有数据查询线程,继续利用多线程操作的特性,提高数据处理效率。

在步骤s220中,当各数据查询线程从缓存中读取到其对应的数据查 询请求所述请求查询的数据时,将读取到的数据返回给发送该数据查询请求的客户端。

进一步地,因在步骤s218中通知了所有数据查询线程进行读取操作,但有可能其中的部分数据查询线程所对应的数据查询请求还未被合并为数据库查询请求,因此该数据查询线程将读取不到待查询的数据,此时该数据查询线程则继续等待下次被通知进行读取操作。

本发明的数据查询处理方法20在采用多线程的基础上,利用缓存作为存储中介,将从数据库返回的数据查询结果存储于缓存中,并通知所有线程来读取缓存,确定是否有其待查询的数据。这样的方法可以避免相关技术中多线程反馈无法直接对应到相应客户端的混乱问题,同时又充分地发挥了多线程并行操作的高效率。此外,因为缓存中存储数据查询结果也是一种自我学习,可以减少相同查询需求的重复查询操作,进一步提高了查询效率。

本领域技术人员可以理解实现上述实施方式的全部或部分步骤被实现为由cpu执行的计算机程序。在该计算机程序被cpu执行时,执行本发明提供的上述方法所限定的上述功能。所述的程序可以存储于一种计算机可读存储介质中,该存储介质可以是只读存储器,磁盘或光盘等。

此外,需要注意的是,上述附图仅是根据本发明示例性实施方式的方法所包括的处理的示意性说明,而不是限制目的。易于理解,上述附图所示的处理并不表明或限制这些处理的时间顺序。另外,也易于理解,这些处理可以是例如在多个模块中同步或异步执行的。

下述为本发明装置实施例,可以用于执行本发明方法实施例。对于本发明装置实施例中未披露的细节,请参照本发明方法实施例。

图3是根据一示例性实施方式示出的一种数据查询处理装置的框图。该数据查询处理装置可应用于服务器中。如图3所示,数据查询处理装置30包括:请求接收模块302、线程分配模块304、缓存判断模块306、数据库查询模块308、缓存写入模块310、线程通知模块312及请求响应模块314。

其中,请求接收模块302用于接收客户端发送的数据查询请求。

线程分配模块304用于为各数据查询请求分配一个数据查询线程。

缓存判断模块306用于利用多线程操作,由各数据查询线程判断一缓存中是否存储有其对应的数据查询请求所请求查询的数据。

数据库查询模块308用于当所述数据查询线程判断所述缓存中没有存储其对应的数据查询请求所请求查询的数据时,为所述各数据查询请求在一数据库中进行数据查询;

缓存写入模块310用于将所述数据库返回的数据查询结果写入所述缓存中.

线程通知模块312用于通知所有数据查询线程,以使各数据查询线程读取所述缓存。

请求响应模块314用于当各数据查询线程从所述缓存中读取到其对应的数据查询请求所请求查询的数据时,将读取到的所述数据返回给发送所述数据查询请求的客户端。未在缓存中取得其对应的查询数据的数据查询线程进入等待状态。

图4是根据一示例性实施方式示出的另一种数据查询处理装置的框图。该数据查询处理装置可应用于服务器中。如图4所示,数据查询处理装置40包括:请求接收模块402、线程分配模块404、缓存判断模块406、数据库查询模块408、队列加入模块410、查询生成模块412、缓存写入模块414、线程通知模块416及请求响应模块418。

请求接收模块402用于接收客户端发送的数据查询请求;

线程分配模块404用于为各数据查询请求分配一个空闲的数据查询线程;

缓存判断模块406用于利用多线程操作,由各数据查询线程判断一缓存中是否存储有其对应的数据查询请求所请求查询的数据;

队列加入模块410用于当数据查询线程判断缓存中没有存储其对应的数据查询请求所请求查询的数据时,将该数据查询请求加入到一查询队列中;

查询生成模块412用于将从该查询队列中取出的数据查询请求合并为一数据库查询请求;

数据库查询模块408用于根据该数据库查询请求,在一数据库中进 行数据查询;

缓存写入模块414用于将该数据库返回的数据查询结果写入该缓存中;

线程通知模块416用于通知所有数据查询线程,以使各数据查询线程读取缓存;以及

请求响应模块418用于当各数据查询线程从缓存中读取到其对应的数据查询请求所请求查询的数据时,将读取到的数据返回给发送数据查询请求的客户端。

在一些实施例中,请求响应模块418还用于当数据查询线程判断该缓存中有存储其对应的数据查询请求所请求查询的数据时,从该缓存中读取数据,并将读取到的数据返回给发送数据查询请求的客户端。

图5是根据一示例性实施方式示出的再一种数据查询处理装置的框图。与图4所示的数据查询处理装置40不同的是,图5所示的数据查询处理装置50中的查询生成模块512包括:请求数量判断子模块5122、查询请求取出子模块5124及查询请求生成子模块5126。

请求数量判断子模块5122用于判断查询队列中的数据查询请求数量是否达到一预设阈值;

查询请求取出子模块5124用于当请求数量判断子模块5122判断查询队列中的数据查询请求数量达到该预设阈值时,将数据查询请求从查询队列中取出并放置于一取数队列中;以及

查询请求生成子模块5126用于将取数队列中的数据查询请求合并为一数据库查询请求。

在一些实施例中,查询请求生成子模块5126还用于利用一取数线程,将取数队列中的数据查询请求合并为数据库查询请求。

在一些实施例中,数据库查询请求为基于sql的查询请求。

需要注意的是,上述附图中所示的框图是功能实体,不一定必须与物理或逻辑上独立的实体相对应。可以采用软件形式来实现这些功能实体,或在一个或多个硬件模块或集成电路中实现这些功能实体,或在不同网络和/或处理器装置和/或微控制器装置中实现这些功能实体。

通过以上的实施方式的描述,本领域的技术人员易于理解,这里描述的示例实施方式可以通过软件实现,也可以通过软件结合必要的硬件的方式来实现。因此,根据本发明实施方式的技术方案可以以软件产品的形式体现出来,该软件产品可以存储在一个非易失性存储介质(可以是cd-rom,u盘,移动硬盘等)中或网络上,包括若干指令以使得一台计算设备(可以是个人计算机、服务器、移动终端、或者网络设备等)执行根据本发明实施方式的方法。

以上具体地示出和描述了本发明的示例性实施方式。应可理解的是,本发明不限于这里描述的详细结构、设置方式或实现方法;相反,本发明意图涵盖包含在所附权利要求的精神和范围内的各种修改和等效设置。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1