CN110837521A - 数据查询方法、装置和服务器 - Google Patents
数据查询方法、装置和服务器 Download PDFInfo
- Publication number
- CN110837521A CN110837521A CN201911124424.8A CN201911124424A CN110837521A CN 110837521 A CN110837521 A CN 110837521A CN 201911124424 A CN201911124424 A CN 201911124424A CN 110837521 A CN110837521 A CN 110837521A
- Authority
- CN
- China
- Prior art keywords
- target data
- buffer
- database
- data
- service request
- 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
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
- G06F16/245—Query processing
- G06F16/2455—Query execution
- G06F16/24552—Database cache management
Landscapes
- Engineering & Computer Science (AREA)
- Databases & Information Systems (AREA)
- Theoretical Computer Science (AREA)
- Computational Linguistics (AREA)
- Data Mining & Analysis (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明提供了一种数据查询方法、装置和服务器,涉及数据库技术领域,该方法包括响应针对目标数据的多个服务请求,查询第一缓存器中是否存储有该目标数据;如果未在第一缓存器中查询到该目标数据,从上述多个服务请求中确定一个服务请求,通过确定的服务请求向预设的数据库查询该目标数据;如果从数据库查询不到该目标数据,从上述第二缓存器中查询该目标数据。本发明通过设置多级缓存机制,在查询数据库之前,优先查询第一缓存器,减少了同一时刻对数据库的访问量;并且,在向数据库查询失败时,还可以向第二缓存器查询,缓解了数据库服务不可用的情况下,用户请求失败的问题,提升了数据库的服务质量。
Description
技术领域
本发明涉及数据库技术领域,尤其是涉及一种数据查询方法、装置和服务器。
背景技术
MySQL是目前最流行的关系型数据库管理系统,可以提供千亿级别流量的访问请求,并可以提供基于事务的数据处理功能。而容错是允许系统出现某些特定的硬件故障或软件错误,使系统仍然能够执行规定的一组程序,其本质上是关于冗余及其管理、故障检测与诊断和系统状态的维护与恢复。
目前,在MySQL响应高并发查询请求查询时,首先会从缓存中进行查找,如果在缓存中未查询到目标数据,则会继续查询MySQL数据库,而大量的请求将会给MySQL造成较大的冲击;对此,通常的容错方式是增加一层缓存,以减少查询MySQL数据库的次数。但是,在MySQL服务不可用时,例如MySQL响应时间长或返回报错的情况下,这种方式仍会导致查询请求失败。并且,在请求失败的情况下,通常会增加请求重试次数,从而导致请求倍增,这也势必进一步恶化MySQL的查询负担,降低数据库的服务质量。
发明内容
有鉴于此,本发明的目的在于提供一种数据查询方法、装置和服务器,可以在服务器缓存失效时,降低大量服务请求对数据库的冲击,以及缓解数据库服务不可用时,用户请求失败的问题,从而提升数据库的服务质量。
第一方面,本发明实施例提供了一种数据查询方法,应用于服务器,该服务器包括第一缓存器和第二缓存器;该第一缓存器中数据的存储时长,小于第二缓存器中数据的存储时长;该方法包括:响应针对目标数据的多个服务请求,查询第一缓存器中是否存储有该目标数据;如果未在第一缓存器中查询到该目标数据,从上述多个服务请求中确定一个服务请求,通过确定的服务请求向预设的数据库查询该目标数据;如果从数据库查询不到该目标数据,从上述第二缓存器中查询该目标数据。
在本发明较佳的实施例中,上述从多个服务请求中确定一个服务请求,通过确定的该服务请求向预设的数据库查询该目标数据的步骤,包括:在上述多个服务请求中,锁定最早到达服务器的服务请求;通过锁定的服务请求向预设的数据库查询该目标数据;禁止除锁定的服务请求以外的服务请求向该数据库查询该目标数据。
在本发明较佳的实施例中,该方法还包括:如果通过锁定的服务请求向预设的数据库查询到该目标数据,解除锁定上述锁定的服务请求,将该目标数据更新至第一缓存器和第二缓存器;除锁定的服务请求以外的服务请求从第一缓存器中查询该目标数据。
在本发明较佳的实施例中,上述如果从数据库查询不到该目标数据,从第二缓存器中查询该目标数据的步骤,包括:如果向数据库查询该目标数据的时长超过预设时长,或者,接收到该数据库返回的查询报错信息,确认从该数据库查询不到该目标数据;从第二缓存器中查询该目标数据。
在本发明较佳的实施例中,上述确认从数据库查询不到该目标数据的步骤之后,该方法包括:在第一缓存器中,设置与该目标数据相关联的空数据标识;该空数据标识用于指示:从数据库查询不到该目标数据;上述如果未在第一缓存器中查询到该目标数据,从多个服务请求中确定一个服务请求,通过确定的服务请求向预设的数据库查询该目标数据的步骤,包括:如果未在第一缓存器中查询到该目标数据,且没有查询到与该目标数据相关联的空数据标识,从上述多个服务请求中确定一个服务请求,通过确定的该服务请求向预设的数据库查询该目标数据。
在本发明较佳的实施例中,该方法还包括:如果未在第一缓存器中查询到该目标数据,且查询到与该目标数据相关联的空数据标识,停止向预设的数据库查询该目标数据,确定从该数据库查询不到该目标数据。
在本发明较佳的实施例中,上述从该第二缓存器中查询该目标数据的步骤之后,该方法还包括:如果从该第二缓存器中查询不到该目标数据,向该服务请求对应的客户端返回数据查询失败信息。
在本发明较佳的实施例中,上述第一缓存器为可阻塞缓存器,上述第二缓存器为永久缓存器。
第二方面,本发明实施例还提供了一种数据查询装置,应用于服务器,该服务器包括第一缓存器和第二缓存器;该第一缓存器中数据的存储时长,小于第二缓存器中数据的存储时长;该装置包括:第一缓存器查询模块,用于响应针对目标数据的多个服务请求,查询该第一缓存器中是否存储有该目标数据;数据库查询模块,用于如果未在该第一缓存器中查询到该目标数据,从该多个服务请求中确定一个服务请求,通过确定的该服务请求向预设的数据库查询该目标数据;第二缓存器查询模块,用于如果从数据库查询不到该目标数据,从第二缓存器中查询该目标数据。
在本发明较佳的实施例中,上述数据库查询模块还用于:在上述多个服务请求中,锁定最早到达该服务器的服务请求;通过锁定的服务请求向预设的数据库查询该目标数据;禁止除锁定的服务请求以外的服务请求向该数据库查询该目标数据。
在本发明较佳的实施例中,该装置还包括:缓存器更新模块,用于如果通过锁定的服务请求向预设的数据库查询到该目标数据,解除锁定该锁定的该服务请求,将该目标数据更新至第一缓存器和第二缓存器;并且,该第一缓存器查询模块还用于:除锁定的服务请求以外的服务请求从该第一缓存器中查询该目标数据。
第三方面,本发明实施例还提供了一种服务器,该服务器包括处理器和存储器,该存储器存储有能够被该处理器执行的计算机可执行指令,该处理器执行该计算机可执行指令以实现上述数据查询方法。
第四方面,本发明实施例还提供了一种计算机可读存储介质,该计算机可读存储介质存储有计算机可执行指令,该计算机可执行指令在被处理器调用和执行时,计算机可执行指令促使处理器实现上述数据查询方法。
本发明实施例带来了以下有益效果:
本发明实施例提供的一种数据查询方法、装置和服务器,响应针对目标数据的多个服务请求,查询第一缓存器中是否存储有该目标数据;如果未在第一缓存器中查询到该目标数据,从上述多个服务请求中确定一个服务请求,通过确定的服务请求向预设的数据库查询该目标数据;如果从数据库查询不到该目标数据,从上述第二缓存器中查询该目标数据。该方式通过设置多级缓存机制,在查询数据库之前,优先查询第一缓存器,从而减少对数据库的查询次数;并且,在查询数据库时,对于相同的多个服务请求,限制一次只能通过其中一个服务请求,进一步缓冲了数据库的查询压力;再者,如果从数据库查询失败,则向第二缓存器查询,从而缓解了数据库服务不可用时,用户请求失败的问题,有效降低了大量请求对数据库的冲击压力,提升了数据库的服务质量。
另外,对于在数据库中没有保存的数据,只要查询过一次之后,即在第一缓存器中设置与该数据相关联的空数据标识,从而当再次查找该数据时,因在第一缓存器中查询到该数据关联的空数据标识,而不再查询数据库,进而降低了空数据对数据库的查询压力。
本公开的其他特征和优点将在随后的说明书中阐述,或者,部分特征和优点可以从说明书推知或毫无疑义地确定,或者通过实施本公开的上述技术即可得知。
为使本公开的上述目的、特征和优点能更明显易懂,下文特举较佳实施例,并配合所附附图,作详细说明如下。
附图说明
为了更清楚地说明本发明具体实施方式或现有技术中的技术方案,下面将对具体实施方式或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施方式,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明实施例提供的一种数据查询的应用场景示意图;
图2为本发明实施例提供的一种数据查询方法的流程示意图;
图3为本发明实施例提供的另一种数据查询方法的流程示意图;
图4为本发明实施例提供的另一种数据查询方法的流程示意图;
图5为本发明实施例提供的另一种数据查询方法的流程示意图;
图6为本发明实施例提供的一种数据查询装置的结构示意图;
图7为本发明实施例提供的一种服务器的结构示意图。
图标:100-客户端;200-服务器;300-数据库;61-第一缓存器查询模块;62-数据库查询模块;63-第二缓存器查询模块;71-处理器;72-存储器;73-总线;74-通信接口。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合附图对本发明的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
参见图1,其为本实施例提供的一种数据查询的应用场景示意图,由图1可见,该应用场景包括依次通信连接的客户端100、服务器200和数据库300。其中,该服务器200可以通过有线或无线与上述客户端100和数据库300相连。
在图1所示的应用场景中,该客户端100可以是手机、笔记本电脑、台式机、平板电脑、多媒体播放设备和可穿戴设备等等,并且,客户端100的数量可以是一个或多个。其中,该数据库300可以是单独位于一个数据库服务器200中,也可以是集成于上述服务器200中,作为该服务器200的一部分。此外,该数据库300还可以软件的形式存在于工作站、工程机或个人电脑等可运行数据库的设备中。并且,上述服务器200包括缓存器,在实际操作中,当客户端100需要查询数据时,可以通过该服务器200向数据库查询。
考虑到现有的数据查询方式在响应高并发查询请求查询时,会对数据库造成冲击,降低数据库的服务质量的问题,本发明提供了一种数据查询方法、装置和服务器,该技术可以应用于各类软件、程序、系统等对数据进行查询的过程中。
为便于对本实施例进行理解,首先对本发明实施例所公开的一种数据查询方法进行详细介绍。
图2所示为一种数据查询方法的流程示意图,其中,该方法应用于服务器,该服务器包括第一缓存器和第二缓存器,并且,该第一缓存器中数据的存储时长,小于第二缓存器中数据的存储时长。由图1可见,该数据查询方法包括以下步骤:
步骤S202:响应针对目标数据的多个服务请求,查询第一缓存器中是否存储有该目标数据。
上述服务器包括第一缓存器和第二缓存器,这里,缓存器又称为缓冲存储器或者高速缓冲存储器,是为了解决中央处理器和主存之间速度不匹配而采用的一项重要技术,其存取速度比主存快,能够高速地向中央处理器提供指令和数据,从而加快了程序的执行速度。并且,上述第一缓存器和第二缓存器均用于数据的存储,其中的“第一”和“第二”仅用于区分描述的目的,而不能理解为指示或暗示相对重要性。在实际操作中,上述服务器可以是具有多线程高并发架构的服务器,用于处理大量并发服务请求,例如,其可以是网络服务器。
在本实施例中,上述服务器中的第一缓存器中数据的存储时长,小于第二缓存器中数据的存储时长。例如,假设第一缓存器中数据的存储时长为3小时,则第二缓存器中数据的存储时长大于3小时,比如可以设置为20小时、40小时或者其他大于3小时的时长。在上述缓存器中,当某一数据的存储时间达到该缓存器中的存储时长时,将被清理。例如,假设第一缓存器中数据的存储时长为3小时,第二缓存器中数据的存储时长为40小时,则对于存储于第一缓存器中的数据A,当数据A的存储时间达到3小时时,将被清理,不再存储于第一缓存器中;同理,对于存储于第二缓存器中的数据B,当数据B的存储时间达到40小时时,将被清理,不再存储于第二缓存器中。
对于上述服务器,当其接收到多个服务请求时,例如在高并发请求下,响应针对目标数据的多个服务请求,首先查询在第一缓存器中是否存储有该目标数据。这里,对于上述多个服务请求,都是针对同一目标数据的,其中,该服务请求可以是读取、拷贝、修改等等。
步骤S204:如果未在第一缓存器中查询到该目标数据,从上述多个服务请求中确定一个服务请求,通过确定的服务请求向预设的数据库查询该目标数据。
如果在第一缓存器中查询到了上述目标数据,则可以根据查询到的目标数据响应上述多个服务请求,这样,无需再针对该目标数据查询数据库。而如果未在第一缓存器中查询到上述目标数据,例如,未将该目标数据从数据库中拷贝到第一缓存器中,或者,该目标数据已经拷贝到第一缓存器中,但是该目标数据的存储时间已经达到该缓存器的存储时长,因而被清理掉,这样,导致未能在第一缓存器中查询到该目标数据。
此时,从上述多个服务请求中,确定一个服务请求,并通过该确定的服务请求向预设的数据库查询该目标数据。这里,在上述多个服务请求中的其它未被确定的服务请求,需要等待该已经被确定服务请求的查询结果,并根据其查询结果再进行相应的查询操作。例如,假设服务器接收到访问目标数据“abc”的30个并发服务请求,并且,在第一缓存器中未查询到该目标数据“abc”,此时,对于现有的查询方式,通常是所有的服务请求继续查询数据库,因而会对数据库造成较大的冲击,而在本实施例中,会限制高并发请求对数据库的查询,这里,从上述30个服务请求中确定一个请求,只允许这一个针对目标数据“abc”的服务请求访问数据库,而其他29个服务请求则需要等待这一个服务请求的查询结果。
步骤S206:如果从数据库查询不到该目标数据,从上述第二缓存器中查询该目标数据。
在其中一种可能的实施方式中,如果向数据库查询该目标数据的时长超过预设时长,或者,接收到该数据库返回的查询报错信息,则确认从该数据库查询不到该目标数据,此时,从第二缓存器中查询该目标数据。
在实际操作中,可能因为服务器和数据库之间的通信网络不佳等原因,导致向数据库查询该目标数据的时长较久,当查询时间超过预设时长时,确认从该数据库查询不到该目标数据。例如,假设预先设置单个服务请求对数据库的查询时长上限为15秒,如果针对目标数据A的某一服务请求,查询该数据库时长超过15秒,则确认从该数据库查询不到该目标数据A。
在另一种情况下,还可能因为数据库本身的原因,例如数据库损坏,而导致查询出错,这种情况下,若服务器接收到数据库返回的查询报错信息,同样确认从该数据库查询不到该目标数据。
对于上述从数据库查询不到该目标数据的情况,从第二缓存器中查询该目标数据。这里,如果在第二缓存器中查询到该目标数据,则根据查询到的目标数据处理该服务请求。并且,如果没有在第二缓存器中查询到该目标数据,则可以向该服务请求对应的客户端返回数据查询失败信息。
仍以上述针对目标数据“abc”的服务请求为例,在其中一种可能的情况下,该目标数据“abc”存储于数据库中,并被拷贝到第一缓存器和第二缓存器中,但是,该目标数据在第一缓存器中保存的时间已经达到了预设时长,因而被清理掉,而该目标数据“abc”未达到第二缓存器中的存储时长,因而尚存储在第二缓存器中;这种情况下,当服务器响应针对目标数据“abc”的多个服务请求时,因为未在第一缓存器中未查询到该目标数据“abc”,故从多个服务请求中确定一个服务请求向数据库查询,假设数据库返回报错,此时,现有的查询方式通常是直接返回查询失败信息,而在本实施例提供的查询方法中,则继续向第二缓存器查询该目标数据,并最终查找到该目标数据“abc”。
这样,本实施例提供的数据查询方法,通过在服务器中设置具有不同数据存储时长的多级缓存机制,在查询数据库之前,优先查询第一缓存器,从而减少对数据库的查询次数;并且,在查询数据库时,对于相同的多个服务请求,限制一次只能通过其中一个服务请求,进一步缓冲了数据库的查询压力;此外,在向数据库查询超时或者接收到数据库报错的情况下,可以向第二缓存器查询,从而缓解了数据库服务不可用时,用户请求失败的问题,有效降低了大量服务请求对数据库的冲击压力,提升了数据库的服务质量。
本发明实施例提供的数据查询方法,响应针对目标数据的多个服务请求,查询第一缓存器中是否存储有该目标数据;如果未在第一缓存器中查询到该目标数据,从上述多个服务请求中确定一个服务请求,通过确定的服务请求向预设的数据库查询该目标数据;如果从数据库查询不到该目标数据,从上述第二缓存器中查询该目标数据。该方式通过设置多级缓存机制,减少了高并发请求下对数据库的查询次数,减轻了数据库的查询压力,提升了数据库的服务质量。
在图2所示数据查询方法的基础上,本实施例还提供了另一种数据查询方法,该方法重点描述了从多个服务请求中确定一个服务请求,通过确定的该服务请求向预设的数据库查询该目标数据的具体实现过程,如图3所示,为该方法的流程示意图,由图3可见,该方法包括以下步骤:
步骤S302:响应针对目标数据的多个服务请求,查询第一缓存器中是否存储有该目标数据。
步骤S304:如果未在第一缓存器中查询到该目标数据,在上述多个服务请求中,锁定最早到达服务器的服务请求。
如果未在第一缓存器中查询到目标数据,则需要进一步查询数据库。在本实施例中,将针对目标数据的多个服务请求中,最早到达服务器的服务请求锁定,这里,锁定的服务请求即为确定出用于查询数据库的服务请求。
步骤S306:通过锁定的服务请求向预设的数据库查询该目标数据。
对于高并发的多个服务请求,只有锁定的服务请求才允许向预设的数据库查询目标数据,也即,只放行一个服务请求查询数据库。
步骤S308:禁止除锁定的服务请求以外的服务请求向该数据库查询该目标数据。
对于上述多个服务请求,除锁定的服务请求以外的服务请求被禁止向数据库查询,这样,就有效减少了同时向数据库查询的服务请求的数量,从而缓解高并发下对数据库的冲击。
步骤S310:如果从数据库查询不到该目标数据,从上述第二缓存器中查询该目标数据。
这里,从数据库查询不到该目标数据的情况,可参见上述实施例中对应内容的描述,在此不再赘述。在其中一种可能的实施方式中,如果通过锁定的服务请求向预设的数据库查询到该目标数据,则对该锁定的服务请求进行解除锁定,并将该目标数据更新至第一缓存器和第二缓存器,也即将该目标数据拷贝保存至第一缓存器和第二缓存器中;并且,对于针对该目标数据的其他服务请求,也即,上述多个服务请求中,除锁定的服务请求以外的服务请求,从第一缓存器中查询该目标数据。
这样,在高并发情况下,当在第一缓存器中未查询到目标数据,而在数据库中查询到目标数据时,通过将查询到的目标数据更新到第一缓存器和第二缓存器中,针对同一目标数据的后续服务请求,只需要在第一缓存器中查询即可得到目标数据,不再访问数据库,从而大量减少了同一时刻对数据库的访问量。
本实施例提供的数据查询方法,通过锁机制实现在高并发请求下,限制一次只允许一个服务请求查询数据库,从而减少同一时刻对数据库的访问量;此外,还通过将从数据库查询到的目标数据更新到缓存器中,使得针对目标数据的后续服务请求可以直接从缓存中获取,无需再访问数据库,从而进一步缓解了数据库的查询压力,进而提升数据库的服务质量。
在实际操作中,当租户需要查询的目标数据没有存储在数据库时,表示该目标数据为空数据;在现有的数据查询方法中,因无法从缓存器中查询到该目标数据,通常会继续查询数据库,因而,大量针对空数据的查询请求,依然会给数据库带来较大的冲击,从而恶化数据库的服务质量,为了缓解这一问题,本实施例提供了另一种数据查询方法,参见图4,其为该数据查询方法的流程示意图,由图4可见,该方法包括以下步骤:
步骤S402:响应针对目标数据的多个服务请求,查询第一缓存器中是否存储有该目标数据。
步骤S404:如果未在第一缓存器中查询到该目标数据,从上述多个服务请求中确定一个服务请求,通过确定的服务请求向预设的数据库查询该目标数据。
步骤S406:如果从数据库查询不到该目标数据,在第一缓存器中,设置与该目标数据相关联的空数据标识;该空数据标识用于指示:从数据库查询不到该目标数据。
在本实施例中,如果从数据库查询不到该目标数据,例如,数据库返回未查到目标数据,也即,该目标数据没有存储在数据库中,为空数据,此时,在第一缓存器中,设置与该目标数据相关联的空数据标识,其中,该空数据标识用于指示从数据库查询不到该目标数据。
并且,在其中一种可能的实施方式中,在上述在第一缓存器中,设置与该目标数据相关联的空数据标识的步骤之后,还向该服务请求对应的客户端返回数据查询失败的信息。此外,对于上述多个服务请求中除确定的服务请求之外的其他服务请求,因为都是针对该目标数据,在第一次查询已经确认该目标数据为空数据后,其他服务请求不再向数据库查询该目标数据。并且,假若服务器后续接收到针对该目标数据的服务请求,如果其在第一缓存器中查询到与该目标数据相关联的空数据标识,则停止向预设的数据库,并确定从该数据库查询不到该目标数据。
这样,本实施例提供的数据查询方法,通过在第一缓存器中设置空数据的标识,当在第一缓存器中查询到与目标数据相关联的空数据标识时,不再向数据库查询该目标数据,从而有效缓解大量空数据给数据库造成的查询压力,提升数据库的服务质量。
此外,本实施例还提供了另一种数据查询方法,该方法针对上述多个实施例中所描述的数据查询方式进行了整合,以应对数据查询过程中可能遇到的多种情况,如图5所示,其为该数据查询方法的流程示意图,其中,该方法应用于服务器,并且该服务器包括第一缓存器和第二缓存器,在本实施例中,该第一缓存器为可阻塞缓存器,并且该第二缓存器为永久缓存器。由图5可见,该方法包括以下步骤:
步骤S502:响应针对目标数据的多个服务请求,查询第一缓存器中是否存储有该目标数据。
这里,该第一缓存器为可阻塞缓存器,该可阻塞缓存器可以限制通过的服务请求数量,例如,可以通过锁机制进行限制,实现阻塞的效果。
步骤S504:判断是否在第一缓存器中查询到该目标数据;如果是,则执行步骤S506;如果否,则执行步骤S508。
如果在第一缓存器中查询到该目标数据,则根据在第一缓存器中查询到目标数据处理该服务请求;如果没有在第一缓存器中查询到该目标数据,则判断是否在第一缓存器中查询到与该目标数据相关联的空数据标识。
步骤S506:根据在第一缓存器中查询到目标数据处理该服务请求。
步骤S508:判断是否在第一缓存器中查询到与该目标数据相关联的空数据标识;如果是,则执行步骤S510;如果否,则执行步骤S512。
如果在第一缓存器中查询到与该目标数据相关联的空数据标识,表示该目标数据为空数据,也即,数据库中没有该目标数据,此时,停止向预设的数据库查询该目标数据,确定从该数据库查询不到该目标数据。如果在第一缓存器中没有查询到与该目标数据相关联的空数据标识,则从上述多个服务请求中确定一个服务请求,通过确定的该服务请求向预设的数据库查询该目标数据。
步骤S510:停止向预设的数据库查询该目标数据,确定从该数据库查询不到该目标数据。
因为已经确认该目标数据为空数据,所以不再向数据库查询该目标数据,并且,向该服务请求对应的客户端返回数据查询失败信息。同理,对于针对该目标数据的其他服务请求,也不再查询数据库。
步骤S512:从上述多个服务请求中确定一个服务请求,通过确定的该服务请求向预设的数据库查询该目标数据。
这里,限制一次性通过的服务请求数量,针对相同目标数据的并发的多个服务请求,只将确定的一个服务请求放行,通过该确定的服务请求向预设的数据库查询该目标数据。
步骤S514:判断是否在数据库查询到该目标数据;如果是,则执行步骤S516;如果否,则执行步骤S518;如果查询时间超过预设时长,或者,接收到该数据库返回的查询报错信息,则执行步骤S520。
通过步骤S512确定的服务请求向预设的数据库查询目标数据,如果在数据库查询到该目标数据,则根据在数据库中查询到目标数据处理该服务请求;并将该目标数据更新至第一缓存器和第二缓存器;如果没有在数据库查询到该目标数据,则在第一缓存器中,设置与该目标数据相关联的空数据标识,其中,该空数据标识用于指示从数据库查询不到该目标数据;如果查询时间超过预设时长,或者,接收到该数据库返回的查询报错信息,也即,数据库查询失败,则确认从该数据库查询不到该目标数据,并继续向第二缓存器查询该目标数据。
在本实施例中,第二缓存器为永久缓存器,也即,保存在第二缓存器中的数据不会被清理。在其中一种可能的实施方式中,该第二缓存器在数据库服务的启动时,相应加载该数据库中的数据。
步骤S516:根据在数据库中查询到目标数据处理该服务请求;并将该目标数据更新至第一缓存器和第二缓存器。
通过将从数据库查询到的目标数据更新到第一缓存器和第二缓存器中,使得针对目标数据的后续服务请求可以直接从第一缓存器中获取,无需再访问数据库。
步骤S518:在第一缓存器中,设置与该目标数据相关联的空数据标识;该空数据标识用于指示:从数据库查询不到该目标数据。
通过在第一缓存器中设置空数据的标识,当在第一缓存器中查询到与目标数据相关联的空数据标识时,不再向数据库查询该目标数据。
步骤S520:确认从该数据库查询不到该目标数据。
此时,继续向第二缓存器查询该目标数据。
步骤S522:除上述确定的服务请求以外的服务请求不再查询数据库。
对于服务器接收到的上述多个服务请求,因都是针对同一目标数据,在步骤S518中已经确认该目标数据为空数据后,除上述确定的服务请求以外的其他服务请求也不再查询数据库。
步骤S524:除上述确定的服务请求以外的服务请求从第一缓存器中查询该目标数据。
由于已经从数据库查询到该目标数据,并且已经将该目标数据更新到缓存器,因而后续的服务请求可以直接从第一缓存器中查询该目标数据,也无需再查询数据库。
步骤S526:判断是否在第二缓存器中查询到该目标数据;如果是,则执行步骤S530;如果否,则执行步骤S528。
在查询数据库失败的情况下,继续在第二缓存器中查询目标数据,如果在第二缓存器中查询到该目标数据,则根据在第二缓存器中查询到目标数据处理该服务请求;如果没有在第二缓存器中查询到该目标数据,则向该服务请求对应的客户端返回数据查询失败信息。
步骤S528:向该服务请求对应的客户端返回数据查询失败信息。
步骤S530:根据在第二缓存器中查询到目标数据处理该服务请求。
本实施例提供的数据查询方法,通过设置多级缓存以及缓存更新机制,并且在第一缓存器中设置空数据的标识,不但可以有效减少同一时刻对数据库的访问量,还可以缓解数据库服务不可用时,用户请求失败的问题,从而提高了数据库的容错效果,极大提升数据库的服务质量。
对应上述数据查询方法,本实施例还提供了一种数据查询装置,如图6所示,其为该数据查询装置的结构示意图,其中,该装置应用于服务器,该服务器包括第一缓存器和第二缓存器,并且该第一缓存器中数据的存储时长,小于第二缓存器中数据的存储时长。由图6可见,该装置包括依次相连的第一缓存器查询模块61、数据库查询模块62和第二缓存器查询模块63,其中,各个模块的功能如下:
第一缓存器查询模块61,用于响应针对目标数据的多个服务请求,查询该第一缓存器中是否存储有该目标数据;
数据库查询模块62,用于如果未在该第一缓存器中查询到该目标数据,从该多个服务请求中确定一个服务请求,通过确定的该服务请求向预设的数据库查询该目标数据;
第二缓存器查询模块63,用于如果从数据库查询不到该目标数据,从第二缓存器中查询该目标数据。
本发明实施例提供的一种数据查询装置,响应针对目标数据的多个服务请求,查询第一缓存器中是否存储有该目标数据;如果未在第一缓存器中查询到该目标数据,从上述多个服务请求中确定一个服务请求,通过确定的服务请求向预设的数据库查询该目标数据;如果从数据库查询不到该目标数据,从上述第二缓存器中查询该目标数据。该装置通过设置多级缓存机制,在查询数据库之前,优先查询第一缓存器,从而减少对数据库的查询次数;并且,在查询数据库时,限制相同的多个请求一次只能通过一个,进一步缓冲了数据库的查询压力;再者,如果从数据库查询失败,则向第二缓存器查询,从而缓解了数据库服务不可用时,用户请求失败的问题,有效降低了大量请求对数据库的冲击,提升了数据库的服务质量。
在其中一种可能的实施方式中,上述数据库查询模块62还用于:在上述多个服务请求中,锁定最早到达该服务器的服务请求;通过锁定的服务请求向预设的数据库查询该目标数据;禁止除锁定的服务请求以外的服务请求向该数据库查询该目标数据。
在另一种可能的实施方式中,上述数据查询装置还包括:缓存器更新模块,用于如果通过锁定的服务请求向预设的数据库查询到该目标数据,解除锁定该锁定的该服务请求,将该目标数据更新至第一缓存器和第二缓存器;并且,上述第一缓存器查询模块61还用于:除锁定的服务请求以外的服务请求从该第一缓存器中查询该目标数据。
在另一种可能的实施方式中,上述第二缓存器查询模块63还用于:如果向数据库查询该目标数据的时长超过预设时长,或者,接收到该数据库返回的查询报错信息,确认从该数据库查询不到该目标数据;从第二缓存器中查询该目标数据。
在另一种可能的实施方式中,该装置还包括空数据标识模块,用于在第一缓存器中,设置与该目标数据相关联的空数据标识;该空数据标识用于指示:从数据库查询不到该目标数据;并且,上述数据库查询模块62还用于:如果未在第一缓存器中查询到该目标数据,且没有查询到与该目标数据相关联的空数据标识,从上述多个服务请求中确定一个服务请求,通过确定的该服务请求向预设的数据库查询该目标数据。
在另一种可能的实施方式中,上述第一缓存器查询模块61还用于:如果未在第一缓存器中查询到该目标数据,且查询到与该目标数据相关联的空数据标识,停止向预设的数据库查询该目标数据,确定从该数据库查询不到该目标数据。
在另一种可能的实施方式中,上述第二缓存器查询模块63还用于:如果从该第二缓存器中查询不到该目标数据,向该服务请求对应的客户端返回数据查询失败信息。
在另一种可能的实施方式中,上述第一缓存器为可阻塞缓存器,上述第二缓存器为永久缓存器。
本发明实施例提供的数据查询装置,其实现原理及产生的技术效果和前述数据查询方法实施例相同,为简要描述,数据查询装置的实施例部分未提及之处,可参考前述数据查询方法实施例中相应内容。
本发明实施例还提供了一种服务器,如图7所示,为该服务器的结构示意图,其中,该服务器包括处理器71和存储器72,该存储器72存储有能够被该处理器71执行的机器可执行指令,该处理器71执行该机器可执行指令以实现上述数据查询方法。
在图7示出的实施方式中,该服务器还包括总线73和通信接口74,其中,处理器71、通信接口74和存储器72通过总线连接。
其中,存储器72可能包含高速随机存取存储器(RAM,Random Access Memory),也可能还包括非不稳定的存储器(non-volatile memory),例如至少一个磁盘存储器。通过至少一个通信接口74(可以是有线或者无线)实现该系统网元与至少一个其他网元之间的通信连接,可以使用互联网,广域网,本地网,城域网等。总线可以是ISA总线、PCI总线或EISA总线等。所述总线可以分为地址总线、数据总线、控制总线等。为便于表示,图7中仅用一个双向箭头表示,但并不表示仅有一根总线或一种类型的总线。
处理器71可能是一种集成电路芯片,具有信号的处理能力。在实现过程中,上述方法的各步骤可以通过处理器71中的硬件的集成逻辑电路或者软件形式的指令完成。上述的处理器71可以是通用处理器,包括中央处理器(Central Processing Unit,简称CPU)、网络处理器(Network Processor,简称NP)等;还可以是数字信号处理器(Digital SignalProcessing,简称DSP)、专用集成电路(Application Specific Integrated Circuit,简称ASIC)、现成可编程门阵列(Field-Programmable Gate Array,简称FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。可以实现或者执行本发明实施例中的公开的各方法、步骤及逻辑框图。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。结合本发明实施例所公开的方法的步骤可以直接体现为硬件译码处理器执行完成,或者用译码处理器中的硬件及软件模块组合执行完成。软件模块可以位于随机存储器,闪存、只读存储器,可编程只读存储器或者电可擦写可编程存储器、寄存器等本领域成熟的存储介质中。该存储介质位于存储器,处理器71读取存储器72中的信息,结合其硬件完成前述实施例的数据查询方法的步骤。
本发明实施例还提供了一种机器可读存储介质,该机器可读存储介质存储有机器可执行指令,该机器可执行指令在被处理器调用和执行时,该机器可执行指令促使处理器实现上述数据查询方法,具体实现可参见前述数据查询方法的实施例,在此不再赘述。
本发明实施例所提供的数据查询方法、数据查询装置和服务器的计算机程序产品,包括存储了程序代码的计算机可读存储介质,所述程序代码包括的指令可用于执行前面方法实施例中所述的数据查询方法,具体实现可参见方法实施例,在此不再赘述。
除非另外具体说明,否则在这些实施例中阐述的部件和步骤的相对步骤、数字表达式和数值并不限制本发明的范围。
所述功能如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个处理器可执行的非易失的计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
最后应说明的是:以上所述实施例,仅为本发明的具体实施方式,用以说明本发明的技术方案,而非对其限制,本发明的保护范围并不局限于此,尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,其依然可以对前述实施例所记载的技术方案进行修改或可轻易想到变化,或者对其中部分技术特征进行等同替换;而这些修改、变化或者替换,并不使相应技术方案的本质脱离本发明实施例技术方案的精神和范围,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以所述权利要求的保护范围为准。
Claims (13)
1.一种数据查询方法,其特征在于,应用于服务器,所述服务器包括第一缓存器和第二缓存器;所述第一缓存器中数据的存储时长,小于所述第二缓存器中数据的存储时长;所述方法包括:
响应针对目标数据的多个服务请求,查询所述第一缓存器中是否存储有所述目标数据;
如果未在所述第一缓存器中查询到所述目标数据,从所述多个服务请求中确定一个服务请求,通过确定的所述服务请求向预设的数据库查询所述目标数据;
如果从所述数据库查询不到所述目标数据,从所述第二缓存器中查询所述目标数据。
2.根据权利要求1所述的数据查询方法,其特征在于,从所述多个服务请求中确定一个服务请求,通过确定的所述服务请求向预设的数据库查询所述目标数据的步骤,包括:
在所述多个服务请求中,锁定最早到达所述服务器的服务请求;
通过锁定的所述服务请求向预设的数据库查询所述目标数据;
禁止除锁定的所述服务请求以外的服务请求向所述数据库查询所述目标数据。
3.根据权利要求2所述的数据查询方法,其特征在于,所述方法还包括:
如果通过锁定的所述服务请求向预设的数据库查询到所述目标数据,解除锁定所述锁定的所述服务请求,将所述目标数据更新至所述第一缓存器和所述第二缓存器;
除锁定的所述服务请求以外的服务请求从所述第一缓存器中查询所述目标数据。
4.根据权利要求1所述的数据查询方法,其特征在于,如果从所述数据库查询不到所述目标数据,从所述第二缓存器中查询所述目标数据的步骤,包括:
如果向所述数据库查询所述目标数据的时长超过预设时长,或者,接收到所述数据库返回的查询报错信息,确认从所述数据库查询不到所述目标数据;
从所述第二缓存器中查询所述目标数据。
5.根据权利要求1所述的数据查询方法,其特征在于,确认从所述数据库查询不到所述目标数据的步骤之后,所述方法包括:在所述第一缓存器中,设置与所述目标数据相关联的空数据标识;所述空数据标识用于指示:从所述数据库查询不到所述目标数据;
所述如果未在所述第一缓存器中查询到所述目标数据,从所述多个服务请求中确定一个服务请求,通过确定的所述服务请求向预设的数据库查询所述目标数据的步骤,包括:
如果未在所述第一缓存器中查询到所述目标数据,且没有查询到与所述目标数据相关联的空数据标识,从所述多个服务请求中确定一个服务请求,通过确定的所述服务请求向预设的数据库查询所述目标数据。
6.根据权利要求5所述的数据查询方法,其特征在于,所述方法还包括:
如果未在所述第一缓存器中查询到所述目标数据,且查询到与所述目标数据相关联的空数据标识,停止向预设的数据库查询所述目标数据,确定从所述数据库查询不到所述目标数据。
7.根据权利要求1所述的数据查询方法,其特征在于,从所述第二缓存器中查询所述目标数据的步骤之后,所述方法还包括:
如果从所述第二缓存器中查询不到所述目标数据,向所述服务请求对应的客户端返回数据查询失败信息。
8.根据权利要求1-7任一项所述的数据查询方法,其特征在于,所述第一缓存器为可阻塞缓存器,所述第二缓存器为永久缓存器。
9.一种数据查询装置,其特征在于,应用于服务器,所述服务器包括第一缓存器和第二缓存器;所述第一缓存器中数据的存储时长,小于所述第二缓存器中数据的存储时长;所述装置包括:
第一缓存器查询模块,用于响应针对目标数据的多个服务请求,查询所述第一缓存器中是否存储有所述目标数据;
数据库查询模块,用于如果未在所述第一缓存器中查询到所述目标数据,从所述多个服务请求中确定一个服务请求,通过确定的所述服务请求向预设的数据库查询所述目标数据;
第二缓存器查询模块,用于如果从所述数据库查询不到所述目标数据,从所述第二缓存器中查询所述目标数据。
10.根据权利要求9所述的数据查询装置,其特征在于,所述数据库查询模块还用于:
在所述多个服务请求中,锁定最早到达所述服务器的服务请求;
通过锁定的所述服务请求向预设的数据库查询所述目标数据;
禁止除锁定的所述服务请求以外的服务请求向所述数据库查询所述目标数据。
11.根据权利要求10所述的数据查询装置,其特征在于,所述装置还包括:
缓存器更新模块,用于如果通过锁定的所述服务请求向预设的数据库查询到所述目标数据,解除锁定所述锁定的所述服务请求,将所述目标数据更新至所述第一缓存器和所述第二缓存器;
并且,所述第一缓存器查询模块还用于:除锁定的所述服务请求以外的服务请求从所述第一缓存器中查询所述目标数据。
12.一种服务器,其特征在于,所述服务器包括处理器和存储器,所述存储器存储有能够被所述处理器执行的计算机可执行指令,所述处理器执行所述计算机可执行指令以实现权利要求1至8任一项所述的数据查询方法。
13.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质存储有计算机可执行指令,所述计算机可执行指令在被处理器调用和执行时,计算机可执行指令促使处理器实现权利要求1至8任一项所述的数据查询方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911124424.8A CN110837521A (zh) | 2019-11-15 | 2019-11-15 | 数据查询方法、装置和服务器 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911124424.8A CN110837521A (zh) | 2019-11-15 | 2019-11-15 | 数据查询方法、装置和服务器 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN110837521A true CN110837521A (zh) | 2020-02-25 |
Family
ID=69576642
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201911124424.8A Pending CN110837521A (zh) | 2019-11-15 | 2019-11-15 | 数据查询方法、装置和服务器 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110837521A (zh) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112835930A (zh) * | 2021-03-03 | 2021-05-25 | 上海渠杰信息科技有限公司 | 一种数据库的查询方法及设备 |
CN112860960A (zh) * | 2021-03-15 | 2021-05-28 | 北京达佳互联信息技术有限公司 | 数据查询方法及装置 |
CN113672640A (zh) * | 2021-06-28 | 2021-11-19 | 深圳云之家网络有限公司 | 数据查询方法、装置、计算机设备和存储介质 |
Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103793538A (zh) * | 2014-03-06 | 2014-05-14 | 赛特斯信息科技股份有限公司 | 实现数据库宕机情况下网站服务恢复的系统及方法 |
CN105335512A (zh) * | 2015-10-30 | 2016-02-17 | 小米科技有限责任公司 | 数据查询方法及装置 |
CN105718455A (zh) * | 2014-12-01 | 2016-06-29 | 阿里巴巴集团控股有限公司 | 一种数据查询方法及装置 |
WO2017050014A1 (zh) * | 2015-09-21 | 2017-03-30 | 北京奇虎科技有限公司 | 一种数据存储处理方法和装置 |
CN108874806A (zh) * | 2017-05-09 | 2018-11-23 | 广东神马搜索科技有限公司 | 数据查询方法、装置及数据存储系统 |
CN109669960A (zh) * | 2018-12-25 | 2019-04-23 | 钛马信息网络技术有限公司 | 在微服务中通过多级缓存避免缓存雪崩的系统及方法 |
CN109684358A (zh) * | 2017-10-18 | 2019-04-26 | 北京京东尚科信息技术有限公司 | 数据查询的方法和装置 |
CN110162543A (zh) * | 2019-05-29 | 2019-08-23 | 北京奇艺世纪科技有限公司 | 一种信息查询方法及装置 |
-
2019
- 2019-11-15 CN CN201911124424.8A patent/CN110837521A/zh active Pending
Patent Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103793538A (zh) * | 2014-03-06 | 2014-05-14 | 赛特斯信息科技股份有限公司 | 实现数据库宕机情况下网站服务恢复的系统及方法 |
CN105718455A (zh) * | 2014-12-01 | 2016-06-29 | 阿里巴巴集团控股有限公司 | 一种数据查询方法及装置 |
WO2017050014A1 (zh) * | 2015-09-21 | 2017-03-30 | 北京奇虎科技有限公司 | 一种数据存储处理方法和装置 |
CN105335512A (zh) * | 2015-10-30 | 2016-02-17 | 小米科技有限责任公司 | 数据查询方法及装置 |
CN108874806A (zh) * | 2017-05-09 | 2018-11-23 | 广东神马搜索科技有限公司 | 数据查询方法、装置及数据存储系统 |
CN109684358A (zh) * | 2017-10-18 | 2019-04-26 | 北京京东尚科信息技术有限公司 | 数据查询的方法和装置 |
CN109669960A (zh) * | 2018-12-25 | 2019-04-23 | 钛马信息网络技术有限公司 | 在微服务中通过多级缓存避免缓存雪崩的系统及方法 |
CN110162543A (zh) * | 2019-05-29 | 2019-08-23 | 北京奇艺世纪科技有限公司 | 一种信息查询方法及装置 |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112835930A (zh) * | 2021-03-03 | 2021-05-25 | 上海渠杰信息科技有限公司 | 一种数据库的查询方法及设备 |
CN112860960A (zh) * | 2021-03-15 | 2021-05-28 | 北京达佳互联信息技术有限公司 | 数据查询方法及装置 |
CN112860960B (zh) * | 2021-03-15 | 2024-02-23 | 北京达佳互联信息技术有限公司 | 数据查询方法及装置 |
CN113672640A (zh) * | 2021-06-28 | 2021-11-19 | 深圳云之家网络有限公司 | 数据查询方法、装置、计算机设备和存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN108810006B (zh) | 资源访问方法、装置、设备及存储介质 | |
CN110837521A (zh) | 数据查询方法、装置和服务器 | |
CN108897628B (zh) | 一种分布式锁的实现方法、装置及电子设备 | |
CN108881120B (zh) | 一种基于区块链的数据处理方法及设备 | |
US20190340166A1 (en) | Conflict resolution for multi-master distributed databases | |
US9778998B2 (en) | Data restoration method and system | |
US8639890B2 (en) | Data segment version numbers in distributed shared memory | |
US11385830B2 (en) | Data storage method, apparatus and system, and server, control node and medium | |
US20140081927A1 (en) | Data node fencing in a distributed file system | |
CN112052264B (zh) | 业务数据查询方法、装置、电子设备及可读存储介质 | |
CN112615907A (zh) | 一种数据同步系统及方法 | |
CN111240892A (zh) | 数据备份方法及装置 | |
CN114625767A (zh) | 一种数据查询方法、装置、设备及可读介质 | |
EP3522040A1 (en) | Method and device for file storage | |
EP2416526B1 (en) | Task switching method, server node and cluster system | |
CN108846085B (zh) | 一种id生成方法、装置、电子设备及系统 | |
CN110297822A (zh) | 面向区块链的密钥管理方法、装置、设备及存储介质 | |
CN104052720A (zh) | 信息验证方法及系统 | |
CN106254373B (zh) | 数字证书同步方法、数字签名服务器及数字证书同步系统 | |
CN110955460A (zh) | 一种服务进程启动方法、装置、电子设备和存储介质 | |
CN115310974A (zh) | 一种跨链交易的处理方法、计算机设备及介质 | |
US11940976B2 (en) | Technique for concurrency control | |
CN113742050B (zh) | 操作数据对象的方法、装置、计算设备和存储介质 | |
US7337252B2 (en) | System and method for resolving conflicts of re-locking resources | |
CN114036164A (zh) | 一种乐观锁和悲观锁组合的高并发交易加锁方法及系统 |
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 | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20200225 |
|
RJ01 | Rejection of invention patent application after publication |