CN109471872A - 处理高并发查询请求的方法及装置 - Google Patents
处理高并发查询请求的方法及装置 Download PDFInfo
- Publication number
- CN109471872A CN109471872A CN201710763330.XA CN201710763330A CN109471872A CN 109471872 A CN109471872 A CN 109471872A CN 201710763330 A CN201710763330 A CN 201710763330A CN 109471872 A CN109471872 A CN 109471872A
- Authority
- CN
- China
- Prior art keywords
- request
- inquiry
- query
- initial query
- query result
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开了处理高并发查询请求的方法及装置,涉及数据处理技术领域,提高了查询数据的工作效率,本发明的主要技术方案为:接收多个并发查询请求,所述并发查询请求中包括初始查询请求以及与所述初始查询请求对应的相同查询请求;提取所述初始查询请求;阻塞所述相同查询请求;确定所述初始查询请求对应的查询结果;将所述查询结果确定为所述相同查询请求对应的查询结果返回给对应的查询用户。本发明主要用于处理高并发查询请求。
Description
技术领域
本发明涉及数据处理技术领域,尤其涉及一种处理高并发查询请求的方法及装置。
背景技术
在大数据时代,联机分析处理(Online AnalyticalProcessing,OLAP)在处理数据时,通常的做法是先对一个时间范围的数据,按照维度的组合对指标集进行预先计算,该预先计算被称之为预聚合,然后保存该预聚合结果,根据上述的预聚合结果,用户可以应用OLAP更加具体地多维度剖析数据。
目前,在查询预聚合结果时,对于每一次查询请求,都需要执行一次查询操作。然而,在对预聚合结果进行查询分析时,可以发现查询请求具有幂等性的特征,即执行多次同样的查询请求对应的查询结果是相同的,据此,当在高并发查询请求状态时,查询请求中可能会存在很多相同的并发请求,若对每个请求都执行一次查询操作,那么会浪费大量的处理资源,同时也大大降低了用户获取查询结果的效率。
发明内容
有鉴于此,本发明提供一种处理高并发查询请求的方法及装置,主要目的在于通过一次查询请求获取在一段时间内与该查询请求相同的多个并发查询请求对应的查询结果,减少了查询工作量,提高了查询数据的工作效率。
为了解决上述问题,本发明主要提供如下技术方案:
一方面,本发明提供了一种处理高并发查询请求的方法,该方法包括:
接收多个并发查询请求,所述并发查询请求中包括初始查询请求以及与所述初始查询请求对应的相同查询请求;
提取所述初始查询请求;
阻塞所述相同查询请求;
确定所述初始查询请求对应的查询结果;
将所述查询结果确定为所述相同查询请求对应的查询结果返回给对应的查询用户。
优选的,所述确定所述初始查询请求对应的查询结果包括:
将所述初始查询请求发送至分布式集群中的异地节点,由所述异地节点执行查询操作,获取所述初始查询请求对应的查询结果,将所述查询结果写入所述异地节点的分布式缓存;
接收所述异地节点返回的查询完成消息;
根据所述查询完成消息,在本地节点的分布式缓存中获取所述查询结果,其中,所述分布式集群包含的各个节点都存在分布式缓存,并且当在一个节点的分布式缓存中写入数据时,所述数据可以被其他节点的分布式缓存读取。
优选的,在所述接收多个并发查询请求之后,所述方法还包括:
判断所述并发查询请求是否为初始查询请求;
若是,则提取所述初始查询请求,并根据所述初始查询请求创建同步等待结构,所述同步等待结构用于阻塞所述相同查询请求;
若不是,则将所述并发查询请求确定为相同查询请求,并将所述相同查询请求加入对应的同步等待结构中,阻塞所述相同查询请求。
优选的,将所述查询结果确定为所述相同查询请求对应的查询结果返回给对应的查询用户包括:
当接收到所述查询完成消息时,唤醒所述同步等待结构阻塞的相同查询请求;
将在本地节点的分布式缓存中获取的所述查询结果确定为所述相同查询请求对应的查询结果;
注销所述初始查询请求对应的同步等待结构。
优选的,在判断所述并发查询请求是否为初始查询请求之前,所述方法还包括:
查询本地节点的分布式缓存中是否存在所述并发查询请求对应的查询结果;
若存在,则将所述查询结果发送给所述查询用户。
优选的,所述方法还包括:
根据接收的并发查询请求,在第一线程池中创建对应所述并发查询请求的处理线程;
在确定所述查询结果时,在第二线程池中创建用于获取所述查询结果的处理线程,其中,所述第一线程池与所述第二线程池是根据预置规则划分对应处理资源得到的线程池。
为了实现上述目的,根据本发明的另一方面,提供了一种存储介质,所述存储介质包括存储的程序,其中,在所述程序运行时控制所述存储介质所在设备执行上述所述的处理高并发查询请求的方法。
为了实现上述目的,根据本发明的另一方面,提供了一种处理器,所述处理器用于运行程序,其中,所述程序运行时执行上述所述的处理高并发查询请求的方法。
另一方面,本发明还提供了一种处理高并发查询请求的装置,该装置包括:
接收单元,用于接收多个并发查询请求,所述并发查询请求中包括初始查询请求以及与所述初始查询请求对应的相同查询请求;
提取单元,用于提取所述接收单元接收的初始查询请求;
阻塞单元,用于阻塞所述接收单元接收的相同查询请求;
确定单元,用于确定所述提取单元提取的初始查询请求对应的查询结果;
所述确定单元,还用于将所述确定单元确定的查询结果确定为所述阻塞单元阻塞的相同查询请求对应的查询结果返回给对应的查询用户。
优选的,所述确定单元包括:
发送模块,用于将所述提取单元提取的初始查询请求发送至分布式集群中的异地节点,由所述异地节点执行查询操作,获取所述初始查询请求对应的查询结果,将所述查询结果写入所述异地节点的分布式缓存;
接收模块,用于接收所述异地节点返回的查询完成消息;
获取模块,用于根据所述查询完成消息,在本地节点的分布式缓存中获取所述查询结果,其中,所述分布式集群包含的各个节点都存在分布式缓存,并且当在一个节点的分布式缓存中写入数据时,所述数据可以被其他节点的分布式缓存读取。
优选的,所述装置还包括:
判断单元,用于判断所述接收单元接收的并发查询请求是否为初始查询请求;
所述提取单元,还用于当所述判断单元判断并发查询请求是初始查询请求时,提取所述初始查询请求;
第一创建单元,用于根据所述提取单元提取的初始查询请求创建同步等待结构,所述同步等待结构用于阻塞所述相同查询请求;
所述确定单元,还用于当所述判断单元判断并发查询请求不是初始查询请求时,将所述并发查询请求确定为相同查询请求;
加入单元,用于将所述确定单元确定的相同查询请求加入对应的同步等待结构中,以便所述阻塞单元阻塞所述相同查询请求。
优选的,所述确定单元包括:
唤醒模块,用于当所述接收模块接收到所述查询完成消息时,唤醒所述同步等待结构阻塞的相同查询请求;
确定模块,用于将在本地节点的分布式缓存中所述获取模块获取的所述查询结果确定为所述相同查询请求对应的查询结果;
注销模块,用于注销所述初始查询请求对应的同步等待结构。
优选的,所述装置还包括:
查询单元,用于查询本地节点的分布式缓存中是否存在所述接收单元接收的并发查询请求对应的查询结果;
发送单元,用于若存在所述并发查询请求对应的查询结果,则将所述查询单元查询的查询结果发送给所述查询用户。
优选的,所述装置还包括:
第二创建单元,用于根据所述接收单元接收的并发查询请求,在第一线程池中创建对应所述并发查询请求的处理线程;
第三创建单元,还用于在所述确定单元确定所述查询结果时,在第二线程池中创建用于获取所述查询结果的处理线程,其中,所述第一线程池与所述第二线程池是根据预置规则划分对应处理资源得到的线程池。
借由上述技术方案,本发明实施例提供的技术方案至少具有下列优点:
本发明提供的一种处理高并发查询请求的方法及装置,当对OLAP处理数据过程中的预聚合结果发起高并发查询请求时,本发明实施例不需要对接收到的多个并发查询请求一一执行查询操作,而是通过确定在一段时间内接收到的多个并发查询请求中包含的初始查询请求以及与初始查询请求对应的相同查询请求,只执行初始查询请求的查询操作,而阻塞相同查询请求,通过执行一次初始查询操作,将该查询结果复用给与该初始查询请求对应的相同查询请求,即通过执行一次查询操作,可以获得该初始查询请求以及该初始查询请求对应的相同查询请求的查询结果,大大减少了高并发查询请求对应的查询工作量,节约了大量的处理资源,从而提高了查询数据的工作效率。
上述说明仅是本发明技术方案的概述,为了能够更清楚了解本发明的技术手段,而可依照说明书的内容予以实施,并且为了让本发明的上述和其它目的、特征和优点能够更明显易懂,以下特举本发明的具体实施方式。
附图说明
通过阅读下文优选实施方式的详细描述,各种其他的优点和益处对于本领域普通技术人员将变得清楚明了。附图仅用于示出优选实施方式的目的,而并不认为是对本发明的限制。而且在整个附图中,用相同的参考符号表示相同的部件。在附图中:
图1为本发明实施例提供的一种处理高并发查询请求的方法流程图;
图2为本发明实施例提供的控制并发查询请求的示意图;
图3为本发明实施例提供的另一种处理高并发查询请求的方法流程图;
图4为本发明实施例提供的基于Akka框架实现的OLAP查询系统的示意图;
图5为本发明实施例提供的一种高并发查询请求的查询流程示意图;
图6为本发明实施例提供的一种处理高并发查询请求的装置的组成框图;
图7为本发明实施例提供的另一种处理高并发查询请求的装置的组成框图。
具体实施方式
下面将参照附图更详细地描述本发明的示例性实施例。虽然附图中显示了本发明的示例性实施例,然而应当理解,可以以各种形式实现本发明而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本发明,并且能够将本发明的范围完整的传达给本领域的技术人员。
本发明实施例提供了一种处理高并发查询请求的方法,如图1所示,该方法是通过确定在一段时间内接收到的多个并发查询请求中包含的初始查询请求以及与初始查询请求对应的相同查询请求,并且执行初始查询请求,并将初始查询请求对应的结果复用给该初始查询请求对应的相同查询请求,以减少查询工作量,提高了查询数据的工作效率,对此本发明实施例提供以下具体步骤:
101、接收多个并发查询请求。
其中,并发查询请求中包括初始查询请求以及与该初始查询请求对应的相同查询请求,该相同查询请求是指在服务器接收初始查询请求至执行完毕初始查询请求的查询操作期间,服务器接收到的与该初始查询请求相同的并发查询请求。
在本发明实施例中,当接收到并发查询请求时,可以通过提取每个查询请求中所对应的结构化查询语言(Structured Query Language,SQL)的语句,并对SQL语句中包含的查询条件以及查询关键字进行分析,实现判断接收到的并发查询请求中是否存在多个相同的查询请求。对于本发明实施例,关于确定并发查询请求中是否存在相同的查询请求的方法,不作限定。
当通过联机分析处理(Online Analytical Processing,OLAP)在处理数据时,通常的做法是先对一个时间范围的数据,按照维度的组合对指标集进行预先计算,该预先计算被称之为预聚合,然后保存该预聚合结果,根据上述的预聚合结果,用户可以应用OLAP更加具体地多维度剖析数据。基于上述的预聚合结果进行查询分析,可以发现查询请求具有幂等性的特征,即执行多次同样的查询请求对应的查询结果是相同的,据此,当在高并发查询请求状态时,查询请求中可能会存在很多相同的并发查询请求。
对于本发明实施例,当对OLAP处理数据过程中的预聚合结果发起高并发查询请求时,查询请求中会存在很多相同的并发查询请求,对于这些相同的并发查询请求,根据服务器接收的查询指令的时间先后顺序,可以将服务器首次接收查询指令对应的查询请求确定为初始查询请求,将服务器在后接收的查询指令对应的查询请求,确定为与该初始查询请求对应的相同查询请求。
例如,如图2所示,对OLAP处理数据过程中的预聚合结果发起高并发查询请求,在一定的时间范围内,比如t1至t4时间范围内,服务器按照时间先后顺序依次接收到相同的并发查询请求q1、q3、q2、q4、q5,其中,服务器在t1时刻接收到查询请求q1,在t2时刻执行完毕,并且在t1至t2时间范围内,服务器先后接收到查询请求q2和q3,则可以确定在t1至t2时间范围内q1是初始查询请求以及q2和q3是与q1对应的相同查询请求。同理分析,在t3至t4时间范围内,q4是初始查询请求,q5是与q4对应的相同查询请求。
102、提取初始查询请求。
对于本发明实施例,当对OLAP处理数据过程中的预聚合结果发起高并发查询请求时,服务器会接收到多个并发查询请求,根据步骤101确定该多个并发查询请求中包含的初始查询请求,并提取该初始查询请求,用于分隔开该初始查询请求和相同查询请求,比如根据上述步骤101中的例举,在t1至t4时间范围内确定初始查询请求q1以及q1对应的相同查询q2和q3、初始查询请求q4以及q4对应的相同查询q5,并提取初始查询请求q1、q4。
103、阻塞相同查询请求。
对于本发明实施例,当确定多个并发查询请求中包含的初始查询请求以及相同查询请求后,根据初始查询请求,创建该初始查询请求对应的同步等待结构,用于存储相同查询请求,并阻塞该相同查询请求的查询操作。比如根据上述步骤101中的例举,q1是初始查询请求,q2和q3是与q1对应的相同查询请求,则创建q1对应的同步等待结构,用于存储q2和q3,并且阻塞q2和q3的查询操作。
104、确定初始查询请求对应的查询结果。
当确定多个并发查询请求中包含的初始查询请求后,服务器执行该初始查询请求的查询指令,并把查询结果保存在服务器缓存中。
105、将初始查询请求对应的查询结果确定为相同查询请求对应的查询结果返回给对应的查询用户。
在服务器执行完毕初始查询请求的查询指令,并确定查询结果后,服务器调用线程唤醒阻塞在同步等待结构中的相同查询请求,该相同查询请求可以通过查询服务器缓存获得初始查询请求对应的查询结果,即可以确定该相同查询请求对应的查询结果,并根据不同查询用户发起的并发查询请求,将查询结果返回给各个查询用户。
当阻塞在同步等待结构中的相同查询请求获得对应的查询结果后,服务器会注销该同步等待结构,据此,本发明实施例中所创建的同步等待结构是具有一定生命周期的,即根据对应的初始查询请求被创建,并在相同查询请求复用了初始查询请求的查询结果后,被服务器注销。通过上述动态地建立及注销同步等待结构的方法,可以不过多的占用服务器资源,提高服务器的处理性能。
本发明提供的一种处理高并发查询请求的方法及装置,当对OLAP处理数据过程中的预聚合结果发起高并发查询请求时,本发明实施例不需要对接收到的多个并发查询请求一一执行查询操作,而是通过确定在一段时间内接收到的多个并发查询请求中包含的初始查询请求以及与初始查询请求对应的相同查询请求,只执行初始查询请求,而阻塞相同查询请求,通过执行一次初始查询操作,将该查询结果复用给该初始查询请求对应的相同查询请求,即通过执行一次查询操作,可以获得该初始查询请求以及该初始查询请求对应的相同查询请求的查询结果,大大减少了高并发查询请求对应的查询工作量,节约了大量的处理资源,从而提高了查询数据的工作效率。
基于对上述实施例中各步骤的具体实现方式,本发明实施例提供了另一种处理高并发查询请求的方法,如图3所示,该方法是采用基于分布式框架实现的OLAP查询系统,在本地节点阻塞相同查询请求,在异地节点执行初始查询请求的查询操作,将查询结果存储在异地节点的分布式缓存中,根据各个节点的分布式缓存具有的读写数据一致性,相同查询请求可以复用初始查询请求的结果,并在本地的分布式缓存中得到对应的结果,减少了查询工作量,提高了查询数据效率,对此本发明实施例提供以下具体步骤:
201、接收多个并发查询请求。
其中,并发查询请求中包括初始查询请求以及与初始查询请求对应的相同查询请求,具体的描述参考步骤101,此处不再赘述。
需要说明的是,对于本发明实施例,采用分布式框架将数据存储、数据分析以及数据计算等构建在由多个节点构成的集群上,当对OLAP处理数据过程中的预聚合结果发起高并发查询请求时,本发明实施例通过上述分布式框架处理高并发查询请求。
例如,如图4所示的基于Akka框架实现的OLAP查询系统,整个查询系统由两个集群组成,包括:图中的Node1、Node2以及Node3是分布式框架中的3个节点,由这3个对等的节点组成对等的Akka集群;由3个节点上的分布式缓存组成另一个集群,在分布式缓存的集群中,当在任一节点的分布式缓存中写入数据时,在其他节点的分布式缓存中可以读取该数据,从而保证读写的一致性。其中,节点Node1、Node2以及Node3具有的结构和功能是相同的,即可以选择在Node1、Node2以及Node3中的任一节点接收并发查询请求,并将初始查询请求发送至其他节点中的任一节点执行OLAP查询,所以节点Node1、Node2以及Node3是对等的。对于本发明实施例采用的分布式框架中可以存在多个节点,并且各个节点都是对等的,在本发明实施例中只例举节点Node1、Node2以及Node3。
对于本发明实施例的举例,不限于基于Akka框架实现的OLAP查询系统,但由于基于Akka框架和Scala编程语言,Akka框架在实现提供基础的消息通信时,不需要应用层代码关注数据的传输,并且Akka基于Actor的编程模型更容易编写可扩展的分布式应用。所以通过利用例举基于Akka框架实现的OLAP查询系统可以更清晰的阐述本发明实施例。而对于其他分布式框架实现的OLAP查询系统,在实现并发查询请求的方法上,可以等同于本发明实施例基于Akka框架实现的OLAP查询系统,本发明实施例不需再作出一一例举。
202、查询本地节点的分布式缓存中是否存在并发查询请求对应的查询结果。
在分布式框架中,对于本地节点接收到的多个并发查询请求,首先依次对每条并发查询请求进行判断,在本地节点的分布式缓存中是否存在并发查询请求对应的查询结果。对于各个节点的分布式缓存组成的集群中,当在一个节点的分布式缓存中写入数据时,该数据可以被其他节点的分布式缓存读取。因此,通过查询本地节点的分布式缓存,可以确定在该分布式框架中,是否存在与并发查询请求对应的查询结果。对于本发明实施例,通过查询本地节点的分布式缓存的方法,获取并发查询请求对应的查询结果,可以提高查询效率。
203a、若存在并发查询请求对应的查询结果,则将该查询结果发送给查询用户。
通过上述步骤202的判断,在本地节点的分布式缓存中存在并发查询请求对应的查询结果,对于本发明实施例,还需要根据预置的缓存时间有效期判断该查询结果是否有效。
由于OLAP处理的数据是在不断的批量增加的,若不设置缓存时间有效期会增加服务器的处理压力,并且随着数据的更新,对应的查询结果也是存在时效性的,所以若查询结果未超过缓存时间有效期,则该查询结果是有效数据,若查询结果超过缓存时间有效期,则该查询结果是无效数据,清除无效的查询结果。
若本地节点的分布式缓存中存在并发查询请求对应的查询结果是有效的,则可以通过查询本地节点的分布式缓存,获取该并发查询请求对应的查询结果,并将该查询结果发送给对应的查询用户。
203b、判断并发查询请求是否为初始查询请求。
通过上述步骤202的判断,在本地节点的分布式缓存中不存在并发查询请求对应的查询结果,则需要对本地节点接收的该并发查询请求进行后续处理,首先判断并发查询请求是否为初始查询请求,具体的描述包括:查询本地节点是否存在该并发查询请求对应的同步等待结构,若存在,则说明在接收该并发查询请求之前,在本地节点已经接收到相同的并发查询请求,并根据其中初始查询请求建立对应的同步等待结构,那么该并发查询请求不是初始查询请求而是相同查询请求。若不存在,则说明在本地节点未接收过相同的并发查询请求,那么该并发查询请求是初始查询请求。
204a、若并发查询请求是初始查询请求,则提取该初始查询请求,并根据该初始查询请求创建同步等待结构。
若并发查询请求是初始查询请求,则提取该初始查询请求,参考步骤102中的例举,此处不再赘述。根据该初始查询请求创建该初始查询请求对应的同步等待结构,用于后续当本地服务器接收的并发查询请求与该初始查询请求相同时,则将该相同查询请求存储在同步等待结构中,用于阻塞该相同查询请求的查询操作。
例如,如图4所示,本地服务器Node1接收多个并发查询请求,通过判断当前接收的并发查询请求,若是初始查询请求,则在Node1中的并发控制阻塞等待模块中创建该初始查询请求对应的同步等待结构,用于后续当本地服务器Node1接收的并发查询请求与该初始查询请求相同时,则将该相同查询请求存储在同步等待结构中,以便阻塞该相同查询请求的查询操作。
对于如图4所示的本发明实施例的例举,进一步的,例举基于Akka框架和Scala编程语言实现的同步等待结构的编程代码如下:
对上述例举的编程代码,根据编程代码中的标注做出一一说明,具体如下:
(1)申明在同步等待结构中用到的lock和condition;
(2)定义变量closed,用于判断初始查询请求是否已经执行返回;
(3)当本地节点接收相同查询请求时,调用reEntranceWait,阻塞相同查询请求;
(4)在条件变量condition上阻塞相同查询请求;
(5)返回destroy方法设置的response,当初始查询执行完毕后,会发出查询完成消息,该信息包括查询异常或者查询成功;
(6)异地节点发送查询完成消息给本地节点,初始查询请求返回时从线程池获取到线程后调用destroy方法,用于唤醒同步等待结构中的相同查询请求;
(7)设置初始查询请求的查询结果result到response中,用于相同查询请求可以复用该查询结果;
(8)设置closed标志为true,表明同步等待结构对应的初始查询请求已经返回,即可让阻塞相同查询请求的线程从reEntranceWait方法的while退出,不再存储相同查询请求至同步等待结构;
(9)通过condition.signalAll()唤醒阻塞在条件变量condition上的相同查询请求的线程。
具体的,对于上述例举的编程代码做出描述,初始查询请求对应的同步等待结构通过QueryStatus实现,它是一个动态运行时结构,当本地节点接收初始查询请求时创建同步等待结构,而在异地节点对初始查询请求执行完,相同查询请求复用了初始查询请求的查询结果后被注销,destroy方法由异地节点对初始查询请求执行完成并返回时调用,当置closed标志为true时,通过condition.signalAll()唤醒阻塞的相同查询请求的线程,reEntranceWait()方法则由相同查询请求调用,通过condition.await()阻塞相同查询请求等待初始查询请求返回时唤醒。
204b、若并发查询请求不是初始查询请求,则将该并发查询请求确定为相同查询请求,并将该相同查询请求加入对应的同步等待结构中,阻塞该相同查询请求。
若并发查询请求不是初始查询请求,则可以确定在本地服务器接收该并发查询请求之前,在先接收过与该并发查询请求相同的查询请求,即该并发查询请求对应的初始查询请求,那么该并发查询请求是上述初始查询请求对应的相同查询请求,并且根据上述步骤203c可以确定,本地服务器中的并发控制阻塞等待模块中已经存在该初始查询请求对应的同步等待结构,所以将该并发查询请求加入对应的同步等待结构中,阻塞该并发查询请求的查询操作。
对于如图4所示的本发明实施例的例举,进一步的,例举基于Akka框架和Scala编程语言,实现上述将并发查询请求加入对应的同步等待结构的编程代码如下:
private val queryInProcess=new ConcurrentHashMap[OlapQuery,QueryStatus]asScala
本地节点接收的每一个并发查询请求通过OlapQuery表示,与QueryStatus的对应关系保存在并发哈希Map queryInProcess中,OlapQuery为键,QueryStatus为值,通过方法putIfAbsent写入queryInProcess。其中,OlapQuery对应本地节点接收的并发查询请求,QueryStatus对应本地节点的同步等待结构,通过方法putIfAbsent,将并发查询请求哈希加入其对应的同步等待结构中的处理队列Map queryInProcess。具体的代码编写,此处不具体描述。
205、确定初始查询请求对应的查询结果。
基于上述步骤204c提取的初始查询请求,本步骤具体描述包括:
首先,在本地节点提取初始查询请求,将其发送至分布式集群中的异地节点,由异地节点执行查询操作,在异地节点获取初始查询请求对应的查询结果,并将该查询结果写入异地节点的分布式缓存。
然后,本地节点接收异地节点返回的查询完成消息,该查询完成消息指示出初始查询结果是成功或者异常。
最后,由于在分布式集群中各个节点的分布式缓存的读写数据可以保持一致,所以通过读取本地节点的分布式缓存可以获得在异地节点写入的初始查询请求的查询结果。
例如,如图4所示的基于Akka框架实现的OLAP查询系统,当本地节点Node1在接收多个并发查询请求时,通过上述步骤204c提取初始查询请求,将该初始查询请求发送至分布式框架的分布式集群中的异地节点Node2,在异地节点Node2执行初始查询请求并获得查询结果,将该查询结果写入异地节点Node2的分布式缓存后,异地节点Node2发送查询完成消息给本地节点Node1,其中,查询完成消息包括查询成功及查询异常,本地节点Node1接收查询完成消息,并在本地节点的分布式缓存中读取异地节点Node2的分布式缓存中写入的查询结果,即在本地节点Node1可以获取该初始查询请求对应的查询结果。如图4所示,异地节点Node3等同于异地节点Node2,本地节点Node1也可以将提取的初始查询请求发送至异地节点Node3,此处不再做具体描述。
206、将初始查询请求对应的查询结果确定为相同查询请求对应的查询结果发送给对应的查询用户。
对于本发明实施例,本步骤具体描述包括:当本地节点接收到异地节点发送的初始查询请求的查询完成消息时,唤醒同步等待结构阻塞的相同查询请求,将从本地节点的分布式缓存中读取的初始查询请求的查询结果确定为相同查询请求对应的查询结果,注销本地节点的初始查询请求对应的同步等待结构。
例如,如图4所示的基于Akka框架实现的OLAP查询系统,当本地节点Node1接收到对于初始查询请求的查询完成消息时,唤醒在本地节点Node1中并发控制阻塞等待模块中该初始查询请求对应的同步等待结构,存储在同步等待结构中的该初始查询请求对应的相同查询请求通过查询本地节点Node1分布式缓存中查询结果,可以获得异地节点Node2分布式缓存中写入的初始查询请求对应的查询结果,即相同查询请求可以获得对应的查询结果,本地节点Node1注销该初始查询请求对应的同步等待结构。
对于如图4所示的本发明实施例的例举,进一步的,例举基于Akka框架和Scala编程语言,在上述步骤205和206中实现初始查询请求在分布式框架中查询调度以及注销同步等待结构的编程代码如下:
对上述例举的编程代码,根据编程代码中的标注做出一一说明,具体如下:
(1)createQueryActor通过Actor模型实现初始查询请求在分布式集群范围内的调度;
(2)初始查询请求执行完成后,异地节点会发出初始查询请求对应的查询完成消息;
(3)查询完成消息指示初始查询请求查询成功,则在本地节点从分布式缓存中取异地节点的分布式缓存写入的查询结果;
(4)将(3)中查询结果返回给对应的查询用户;
(5)在QueryStatus上调用destroy方法,当置closed标识为true时,表明初始查询请求已经唤醒了QueryStatus中的相同查询请求;
(6)将查询query和QueryStatus(qs)的对应关系从queryInProcess中删除,即将注销初始查询请求对应的同步等待结构。
对于上述代码中(5)和(6)之间的时间窗口不会影响QueryStatus的正常处理逻辑,假如在执行了(5)还未执行(6)时,本地节点此时又接收到相同的并发查询请求,由于同步等待结构中的相同查询请求已经被唤醒,那么该相同的查询请求不会被加入同步等待结构中,而是直接获得初始查询请求对应的查询结果。若在执行完(5)和(6)后,本地节点接收到相同的并发查询请求,由于同步等待结构已经被注销,假设这里不存在查询缓存结果的情况,那么该相同的并发查询请求即是新的初始查询请求。
需要说明的是,比如对于本发明实施例中基于Akka框架实现的OLAP查询系统,仅利用一个线程池处理上述接收的并发查询请求以及在确定初始查询请求对应的查询结果后,将该查询结果确定为相同查询请求对应的查询结果的逻辑过程。假设该线程池最大只能启动3个线程,在此时,当本地节点接收的多个并发查询请求中包含4个相同的查询请求,那么除了将初始查询请求发送至异地节点,则剩余3个相同查询请求会阻塞在同步等待结构中,并且占用了线程池的全部3个线程。当异地节点执行初始查询请求后,在将该查询结果确定为相同查询请求对应的查询结果的逻辑过程中,需要获取线程池中的线程执行相应的处理,但在此时,剩余的3个相同查询请求占用线程池的全部3个线程,线程池中无空闲的线程,于是形成死锁。
基于上述出现死锁的问题,对于本发明实施例,需要说明的是本发明实施例中创建了两个线程池,用于防止在当对OLAP处理数据过程中的预聚合结果发起高并发查询请求时,出现死锁的问题,具体的描述包括:在本地节点接收的并发查询请求时,利用在第一线程池中创建的线程,在异地节点发送初始查询请求查询完成消息给本地节点时,唤醒本地节点的同步等待结构中相同查询请求,利用第二线程池中创建的线程,并且第一线程池与第二线程池是根据预置规则划分对应处理资源得到的线程池,其中预置规则是指基于服务器的有限处理资源划分第一线程池和第二线程池的规则,由于在本地节点接收多个并发查询请求时需要的线程数量远大于唤醒本地节点的同步等待结构中相同查询需要的线程数量,所以在划分服务器有限的处理资源时,应该分配更多的处理资源给第一线程池,较少的处理资源分配给第二线程池,按照如此预置规则合理分配,可以提高线程的利用率,从而提高了服务器的处理性能。
具体的,对于如图4所示的本发明实施例的例举,进一步的,例举基于Akka框架和Scala编程语言,在创建两个线程池的编程代码如下:
private val senderExecutor=new ThreadPoolExecutor(10,30,0L,
TimeUnit.MILLISECONDS,new LinkedBlockingQueue[Runnable](100),newThreadPoolExecutor.CallerRunsPolicy());
private val receiverExecutor=newThreadPoolExecutor(10,30,0L,
TimeUnit.MILLISECONDS,new LinkedBlockingQueue[Runnable](100),newThreadPoolExecutor.CallerRunsPolicy());
private val senderEC=ExecutionContext.fromExecutorService(senderExecutor)private val receiverEC=
ExecutionContext.fromExecutorService(receiverExecutor)
这里定义了两个线程池,包括:第一线程池senderExecutor和第二线程池receiverExecutor,senderExecutor用于本地节点接收多个并发请求的处理,receiverExecutor用于在异地节点发送初始查询请求查询完成消息给本地节点时,唤醒本地节点的同步等待结构中相同查询请求,用两个线程池是为了防止可能出现的死锁问题。
其中,利用第一线程池处理本地节点接收的多个并发查询请求,具体的,例举基于Akka框架和Scala编程语言的编程代码如下:
对于上述代码,receive是Akka框架的消息接收方,每个case处理一种接收到的消息类型。当接收到OlapQuery消息时,也就是本地节点接收并发查询请求时,利用Futures的future方法异步执行查询请求,具体的查询流程封装在了query方法中。这里需要注意的是future方法的执行线程是来自第一线程池创建的线程。
基于上述本发明实施例提供的另一种处理高并发查询请求的方法,本发明实施例对上述方法的查询流程,如图5所示,做出具体的描述如下:
第一,当本地节点接收多个并发查询请求时,查询本地节点的分布式缓存是否存在并发查询请求对应的查询结果,若存在,则需要根据缓存时间的有效期确定该查询结果是否是有效数据,若是有效数据,则将该查询结果返回给对应的查询用户,若是无效数据,则在缓存中清除该无效数据。
第二,若查询本地节点的分布式缓存,不存在并发查询请求对应的查询结果,则需要判断并发查询请求是否为初始查询请求,可以查询本地节点的并发控制阻塞等待模块是否存在该并发查询请求对应的同步等待结构,若存在,则确定该并发查询请求为相同查询请求,即本地节点在先接收过相同的并发查询请求,若不存在,则确定该并发查询请求为初始查询请求;
第三,若该并发查询请求为初始查询请求,则在本地节点的并发控制阻塞等待模块中创建该初始查询请求对应的同步等待结构,用于存储本地节点后续接收到的相同查询请求,阻塞相同查询请求的查询操作,提取该初始查询请求并发送至异地节点执行查询请求;若该并发查询请求是相同查询请求,则将该相同查询请求存储在同步等待结构中,阻塞该相同查询请求的查询操作;
第四,当异地节点执行完毕初始查询请求,将查询结果存储在异地节点的分布式缓存中,发送查询完成消息给本地节点,用于唤醒本地节点的同步等待结构中相同查询请求,由于分布式集群中各个节点的分布式缓存中保持数据的一致性,所以通过查询本地节点的分布式缓存可以获得初始查询请求对应的查询结果,即该初始查询请求以及相同查询请求都可以获得对应的查询结果后,注销本地节点的并发控制阻塞模块中的同步等待结构,释放处理资源。
具体的,对于如图5所示的查询流程图,进一步的,例举基于Akka框架和Scala编程语言,实现上述查询流程的编程代码如下:
对上述例举的编程代码,根据编程代码中的标注做出一一说明,具体如下:
(1)申明缺省的查询响应结果;
(2)查找对应OlapQuery的缓存数据,即根据本地节点接收的并发查询请求,查找分布式缓存集群中是否存在对应的查询结果;
(3)如果本地节点的分布式缓存中不存在并发查询请求对应的查询结果;
(4)新建一个QueryStatus结构,即创建初始查询请求对应的同步等待结构;
(5)通过查询本地节点是否存在接收的并发查询请求对应的同步查询请求,确定接收的并发查询请求是否是初始查询请求,具体的代码是调用putIfAbsent将OlapQuery、qs写入并发哈希MapqueryInProcess中,如果已经存在对应OlapQuery的项,putIfAbsent返回旧的QueryStatus值,即该并发查询请求不是初始查询请求,即(6),否则该OlapQuery是初始请求,putIfAbsent能成功将刚建立的QueryStatus写入到queryInProcess中,即根据初始查询请求,建立同步等待结构,并执行流程进入到(9);
(6)在本地接收的并发查询请求之前,已经接收过相同的并发查询请求,即确定该并发查询请求是相同查询请求;
(7)在初始查询请求建立的QueryStatus结构oldValue上调用reEntranceWait阻塞等待,即根据将相同查询请求存储在同步等待结构中,阻塞相同查询请求的查询操作;
(8)当异地节点发送初始查询请求查询完成消息给本地节点时,唤醒同步等待结构中阻塞的相同查询请求对应的处理线程,线程被唤醒后将初始查询请求对应的查询结果res返回给调用者replyTo,即返回给对应的查询用户;
(9)directQuery中由系统调度,即将初始查询请求发送至异地节点,并在异地节点执行查询操作;
(10)在本地节点接收并发查询请求后,可以先查询分布式缓存中是否存在对应的查询结果,若存在,调用isValid4CacheResult判断该查询结果是否仍然有效,若有效则返回查询结果给调用者replyTo,其中,这里的isValid4CacheResult方法是一种Lazy的处理方式,即当获取查询结果时才判断查询结果是否过期;
(11)若分布式缓存中存在查询结果,缓存数据不再有效(比如新增了数据导致之前查询的缓存数据失效),则在(12)中清除缓存,在(13)递归调用query方法再执行一次上述查询流程。
为了实现上述目的,根据本发明的另一方面,本发明实施例还提供了一种存储介质,所述存储介质包括存储的程序,其中,在所述程序运行时控制所述存储介质所在设备执行上述所述的处理高并发查询请求的方法。
为了实现上述目的,根据本发明的另一方面,本发明实施例还提供了一种处理器,所述处理器用于运行程序,其中,所述程序运行时执行上述所述的处理高并发查询请求的方法。
进一步的,作为对上述图1、图3所示方法的实现,本发明另一实施例还提供了一种处理高并发查询请求的装置。该装置实施例与前述方法实施例对应,为便于阅读,本装置实施例不再对前述方法实施例中的细节内容进行逐一赘述,但应当明确,本实施例中的装置能够对应实现前述方法实施例中的全部内容。该装置用于提高响应高并发查询请求的查询处理效率,具体如图6所示,该装置包括:
接收单元301,用于接收多个并发查询请求,所述并发查询请求中包括初始查询请求以及与所述初始查询请求对应的相同查询请求;
提取单元302,用于提取所述接收单元301接收的初始查询请求;
阻塞单元303,用于阻塞所述接收单元301接收的相同查询请求;
确定单元304,用于确定所述提取单元302提取的初始查询请求对应的查询结果;
所述确定单元304,还用于将所述查询结果确定为所述阻塞单元303阻塞的相同查询请求对应的查询结果返回给对应的查询用户。
进一步的,如图7所示,所述确定单元304包括:
发送模块3041,用于将所述提取单元302提取的初始查询请求发送至分布式集群中的异地节点,由所述异地节点执行查询操作,获取所述初始查询请求对应的查询结果,将所述查询结果写入所述异地节点的分布式缓存;
接收模块3042,用于接收所述异地节点返回的查询完成消息;
获取模块3043,用于根据所述查询完成消息,在本地节点的分布式缓存中获取所述查询结果,其中,所述分布式集群包含的各个节点都存在分布式缓存,并且当在一个节点的分布式缓存中写入数据时,所述数据可以被其他节点的分布式缓存读取。
进一步的,如图7所示,所述装置还包括:
判断单元305,用于判断所述接收单元301接收的并发查询请求是否为初始查询请求;
所述提取单元302,还用于当所述判断单元305判断并发查询请求是初始查询请求时,提取所述初始查询请求;
第一创建单元306,用于根据所述提取单元302提取的初始查询请求创建同步等待结构,所述同步等待结构用于阻塞所述相同查询请求;
所述确定单元304,还用于当所述判断单元305判断并发查询请求不是初始查询请求时,将所述并发查询请求确定为相同查询请求;
加入单元307,用于将所述确定单元304确定的相同查询请求加入对应的同步等待结构中,以便所述阻塞单元303阻塞所述相同查询请求。
进一步的,如图7所示,所述确定单元304包括:
唤醒模块3044,用于当所述接收模块3042接收到所述查询完成消息时,唤醒所述同步等待结构阻塞的相同查询请求;
确定模块3045,用于将在本地节点的分布式缓存中所述获取模块3043获取的所述查询结果确定为所述相同查询请求对应的查询结果;
注销模块3046,用于注销所述初始查询请求对应的同步等待结构。
进一步的,如图7所示,所述装置还包括:
查询单元308,用于查询本地节点的分布式缓存中是否存在所述接收单元301接收的并发查询请求对应的查询结果;
发送单元309,用于若存在所述并发查询请求对应的查询结果,则将所述查询单元308查询的查询结果发送给所述查询用户。
进一步的,如图7所示,所述装置还包括:
第二创建单元310,用于根据所述接收单元301接收的并发查询请求,在第一线程池中创建对应所述并发查询请求的处理线程;
第三创建单元311,用于在所述确定单元304确定所述查询结果时,在第二线程池中创建用于获取所述查询结果的处理线程,其中,所述第一线程池与所述第二线程池是根据预置规则划分对应处理资源得到的线程池。
综上所述,本发明实施例所采用的一种处理高并发查询请求的方法及装置,当对OLAP处理数据过程中的预聚合结果发起高并发查询请求时,本发明实施例采用基于分布式框架实现的OLAP查询系统,当在本地节点利用第一线程池中创建的线程接收多个并发查询请求时,确定该并发查询请求包含的初始查询请求以及相同查询请求,将初始查询请求发送至异地节点处理,同时将相同查询请求阻塞在本地节点的同步等待结构中,当异地节点执行完毕初始查询请求后,利用第二线程池中创建的线程唤醒同步等待结构中相同查询请求,相同查询请求可以复用初始查询请求的查询结果,即实现执行一次初始查询请求可以获得初始查询请求以及与初始查询请求对应的相同查询请求的查询结果,大大减少了查询数据的工作量,节约处理资源,并且在分布式框架中由于存在多个节点可以获得更多的处理资源,所以通过上述利用处理资源的方式,可以提高处理器的处理性能,从而提高了查询数据的工作效率。此外,上述利用两个不同的线程池中的线程处理数据,也可以防止在唤醒本地节点的同步等待结构中的相同查询请求时无空闲线程可用,而导致出现死锁的现象。除上述陈述,在本地节点接收多个并发查询请求后,可以首先查询分布式集群的分布式缓存,由于各个节点的分布式缓存存储的数据可以保持一致性,所以通过查询本地节点的分布式缓存,可以确定整个分布式集群中是否存在该并发查询请求对应的查询结果,若存在则可以直接将结果返回给查询用户,更加进一步地提高了查询数据的工作效率。
所述处理高并发查询请求的装置包括处理器和存储器,上述接收单元、提取单元、阻塞单元和确定单元等均作为程序单元存储在存储器中,由处理器执行存储在存储器中的上述程序单元来实现相应的功能。
处理器中包含内核,由内核去存储器中调取相应的程序单元。内核可以设置一个或以上,通过调整内核参数来查询数据的工作效率。
存储器可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flash RAM),存储器包括至少一个存储芯片。
本发明实施例提供了一种存储介质,其上存储有程序,该程序被处理器执行时实现所述处理高并发查询请求的方法。
本发明实施例提供了一种处理器,所述处理器用于运行程序,其中,所述程序运行时执行所述处理高并发查询请求的方法。
本发明实施例提供了一种设备,设备包括处理器、存储器及存储在存储器上并可在处理器上运行的程序,处理器执行程序时实现以下步骤:
一种处理高并发查询请求的方法,所述方法包括:接收多个并发查询请求,所述并发查询请求中包括初始查询请求以及与所述初始查询请求对应的相同查询请求;提取所述初始查询请求;阻塞所述相同查询请求;确定所述初始查询请求对应的查询结果;将所述查询结果确定为所述相同查询请求对应的查询结果返回给对应的查询用户。
进一步的,所述确定所述初始查询请求对应的查询结果包括:将所述初始查询请求发送至分布式集群中的异地节点,由所述异地节点执行查询操作,获取所述初始查询请求对应的查询结果,将所述查询结果写入所述异地节点的分布式缓存;接收所述异地节点返回的查询完成消息;根据所述查询完成消息,在本地节点的分布式缓存中获取所述查询结果,其中,所述分布式集群包含的各个节点都存在分布式缓存,并且当在一个节点的分布式缓存中写入数据时,所述数据可以被其他节点的分布式缓存读取。
进一步的,在所述接收多个并发查询请求之后,所述方法还包括:判断所述并发查询请求是否为初始查询请求;若是,则提取所述初始查询请求,并根据所述初始查询请求创建同步等待结构,所述同步等待结构用于阻塞所述相同查询请求;若不是,则将所述并发查询请求确定为相同查询请求,并将所述相同查询请求加入对应的同步等待结构中,阻塞所述相同查询请求。
进一步的,将所述查询结果确定为所述相同查询请求对应的查询结果发送给对应的查询用户包括:当接收到所述查询完成消息时,唤醒所述同步等待结构阻塞的相同查询请求;将在本地节点的分布式缓存中获取的所述查询结果确定为所述相同查询请求对应的查询结果;注销所述初始查询请求对应的同步等待结构。
进一步的,在判断所述并发查询请求是否为初始查询请求之前,所述方法还包括:查询本地节点的分布式缓存中是否存在所述并发查询请求对应的查询结果;若存在,则将所述查询结果发送给所述查询用户。
进一步的,所述方法还包括:根据接收的并发查询请求,在第一线程池中创建对应所述并发查询请求的处理线程;在确定所述查询结果时,在第二线程池中创建用于获取所述查询结果的处理线程,其中,所述第一线程池与所述第二线程池是根据预置规则划分对应处理资源得到的线程池。
本文中的设备可以是服务器、PC、PAD、手机等。
本申请还提供了一种计算机程序产品,当在数据处理设备上执行时,适于执行初始化有如下方法步骤的程序代码:接收多个并发查询请求,所述并发查询请求中包括初始查询请求以及与所述初始查询请求对应的相同查询请求;提取所述初始查询请求;阻塞所述相同查询请求;确定所述初始查询请求对应的查询结果;将所述查询结果确定为所述相同查询请求对应的查询结果发送给对应的查询用户。
本领域内的技术人员应明白,本申请的实施例可提供为方法、系统、或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本申请是参照根据本申请实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
在一个典型的配置中,计算设备包括一个或多个处理器(CPU)、输入/输出接口、网络接口和内存。
存储器可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flash RAM)。存储器是计算机可读介质的示例。
计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、商品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、商品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括要素的过程、方法、商品或者设备中还存在另外的相同要素。
本领域技术人员应明白,本申请的实施例可提供为方法、系统或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
以上仅为本申请的实施例而已,并不用于限制本申请。对于本领域技术人员来说,本申请可以有各种更改和变化。凡在本申请的精神和原理之内所作的任何修改、等同替换、改进等,均应包含在本申请的权利要求范围之内。
Claims (10)
1.一种处理高并发查询请求的方法,其特征在于,所述方法包括:
接收多个并发查询请求,所述并发查询请求中包括初始查询请求以及与所述初始查询请求对应的相同查询请求;
提取所述初始查询请求;
阻塞所述相同查询请求;
确定所述初始查询请求对应的查询结果;
将所述查询结果确定为所述相同查询请求对应的查询结果返回给对应的查询用户。
2.根据权利要求1所述的方法,其特征在于,所述确定所述初始查询请求对应的查询结果包括:
将所述初始查询请求发送至分布式集群中的异地节点,由所述异地节点执行查询操作,获取所述初始查询请求对应的查询结果,将所述查询结果写入所述异地节点的分布式缓存;
接收所述异地节点返回的查询完成消息;
根据所述查询完成消息,在本地节点的分布式缓存中获取所述查询结果,其中,所述分布式集群包含的各个节点都存在分布式缓存,并且当在一个节点的分布式缓存中写入数据时,所述数据可以被其他节点的分布式缓存读取。
3.根据权利要求2所述的方法,其特征在于,在所述接收多个并发查询请求之后,所述方法还包括:
判断所述并发查询请求是否为初始查询请求;
若是,则提取所述初始查询请求,并根据所述初始查询请求创建同步等待结构,所述同步等待结构用于阻塞所述相同查询请求;
若不是,则将所述并发查询请求确定为相同查询请求,并将所述相同查询请求加入对应的同步等待结构中,阻塞所述相同查询请求。
4.根据权利要求3所述的方法,其特征在于,将所述查询结果确定为所述相同查询请求对应的查询结果返回给对应的查询用户包括:
当接收到所述查询完成消息时,唤醒所述同步等待结构阻塞的相同查询请求;
将在本地节点的分布式缓存中获取的所述查询结果确定为所述相同查询请求对应的查询结果;
注销所述初始查询请求对应的同步等待结构。
5.根据权利要求3所述的方法,其特征在于,在判断所述并发查询请求是否为初始查询请求之前,所述方法还包括:
查询本地节点的分布式缓存中是否存在所述并发查询请求对应的查询结果;
若存在,则将所述查询结果发送给所述查询用户。
6.根据权利要求1-5中任一项所述的方法,其特征在于,所述方法还包括:
根据接收的并发查询请求,在第一线程池中创建对应所述并发查询请求的处理线程;
在确定所述查询结果时,在第二线程池中创建用于获取所述查询结果的处理线程,其中,所述第一线程池与所述第二线程池是根据预置规则划分对应处理资源得到的线程池。
7.一种处理高并发查询请求的装置,其特征在于,所述装置包括:
接收单元,用于接收多个并发查询请求,所述并发查询请求中包括初始查询请求以及与所述初始查询请求对应的相同查询请求;
提取单元,用于提取所述接收单元接收的初始查询请求;
阻塞单元,用于阻塞所述接收单元接收的相同查询请求;
确定单元,用于确定所述提取单元提取的初始查询请求对应的查询结果;
所述确定单元,还用于将所述查询结果确定为所述阻塞单元阻塞的相同查询请求对应的查询结果返回给对应的查询用户。
8.根据权利要求7所述的装置,其特征在于,所述确定单元包括:
发送模块,用于将所述提取单元提取的初始查询请求发送至分布式集群中的异地节点,由所述异地节点执行查询操作,获取所述初始查询请求对应的查询结果,将所述查询结果写入所述异地节点的分布式缓存;
接收模块,用于接收所述异地节点返回的查询完成消息;
获取模块,用于根据所述查询完成消息,在本地节点的分布式缓存中获取所述查询结果,其中,所述分布式集群包含的各个节点都存在分布式缓存,并且当在一个节点的分布式缓存中写入数据时,所述数据可以被其他节点的分布式缓存读取。
9.一种存储介质,其特征在于,所述存储介质包括存储的程序,其中,在所述程序运行时控制所述存储介质所在设备执行如权利要求1-6中任一项所述的处理高并发查询请求的方法。
10.一种处理器,其特征在于,所述处理器用于运行程序,其中,所述程序运行时执行如权利要求1-6中任一项所述的处理高并发查询请求的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710763330.XA CN109471872A (zh) | 2017-08-30 | 2017-08-30 | 处理高并发查询请求的方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710763330.XA CN109471872A (zh) | 2017-08-30 | 2017-08-30 | 处理高并发查询请求的方法及装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN109471872A true CN109471872A (zh) | 2019-03-15 |
Family
ID=65657905
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201710763330.XA Pending CN109471872A (zh) | 2017-08-30 | 2017-08-30 | 处理高并发查询请求的方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109471872A (zh) |
Cited By (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110162532A (zh) * | 2019-05-09 | 2019-08-23 | 中国银行股份有限公司 | 交易数据处理方法和设备 |
CN110515990A (zh) * | 2019-07-23 | 2019-11-29 | 华信永道(北京)科技股份有限公司 | 数据查询展示方法及查询展示系统 |
CN110611746A (zh) * | 2019-09-03 | 2019-12-24 | 苏宁云计算有限公司 | 一种多摄像头同步方法及分布式系统 |
CN110750361A (zh) * | 2019-10-25 | 2020-02-04 | 北京亿信华辰软件有限责任公司武汉分公司 | 一种处理并发请求的优化算法 |
CN110837515A (zh) * | 2019-11-06 | 2020-02-25 | 北京天融信网络安全技术有限公司 | 一种基于数据库的数据处理方法及电子设备 |
CN111416861A (zh) * | 2020-03-20 | 2020-07-14 | 中国建设银行股份有限公司 | 一种通信管理系统和方法 |
CN115037802A (zh) * | 2022-06-02 | 2022-09-09 | 北京百度网讯科技有限公司 | 一种请求处理方法、装置、电子设备和存储介质 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102880475A (zh) * | 2012-10-23 | 2013-01-16 | 上海普元信息技术股份有限公司 | 计算机软件系统中基于云计算的实时事件处理系统及方法 |
CN104035923A (zh) * | 2013-03-04 | 2014-09-10 | 阿里巴巴集团控股有限公司 | 查询数据的方法及装置 |
CN105338086A (zh) * | 2015-11-04 | 2016-02-17 | 浪潮软件股份有限公司 | 一种分布式的消息转发方法 |
CN105912624A (zh) * | 2016-04-07 | 2016-08-31 | 北京中安智达科技有限公司 | 分布式部署的异构数据库的查询方法 |
US20160283555A1 (en) * | 2013-02-19 | 2016-09-29 | Oracle International Corporation | Executing continuous event processing (cep) queries in parallel |
CN106453500A (zh) * | 2016-09-07 | 2017-02-22 | 努比亚技术有限公司 | 缓存生成及控制方法、缓存服务器及接口服务器 |
-
2017
- 2017-08-30 CN CN201710763330.XA patent/CN109471872A/zh active Pending
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102880475A (zh) * | 2012-10-23 | 2013-01-16 | 上海普元信息技术股份有限公司 | 计算机软件系统中基于云计算的实时事件处理系统及方法 |
US20160283555A1 (en) * | 2013-02-19 | 2016-09-29 | Oracle International Corporation | Executing continuous event processing (cep) queries in parallel |
CN104035923A (zh) * | 2013-03-04 | 2014-09-10 | 阿里巴巴集团控股有限公司 | 查询数据的方法及装置 |
CN105338086A (zh) * | 2015-11-04 | 2016-02-17 | 浪潮软件股份有限公司 | 一种分布式的消息转发方法 |
CN105912624A (zh) * | 2016-04-07 | 2016-08-31 | 北京中安智达科技有限公司 | 分布式部署的异构数据库的查询方法 |
CN106453500A (zh) * | 2016-09-07 | 2017-02-22 | 努比亚技术有限公司 | 缓存生成及控制方法、缓存服务器及接口服务器 |
Cited By (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110162532A (zh) * | 2019-05-09 | 2019-08-23 | 中国银行股份有限公司 | 交易数据处理方法和设备 |
CN110162532B (zh) * | 2019-05-09 | 2021-06-04 | 中国银行股份有限公司 | 交易数据处理方法和设备 |
CN110515990A (zh) * | 2019-07-23 | 2019-11-29 | 华信永道(北京)科技股份有限公司 | 数据查询展示方法及查询展示系统 |
CN110611746A (zh) * | 2019-09-03 | 2019-12-24 | 苏宁云计算有限公司 | 一种多摄像头同步方法及分布式系统 |
CN110611746B (zh) * | 2019-09-03 | 2021-06-29 | 深圳市云网万店电子商务有限公司 | 一种多摄像头同步方法及分布式系统 |
CN110750361A (zh) * | 2019-10-25 | 2020-02-04 | 北京亿信华辰软件有限责任公司武汉分公司 | 一种处理并发请求的优化算法 |
CN110837515A (zh) * | 2019-11-06 | 2020-02-25 | 北京天融信网络安全技术有限公司 | 一种基于数据库的数据处理方法及电子设备 |
CN111416861A (zh) * | 2020-03-20 | 2020-07-14 | 中国建设银行股份有限公司 | 一种通信管理系统和方法 |
CN115037802A (zh) * | 2022-06-02 | 2022-09-09 | 北京百度网讯科技有限公司 | 一种请求处理方法、装置、电子设备和存储介质 |
CN115037802B (zh) * | 2022-06-02 | 2024-03-08 | 北京百度网讯科技有限公司 | 一种请求处理方法、装置、电子设备和存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109471872A (zh) | 处理高并发查询请求的方法及装置 | |
CN110196851B (zh) | 一种数据存储方法、装置、设备及存储介质 | |
US20170024251A1 (en) | Scheduling method and apparatus for distributed computing system | |
WO2019047441A1 (zh) | 一种通信优化方法及系统 | |
CN112905326B (zh) | 任务处理方法及装置 | |
CN105094751B (zh) | 一种用于流式数据并行处理的内存管理方法 | |
CN109240946A (zh) | 数据的多级缓存方法及终端设备 | |
CN103067425A (zh) | 虚拟机创建方法、虚拟机管理系统及相关设备 | |
CN103716381A (zh) | 一种分布式系统的控制方法,及管理节点 | |
JP2006515690A (ja) | 複数のプロセッサを有するデータ処理システムと、複数のプロセッサを有するデータ処理システムのためのタスクスケジューラと、タスクスケジューリングの対応する方法 | |
CN107517254B (zh) | 一种动态数据请求处理系统及方法 | |
CN107463434A (zh) | 一种分布式任务处理方法与设备 | |
CN107491346A (zh) | 一种应用的任务处理方法、装置及系统 | |
CN107515784A (zh) | 一种在分布式系统中计算资源的方法与设备 | |
CN110704438B (zh) | 一种区块链中布隆过滤器的生成方法及装置 | |
CN105718315A (zh) | 一种任务处理方法及服务器 | |
CN109062697A (zh) | 一种提供空间分析服务的方法和装置 | |
CN111737168A (zh) | 一种缓存系统、缓存处理方法、装置、设备及介质 | |
CN110275681A (zh) | 一种数据存储方法及数据存储系统 | |
CN112231102A (zh) | 一种提升存储系统性能的方法、装置、设备、产品 | |
CN108595259B (zh) | 一种基于全局管理的内存池管理方法 | |
CN105260244A (zh) | 一种分布式系统任务调度的方法和装置 | |
US11513854B1 (en) | Resource usage restrictions in a time-series database | |
Adgaonkar et al. | Availability-Aware Multi-Objective Cluster Allocation Optimization in Energy-Efficient Datacenters | |
Sontakke et al. | Optimization of hadoop mapreduce model in cloud computing environment |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
CB02 | Change of applicant information | ||
CB02 | Change of applicant information |
Address after: 100083 No. 401, 4th Floor, Haitai Building, 229 North Fourth Ring Road, Haidian District, Beijing Applicant after: BEIJING GRIDSUM TECHNOLOGY Co.,Ltd. Address before: 100086 Beijing city Haidian District Shuangyushu Area No. 76 Zhichun Road cuigongfandian 8 layer A Applicant before: BEIJING GRIDSUM TECHNOLOGY Co.,Ltd. |
|
RJ01 | Rejection of invention patent application after publication | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20190315 |