本发明涉及数据处理技术领域,尤其涉及一种数据读取方法、装置、计算机设备及计算机可读存储介质。
背景技术
系统在处理业务的时候,一般是通过设计的接口调用sql(structuredquerylanguage,结构化查询语言)语句查询系统的关系型数据库获取所需数据,在业务高并发的情况下,这无疑会增加数据库的压力,导致sql语句长时间等待阻塞,从而导致接口请求超时,用户无法正常使用系统。
业内通常的做法是引入内存数据库,例如redis、ignite数据库等,以保存关系型数据库中的所有数据,每次接口直接访问内存数据库来获取数据局而不是关系型数据库,建立内存数据库可以大大提高系统对接口的响应效率,提高系统的并发能力,但随着业务量增长,单靠内存数据库这一层缓存已很难保证系统的在极端情况的还能提供稳定服务,因此衍生出通过牺牲部分内存增加本地缓存进一步备份数据以应对日益增加的业务量。然而,增加本地缓存后,每次请求数据都先从本地缓存开始,对于那些更新频率高的数据的不断访问,会对本地缓存造成一定的风险,例如导致本地缓存被击穿,最终系统不可用。
技术实现要素:
本发明实施例提供了一种数据读取方法、装置、计算机设备及计算机可读存储介质,以提高处理数据读取的效率。
第一方面,本发明实施例提供了一种数据读取方法,该方法包括:
将关系型数据库中的第一类数据备份至内存数据库,将关系型数据库中的非第一类数据备份至本地缓存及内存数据库;
若接收到接口请求数据的请求指令,判断所述接口是否为第一类型接口;
若所述接口是第一类型接口,控制所述接口从所述内存数据库中读取所需的数据;
若所述接口不是第一类型接口,控制所述接口从所述本地缓存中读取所需的数据。
第二方面,本发明实施例还提供了一种数据读取装置,所述数据读取装置包括用于实现第一方面所述的数据读取方法的单元。
第三方面,本发明实施例还提供了一种计算机设备,包括存储器,以及与所述存储器相连的处理器;
所述存储器用于存储实现数据读取方法的计算机程序;
所述处理器用于运行所述存储器中存储的计算机程序,以执行如上述第一方面所述的方法。
第四方面,本发明实施例提供了计算机可读存储介质,所述计算机可读存储介质存储有一个或者一个以上计算机程序,所述一个或者一个以上计算机程序可被一个或者一个以上的处理器执行,以实现上述第一方面所述的方法。
本发明提供的数据读取方法、装置、计算机设备及计算机可读存储介质,接口在读取数据时,不直接访问关系型数据库来查找数据,而是根据接口的类型从本地缓存或内存数据库查找数据,从而缓冲数据库的压力,提高系统的并发力;另外,第一类型接口用来访问第一类数据,第一类数据为更新频率高的数据,而对于第一类数据,因不备份到本地缓存中,当第一类型接口需要读取这些数据时,直接访问内存数据库而非内存数据库查找数据,避免了因频率过高地访问本地缓存而造成本地缓存被击穿,从而导致系统不可用的情况。
附图说明
为了更清楚地说明本发明实施例技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本发明实施例提供的一种数据读取方法的流程示意图;
图2是本发明实施例提供的一种数据读取方法的另一流程示意图;
图3是本发明实施例提供的一种数据读取方法的另一流程示意图;
图4是本发明实施例提供的一种数据读取装置的示意性框图;
图5是本发明实施例提供的一种数据读取装置的另一示意性框图;
图6是本发明实施例提供的一种计算机设备的结构示意性框图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
应当理解,当在本说明书和所附权利要求书中使用时,术语“包括”和“包含”指示所描述特征、整体、步骤、操作、元素和/或组件的存在,但并不排除一个或多个其它特征、整体、步骤、操作、元素、组件和/或其集合的存在或添加。
还应当理解,在本发明说明书和所附权利要求书中使用的术语“和/或”是指相关联列出的项中的一个或多个的任何组合以及所有可能组合,并且包括这些组合。
也应当理解,尽管术语第一、第二等可以在此用来描述各种元素,但这些元素不应该受限于这些术语,这些术语仅用来将这些元素彼此区分开。
图1为本发明实施例提供的一种数据读取方法的流程示意图。该方法包括步骤s101~s104。
s101,将关系型数据库中的第一类数据备份至内存数据库,将关系型数据库中的非第一类数据备份至本地缓存及内存数据库。
每一个系统内部都会有自身的关系型数据库以存储数据,例如oracle、db2、mysql等。系统的关系型数据库往往需要设置多个接口来对接不同的业务,当系统的业务量增加到高量级水平,如果每个接口直接访问其关系型数据库,会给关系型数据库带来很大的压力,并且也会导致系统对接口的响应效率低下。
本发明实施例通过设置数据的多级存储来缓解关系型数据库的压力,将不同业务需求的数据进行分类,针对不同类型的数据采用不同的存储策略。将数据分为两大类,一类为第一类数据,另一类为非第一类数据。针对不同的业务需求,系统产生的数据有些更新频率非常快,有些更新频率比较慢,因此,可根据数据的更新频率或更新周期将数据分为第一类数据和非第一类数据,第一类数据为更新频繁高的数据,即更新周期非常短的数据,例如将更新周期在一个小时之内的数据归为第一类数据,将第一类数据以外的数据定义为非第一类数据。
首先,系统的全部数据会存储在关系型数据库中,同时将这些数据进行归类,将第一类数据备份至内存数据库,将非第一类数据备份至本地缓存及内存数据库,后续根据需要的数据的类型对本地缓存或内存数据库进行数据访问,以降低关系型数据库的接口访问压力。
s102,若接收到接口请求数据的请求指令,判断所述接口是否为第一类型接口,若是,执行步骤s103,否执行步骤s104。
开发人员在设计接口时,预设设置好接口的功能,确定其可用于哪些业务需求。例如,设计一些第一类型接口用于访问那些变更频繁的数据,诸如第一类数据;还可以设计另一些非第一类型接口用于访问那些变更不那么频繁的数据,诸如第二类数据。当用户通过这些接口进行对应的业务请求,通过接口获取业务数据时,可以直接根据接口的类型访问对应的本地缓存或内存数据库。
s103,控制所述接口从所述内存数据库中读取所需的数据。
第一类型接口是用来获取第一类数据的,第一类数据保存的最近一级的数据库为内存数据库,当第一类型接口请求数据时直接访问本地缓存以获取数据。
s104,控制所述接口从所述本地缓存中读取所需的数据。
非第一类型接口是用来获取非第一类数据的,非第一类数据保存的最近一级的数据库为本地缓存,若所述接口不是第一类型接口,即非第一类型接口请求数据时,直接访问本地缓存以获取数据。
本发明实施例的数据读取方法,接口在读取数据时,不直接访问关系型数据库来查找数据,而是通过本地缓存或内存数据库来查找数据,从而缓冲数据库的压力。而对于那些更新比较频繁的第一类数据,如果每次数据更新都将关系数据库中更新的数据备份到本地缓存,需要不断地加载数据更新本地缓存,接口也需要不断访问本地缓存来读取数据,过多访问本地缓存会导致本地缓存被击穿,致使系统发生故障,因此,对于那些更新频繁的第一类数据,不备份到本地缓存中,当第一类型的接口需要读取第一类数据时,直接访问内存数据库查找数据,以防因过多访问本地缓存而导致本地缓存被击穿,进而导致系统不可用。
在一发明实施例中,如图2所示,步骤s103之后还包括以下步骤:
s105,若所述接口未能从所述内存数据库中读取到所需的数据,控制所述接口从所述关系型数据库中读取所需的数据。
s106,将所述接口从所述关系型数据库中读取到的所需的数据进行备份,并将备份的数据保存至所述内存数据库。
针对第一类型接口对第一类数据的请求,直接访问内存数据库,从内存数据库中读取需要的数据,如果由于某种原因数据备份到内存数据库失败,那么接口在内存数据库中将无法读取到所需的数据,此时向更高一级的关系型数据库中读取,再将从关系型数据库中读取到的数据备份至内存数据库,以便下一次访问该数据时可以直接从内存数据库中查找到。
针对第一类数据,采用将该第一类数据存储在内存数据库以及关系型数据库的二级存储策略,以及采用优先访问顺序为内存数据库>关系型数据库的访问策略,以实现系统的高可用性。
步骤s104之后还包括以下步骤:
s107,若所述接口未能从所述本地缓存中读取到所需的数据,控制所述接口从所述内存数据库中读取所需的数据。
s108,若所述接口从所述内存数据库中读取到所需的数据,备份所述数据,并将备份的所述数据保存至所述本地缓存。
针对非第一类型接口对第一类数据的请求,直接访问本地缓存,如果由于某种原因数据备份到本地缓存失败,那么接口从本地缓存中无法获取数据,访问更高一级的内存数据库,从内存数据库中读取需要的数据,如果在内存数据库中读取到所需的数据,将读取到的数据备份至本地缓存,以便下一次访问该数据时可以直接从本地缓存中读取到。
s109,若所述接口未能从所述内存数据库中读取到所需的数据,控制所述接口从所述关系型数据库中读取所需的数据。
s110,将所述接口从所述关系型数据库中读取到的所需的数据进行备份,并将备份的数据保存至所述内存数据库和本地缓存。
同理,如果在内存数据库中无法读取到所需的数据,则向最高级的关系型数据库中读取,再将从关系型数据库中读取到的数据备份至内存数据库,以避免下一次访问该数据时,因本地缓存出错而同时无法在本地缓存以及内存数据库均读取到数据的情况。
针对非第一类数据,采用将该非第一类数据存储在本地缓存、内存数据库以及关系型数据库的三级存储策略,以及采用优先访问顺序为本地缓存>内存数据库>关系型数据库的访问策略,以实现系统的高并发力。
本发明实施例的数据读取方法,依据数据的类型进行多级存储,根据接口的类型进行对不同的数据库进行优先访问,以提高系统的高并发力和高可用性。
图3为本发明实施例提供的一种数据读取方法的另一流程示意图。该方法包括步骤s201~s208。
在本发明实施例中,非第一类数据包括第二类数据,所述第二类数据的更新周期大于一小时以及小于一个月,即将在一小时(不包括一个小时)至一个月内发生更新的数据归为第二类数据。另外,除这种更新不那么频繁的数据外,非第一类数据还可以包括那些更新周期大于一个月的数据。
s201,将关系型数据库中的第一类数据备份至内存数据库,将关系型数据库中的非第一类数据备份至本地缓存及内存数据库。
s202,若所述关系型数据库的数据发生更新,判断更新的数据为哪一类数据。
s203,若所述更新的数据为第二类数据,发出数据更新消息。
s204,根据所述数据更新消息将所述更新的数据备份至所述本地缓存以及所述内存数据库。
关系型数据库的数据不是一成不变的,因此当其数据发生更新时,还需要将更新的数据根据数据类型将数据备份至本地缓存或内存数据库中,对于第二类数据,其更新周期虽不长,但也不至于更新太频繁,通过推送更新消息来提示本地缓存以及所述内存数据库需要进行数据更新,当有推送更新消息时,用更新的数据替换原来对应的数据,因此防止本地缓存以及所述内存数据库的数据过时而接口获取数据错误。
s205,若所述更新的数据为第一类数据,将所述更新的数据备份至所述内存数据库。
而对于第一类数据,因其更新周期非常短,不适合通过推送更新消息的方式来更新数据,因更新频繁,如果每次更新都推送消息,反而会导致系统的性能下降,因为处理推送消息也会消耗系统的服务器能力,因此一旦数据发生更新,直接将所述更新的数据备份至所述内存数据库,以防止内存数据库的数据过时而接口获取数据错误。
开发人员还可以在本地缓存、内存数据库以及关系型数据库中设置第二类数据的过期时间,在内存数据库以及关系型数据库中设置第一类数据以及第二类数据的过期时间,当达到过期时间自动清理过期数据,以防过期数据占据内存。
s206,若接收到接口请求数据的请求指令,判断所述接口是否为第一类型接口。
s207,若所述接口是第一类型接口,控制所述接口从所述内存数据库中读取所需的数据。
s208,若所述接口不是第一类型接口,控制所述接口从所述本地缓存中读取所需的数据。
本发明实施例的步骤2101、步骤s206-s208与上一实施例的步骤s101-s104完全相同,本发明实施例对步骤2101、步骤s206-s208不做赘述。
本发明实施例根据更新的数据的类型对更新的数据进行备份,以防数据过时而接口获取数据失败。
图4为本发明实施例提供的一种数据读取装置100的示意性框图。该数据读取装置100包括备份单元101、第一判断单元102、第一控制单元103以及第二控制单元104。
备份单元101用于将关系型数据库中的第一类数据备份至内存数据库,将关系型数据库中的非第一类数据备份至本地缓存及内存数据库。
第一判断单元102用于若接收到接口请求数据的请求指令,判断所述接口是否为第一类型接口。
第一控制单元103用于若所述接口是第一类型接口,控制所述接口从所述内存数据库中读取所需的数据。
第二控制单元104用于若所述接口不是第一类型接口,控制所述接口从所述本地缓存中读取所需的数据。
在另一发明实施例中,所述第一控制单元103还用于:若所述接口未能从所述内存数据库中读取到所需的数据,控制所述接口从所述关系型数据库中读取所需的数据。
在该另一发明实施例中,所述备份单元101还用于:将所述接口从所述关系型数据库中读取到的所需的数据进行备份,并将备份的数据保存至所述内存数据库。
在其他一发明实施例中,所述第二控制单元104还用于:若所述接口未能从所述本地缓存中读取到所需的数据,控制所述接口从所述内存数据库中读取所需的数据;
在该其他一发明实施例中,所述备份单元101还用于:若所述接口从所述内存数据库中读取到所需的数据,备份所述数据,并将备份的所述数据保存至所述本地缓存;
在该其他一发明实施例中,所述第二控制单元104还用于:若所述接口未能从所述内存数据库中读取到所需的数据,控制所述接口从所述关系型数据库中读取所需的数据;
在该其他一发明实施例中,所述备份单元101还用于:将所述接口从所述关系型数据库中读取到的所需的数据进行备份,并将备份的数据保存至所述内存数据库和本地缓存。
上述数据读取装置100与本发明的第一个方法实施例相对应,对各个单元的具体描述以及本发明实施例未详尽之处可参考该方法实施例,此处不做赘述。
在另一实施例中,如图5所示,所述数据读取装置100还包括以下单元:
第二判断单元105,用于若所述关系型数据库的数据发生更新,判断更新的数据为哪一类数据。
发送单元106,用于若所述更新的数据为第二类数据,发出数据更新消息。
所述备份单元101还用于:根据所述数据更新消息将所述更新的数据备份至所述本地缓存以及所述内存数据库。
所述备份单元101还用于:若所述更新的数据为第一类数据,将所述更新的数据备份至所述内存数据库。
上述数据读取装置100与本发明的第二个方法实施例相对应,对各个单元的具体描述以及本发明实施例未详尽之处可参考该方法实施例,此处不做赘述。
上述数据读取装置100可以实现为一种计算机程序的形式,计算机程序可以在如图6所示的计算机设备上运行。
图6为本发明实施例提供的一种计算机设备200的结构示意性框图。该计算机设备200,可以是终端,也可以是服务器,其中,终端可以是智能手机、平板电脑、笔记本电脑、台式电脑等具有通信功能的电子设备。服务器可以是独立的服务器,也可以是多个服务器组成的服务器集群。
该计算机设备200,包括通过系统总线201连接的处理器202、存储器和网络接口205,其中,存储器可以包括非易失性存储介质203和内存储器204。
该计算机设备200的非易失性存储介质203可存储操作系统2031和计算机程序2032,该计算机程序2032被执行时,可使得处理器202执行一种数据读取方法。该内存储器204为非易失性存储介质203中的计算机程序2032的运行提供环境。该计算机设备200的处理器202用于提供计算和控制能力,支撑整个计算机设备200的运行。计算机设备200的网络接口205用于进行网络通信,如发送分配的任务、接收数据等。
处理器202运行非易失性存储介质203中的计算机程序2032,执行如下操作:
将关系型数据库中的第一类数据备份至内存数据库,将关系型数据库中的非第一类数据备份至本地缓存及内存数据库;若接收到接口请求数据的请求指令,判断所述接口是否为第一类型接口;若所述接口是第一类型接口,控制所述接口从所述内存数据库中读取所需的数据;若所述接口不是第一类型接口,控制所述接口从所述本地缓存中读取所需的数据。
在一实施例中,所述处理器202在执行控制所述接口从所述内存数据库中读取所需的数据的步骤之后,还执行如下操作:
若所述接口未能从所述内存数据库中读取到所需的数据,控制所述接口从所述关系型数据库中读取所需的数据;将所述接口从所述关系型数据库中读取到的所需的数据进行备份,并将备份的数据保存至所述内存数据库。
在一实施例中,所述处理器202在执行所述控制所述接口从所述本地缓存中读取所需的数据的步骤之后,还执行如下操作:
若所述接口未能从所述本地缓存中读取到所需的数据,控制所述接口从所述内存数据库中读取所需的数据;若所述接口从所述内存数据库中读取到所需的数据,备份所述数据,并将备份的所述数据保存至所述本地缓存;若所述接口未能从所述内存数据库中读取到所需的数据,控制所述接口从所述关系型数据库中读取所需的数据;将所述接口从所述关系型数据库中读取到的所需的数据进行备份,并将备份的数据保存至所述内存数据库和本地缓存。
在一实施例中,所述非第一类数据包括第二类数据。所述处理器202在执行将关系型数据库中的第一类数据备份至内存数据库,将关系型数据库中的非第一类数据备份至本地缓存及内存数据库的步骤之后,还执行以下操作:
若所述关系型数据库的数据发生更新,判断更新的数据为哪一类数据;若所述更新的数据为第二类数据,发出数据更新消息;根据所述数据更新消息将所述更新的数据备份至所述本地缓存以及所述内存数据库;若所述更新的数据为第一类数据,将所述更新的数据备份至所述内存数据库。
本领域技术人员可以理解,图6中示出的计算机设备的实施例并不构成对计算机设备具体构成的限定,在其他实施例中,计算机设备可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件布置。例如,在一些实施例中,计算机设备可以仅包括存储器及处理器,在这样的实施例中,存储器及处理器的结构及功能与图6所示实施例一致,在此不再赘述。
本发明还提供一种计算机可读存储介质,所述计算机可读存储介质存储有一个或者一个以上计算机程序,所述一个或者一个以上计算机程序可被一个或者一个以上的处理器执行,以实现以下步骤:
将关系型数据库中的第一类数据备份至内存数据库,将关系型数据库中的非第一类数据备份至本地缓存及内存数据库;若接收到接口请求数据的请求指令,判断所述接口是否为第一类型接口;若所述接口是第一类型接口,控制所述接口从所述内存数据库中读取所需的数据;若所述接口不是第一类型接口,控制所述接口从所述本地缓存中读取所需的数据。
在一实施例中,所述控制所述接口从所述内存数据库中读取所需的数据的步骤之后,还包括以下步骤:
若所述接口未能从所述内存数据库中读取到所需的数据,控制所述接口从所述关系型数据库中读取所需的数据;将所述接口从所述关系型数据库中读取到的所需的数据进行备份,并将备份的数据保存至所述内存数据库。
在一实施例中,所述控制所述接口从所述本地缓存中读取所需的数据的步骤之后,还包括以下步骤:
若所述接口未能从所述本地缓存中读取到所需的数据,控制所述接口从所述内存数据库中读取所需的数据;若所述接口从所述内存数据库中读取到所需的数据,备份所述数据,并将备份的所述数据保存至所述本地缓存;若所述接口未能从所述内存数据库中读取到所需的数据,控制所述接口从所述关系型数据库中读取所需的数据;将所述接口从所述关系型数据库中读取到的所需的数据进行备份,并将备份的数据保存至所述内存数据库和本地缓存。
在一实施例中,所述非第一类数据包括第二类数据。所述将关系型数据库中的第一类数据备份至内存数据库,将关系型数据库中的非第一类数据备份至本地缓存及内存数据库的步骤之后,还包括以下步骤:
若所述关系型数据库的数据发生更新,判断更新的数据为哪一类数据;若所述更新的数据为第二类数据,发出数据更新消息;根据所述数据更新消息将所述更新的数据备份至所述本地缓存以及所述内存数据库;若所述更新的数据为第一类数据,将所述更新的数据备份至所述内存数据库。
所述计算机可读存储介质可以是前述设备的内部存储单元,例如设备的硬盘或内存。所述计算机可读存储介质也可以是所述设备的外部存储设备,例如所述设备上配备的插接式硬盘,智能存储卡(smartmediacard,smc),安全数字(securedigital,sd)卡,闪存卡(flashcard)等。进一步地,所述计算机可读存储介质还可以既包括所述设备的内部存储单元也包括外部存储设备。
所属领域的技术人员可以清楚地了解到,为了描述的方便和简洁,上述描述的设备、装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、计算机软件或者二者的结合来实现,为了清楚地说明硬件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各示例的组成及步骤。这些功能究竟以硬件还是软件方式来执行取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。
在本申请所提供的几个实施例中,应该理解到,所揭露的设备、装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,也可以将具有相同功能的单元集合成一个单元,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另外,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口、装置或单元的间接耦合或通信连接,也可以是电的,机械的或其它的形式连接。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本发明实施例方案的目的。
另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以是两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分,或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:u盘、移动硬盘、只读存储器(rom,read-onlymemory)、磁碟或者光盘等各种可以存储程序代码的介质。
以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到各种等效的修改或替换,这些修改或替换都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以权利要求的保护范围为准。