CN113065084B - 数据加载方法、装置、计算机设备和存储介质 - Google Patents
数据加载方法、装置、计算机设备和存储介质 Download PDFInfo
- Publication number
- CN113065084B CN113065084B CN202110249090.8A CN202110249090A CN113065084B CN 113065084 B CN113065084 B CN 113065084B CN 202110249090 A CN202110249090 A CN 202110249090A CN 113065084 B CN113065084 B CN 113065084B
- Authority
- CN
- China
- Prior art keywords
- sub
- data
- loading
- loaded
- information
- 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.)
- Active
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/90—Details of database functions independent of the retrieved data types
- G06F16/95—Retrieval from the web
- G06F16/957—Browsing optimisation, e.g. caching or content distillation
- G06F16/9574—Browsing optimisation, e.g. caching or content distillation of access to content, e.g. by caching
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/445—Program loading or initiating
- G06F9/44521—Dynamic linking or loading; Link editing at or after load time, e.g. Java class loading
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5027—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
- G06F9/5038—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals considering the execution order of a plurality of tasks, e.g. taking priority or time dependency constraints into consideration
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Databases & Information Systems (AREA)
- Data Mining & Analysis (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本申请涉及一种数据加载方法、装置、计算机设备和存储介质。所述方法包括:获取待加载数据的分库分表标识,根据分库分表标识确定数据库中待加载数据的分表;以分表作为维度,将待加载数据的各分表的表信息放入任务队列;将与待加载数据的分表的数量相对应数量的加载请求推送至服务器集群监听的消息队列,以使得服务器集群中的任意一个服务器在监听到任意一个加载请求时,从任务队列获取一个表信息,将获取到的表信息对应的目标分表中的数据加载至缓存。采用本方法能够在全量缓存数据加载时提高服务器集群中各服务器压力分配的均衡性,从而提高服务器硬件资源的利用率。
Description
技术领域
本申请涉及数据处理技术领域,特别是涉及一种数据加载方法、装置、计算机设备和存储介质。
背景技术
随着数据处理技术的发展,出现了数据的缓存技术,缓存技术的原理是当服务器系统需要读取一个数据时,首先从服务器的缓存中查找,如果找到,则立即读取,如果没有找到,就用相对慢的速度从数据库或者其他区域读取数据,因此,缓存的命中率很大程度上影响着系统的性能。
但是,例如在电商等行业,对于某些类型的数据,可能所有数据在某个时间点都属于热点数据,需要对该类型的所有数据进行全量缓存才能满足系统的性能要求。传统的缓存方法,一般在数据量较小时才会进行全量缓存,当需要进行加载的数据量较大时,全量缓存会导致集群中各应用服务器的压力分布不均匀,从而导致服务器硬件资源的浪费。
发明内容
基于此,有必要针对上述技术问题,提供一种能够在全量缓存数据加载的场景下提高集群中各服务器压力分布均衡性的数据加载方法、装置、计算机设备和存储介质。
一种数据加载方法,上述方法包括:
获取待加载数据的分库分表标识,根据分库分表标识确定数据库中待加载数据的分表;
以分表作为维度,将待加载数据的各分表的表信息放入任务队列;
将与待加载数据的分表的数量相对应数量的加载请求推送至服务器集群监听的消息队列,以使得服务器集群中的任意一个服务器在监听到任意一个加载请求时,从任务队列获取一个表信息,将获取到的表信息对应的目标分表中的数据加载至缓存。
在一个实施例中,将待加载数据的各分表的表信息放入任务队列,包括:逐轮从分库分表标识对应的各分库中分别筛选出相同数量的分表;将筛选出的分表的表信息按照筛选顺序依次放入任务队列。
在一个实施例中,逐轮从分库分表标识对应的各分库中分别筛选出相同数量的分表,包括:在当前筛选轮次,分别从分库分表标识对应的各分库按照分库排序依次筛选出相同数量的分表;在当前筛选轮次不是最后筛选轮次时,进行下一筛选轮次的分别从分库分表标识对应的各分库按照分库排序依次筛选出相同数量的分表。
在一个实施例中,上述方法还包括:获取待加载数据的各分表的加载方式信息;将第一类型分表的加载状态修改为等待加载状态,第一类型分表为根据加载方式信息确定的采用断点续传的加载方式且未完成加载的分表;删除断点续传缓存中第二类型分表的数据,第二类型分表为根据加载方式信息确定的采用从头加载的加载方式的分表。
在一个实施例中,在从任务队列获取一个表信息之前,上述方法还包括:从监听到的加载请求中提取被请求服务器集群的标识信息;在被请求服务器集群的标识信息与服务器集群的标识信息相匹配时,进入从任务队列获取一个表信息的步骤。
在一个实施例中,在将获取到的表信息对应的目标分表中的数据加载至缓存之前,上述方法还包括:确定目标分表所在分库的当前并发量;在当前并发量小于预设的并发阈值时,进入将获取到的表信息对应的目标分表中的数据加载至缓存的步骤;在当前并发量大于预设的并发阈值时,将获取到的表信息放回任务队列的队尾。
在一个实施例中,将获取到的表信息对应的目标分表中的数据加载至缓存,包括:在目标分表为第一类型分表时,从目标分表的首位数据开始进行全量加载;在目标分表为第二类型分表时,获取目标分表的历史加载信息,从历史加载信息记录的上一次加载中断时加载到的数据开始对目标分表进行加载。
在一个实施例中,上述方法还包括:当数据加载操作中断时,记录未完成加载的各分表的加载信息,将未完成加载的各分表的加载信息存入断点续传缓存。
在一个实施例中,上述方法还包括:根据加载请求的数量对服务器集群中的服务器进行扩容或缩容调整。
一种数据加载装置,上述装置包括:
分表确定模块,用于获取待加载数据的分库分表标识,根据分库分表标识确定数据库中待加载数据的分表;
任务放入模块,用于以分表作为维度,将待加载数据的各分表的表信息放入任务队列;
请求推送模块,用于将与待加载数据的分表的数量相对应数量的加载请求推送至服务器集群监听的消息队列,以使得服务器集群中的任意一个服务器在监听到任意一个加载请求时,从任务队列获取一个表信息,将获取到的表信息对应的目标分表中的数据加载至缓存。
一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现上述的数据加载方法的步骤。
一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现上述的数据加载方法的步骤。
上述数据加载方法、装置、计算机设备和存储介质,通过确定待加载数据在数据库中对应的表分,以分表作为维度将各分表的表信息塞入任务队列,并推送与分表数量对应数量的加载请求到消息队列,当集群中的各服务器从消息队列中监听到加载请求时,可以从任务队列中获取表信息并根据表信息将对应分表中的数据加载至缓存,因此,集群中的各服务器不会完全承担全量数据的加载压力,而是以分表作为维度各自承担一部分数据加载压力,从而提高了集群中各服务器压力分配的均衡性,提高了整个系统硬件资源的利用率。
附图说明
图1为一个实施例中数据加载方法的应用环境图;
图2为一个实施例中数据加载方法的流程示意图;
图3为一个应用实例中主机房的整体构架示意图;
图4为一个应用实例中子机房的整体构架示意图;
图5为一个应用实例中全量缓存数据加载方法的后台消息推送方的流程示意图;
图6为一个应用实例中全量缓存数据加载方法的后台消息监听方的流程示意图;
图7为一个应用实例中校准缓存和数据库中数据一致性的流程示意图;
图8为一个实施例中数据加载装置的结构框图;
图9为一个实施例中计算机设备的内部结构图。
具体实施方式
为了使本申请的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本申请进行进一步详细说明。应当理解,此处描述的具体实施例仅用以解释本申请,并不用于限定本申请。
可以理解,本申请所使用的术语“和/或”,描述关联对象的关联关系,表示可以存在三种关系,例如,A和/或B,可以表示:单独存在A,同时存在A和B,单独存在B这三种情况。字符“/”一般表示前后关联对象是一种“或者”的关系。
本申请提供的数据加载方法,可以应用于如图1所示的应用环境中。当前服务器102获取待加载数据的分库分表标识,根据分库分表标识确定数据库中待加载数据的分表,以分表作为维度,将待加载数据的各分表的表信息放入任务队列,将与待加载数据的分表的数量相对应数量的加载请求推送至服务器集群104监听的消息队列106,以使得服务器集群104中的任意一个服务器在监听到任意一个加载请求时,从任务队列106中获取一个表信息,将获取到的表信息对应的分表中的数据加载至缓存。
其中,当前服务器102可以用独立的服务器或者是多个服务器组成的服务器集群来实现,当前服务器102也可以由服务器集群104中的任意一台或多台服务器实现。
在一个实施例中,如图2所示,提供了一种数据加载方法,以该方法应用于图1中的当前服务器为例进行说明,包括以下步骤:
步骤S202:获取待加载数据的分库分表标识,根据分库分表标识确定数据库中待加载数据的分表。
其中,待加载数据指的是需要加载至缓存的某类型业务所对应的全量数据。待加载数据可以由用户通过加载客户端指定。分库分表是指将原来独立的数据库拆分成若干分库,将数据大表拆分成若干分表,使得单一数据库、单一数据表的数据量变小,从而达到提升数据库性能的目的。分库分表信息可以包括分库号信息和分表号信息等。
具体地,当前服务器可以根据用户指定的业务类型,将该业务类型对应的全量数据作为待加载数据,获取待加载数据的分库分表信息,根据分库分表信息可以确定出待加载数据在数据库中对应的所有数据库分库以及在各分库中对应的所有数据表分表。
步骤S204:以分表作为维度,将待加载数据的各分表的表信息放入任务队列。
其中,表信息为描述数据表分表特征的信息,能够指示服务器从数据库中查询或定位到对应的分表,例如,表信息可以包括分库号、分表号或分表名称等信息。任务队列指的是用来暂时存放任务的组件,可以是redis队列。
具体地,当前服务器可以以单个的分表作为独立维度,把待加载数据的各个分表的表信息依次放入任务队列,例如,可以按照各分表的分表号顺序放入,也可以按照用户自定义的顺序放入等。
步骤S206:将与待加载数据的分表的数量相对应数量的加载请求推送至服务器集群监听的消息队列,以使得服务器集群中的任意一个服务器在监听到任意一个加载请求时,从任务队列获取一个表信息,将获取到的表信息对应的目标分表中的数据加载至缓存。
其中,消息队列指的是在消息的传输过程中保存消息的容器。目标分表指的是与服务器集群中的服务器获取到的表信息所对应的分表。
具体地,当前服务器根据待加载数据的分表的数量生成相对应数量的加载请求,将加载请求封装成消息后,将消息推送至消息队列,封装的消息的数量与分表的数量相同。服务器集群中的各服务器对该消息队列进行监听,当集群中的任意一台服务器监听到任意一个加载请求时,可以依据任务队列的信息调取机制从任务队列中获取一个表信息,例如,可以从任务队列的队首顺序获取一个表信息,根据获取到的表信息从数据库中定位对应的分表作为目标分表,并将目标分表中所存储的数据加载至缓存。其中,根据各加载请求封装成的消息中还可以进一步包含加载方式信息、用户指定的被请求服务器集群的标识信息等。
上述数据加载方法,通过确定待加载数据在数据库中对应的数据表的表分,以分表作为维度将各分表的表信息塞入任务队列,并推送与分表数量对应数量的加载请求到消息队列,当集群中的任意一台服务器从消息队列中监听到任意一个加载请求时,可以从任务队列中获取一个表信息并根据表信息将对应分表中的数据加载至缓存,因此,集群中的各服务器不会完全承担全量数据的加载压力,而是以分表的维度各自承担一部分数据加载的压力,从而提高了集群中各服务器压力分配的均衡性,提高了整个系统硬件资源的利用率。
在一个实施例中,将待加载数据的各分表的表信息放入任务队列,包括:逐轮从分库分表标识对应的各分库中分别筛选出相同数量的分表,将筛选出的分表的表信息按照筛选顺序依次放入任务队列。
在本实施例中,按照轮次每轮从分库分表标识对应的各分库中分别筛选出部分分表,每轮从各分库中筛选出的分表的数量相同,将筛选出的分表的表信息按照筛选顺序依次放入任务队列。优选的,可以从各分库中按照分表号的排序分别筛选出一张分表。
在一个实施例中,逐轮从分库分表标识对应的各分库中分别筛选出相同数量的分表,包括:在当前筛选轮次,分别从分库分表标识对应的各分库按照分库排序依次筛选出相同数量的分表;在当前筛选轮次不是最后筛选轮次时,进行下一筛选轮次的分别从分库分表标识对应的各分库按照分库排序依次筛选出相同数量的分表。其中,分库排序可以是依据分库号的排序,也可以是预设的任意排序等。
例如,可以第一轮筛选出0库1表,1库1表,2库1表直至N-1库1表(N为分库的数量),并按照筛选顺序,即按照0库1表,1库1表,2库1表……N-1库1表的顺序依次将各分库中1表的表信息塞入任务队列;第二轮筛选出0库2表,1库2表,2库2表直至N库2表,并按照筛选顺序依次将各分库中2表的表信息塞入任务队列,逐轮进行循环,直至最后一轮结束时,所有分库的所有分表的表信息都被放入了任务队列。
本实施例,通过逐轮将各分库筛选出的分表依次放入任务队列,并维持每轮次从各分库中分别筛选并放入任务队列的分表的数量相同,可以减轻单个分库承受的压力,提高数据库各分库压力分配的均衡性,从而提高数据加载的稳定性。
在一个实施例中,上述方法还包括:获取待加载数据的各分表的加载方式信息;将第一类型分表的加载状态修改为等待加载状态,第一类型分表为根据加载方式信息确定的采用断点续传的加载方式且未完成加载的分表;删除断点续传缓存中第二类型分表的数据,第二类型分表为根据加载方式信息确定的采用从头加载的加载方式的分表。
在本实施例中,用户可以指定待加载数据的各分表的加载方式,当前服务器获取被指定的待加载数据的各分表的加载方式信息,根据加载方式信息进行数据加载前的准备工作。更为具体地,当前服务器根据加载方式信息将采用断点续传的加载方式且未完成加载的分表作为第一类型分表,把第一类型分表的加载状态修改为等待加载状态,将采用从头加载的加载方式的分表作为第二类型分表,删除断点续传缓存中第二类型分表的缓存数据。
在实际应用场景中,若采用断点续传的加载方式,则上一次加载结束时未加载完的分表的加载状态可能是pause(暂停加载)、complete(完成加载)或fail(加载失败),由于在加载前会设置redis锁防止重复加载,判断是否结束加载任务并删除redis锁的条件是所有分表的加载状态均为pause、complete或fail,如果加载状态不进行重置,可能在加载并没有真正结束时redis锁就被删除了。因此,本实施例,通过在数据加载前将采用断点续传的加载方式的分表的加载状态重置为waiting(等待加载),可以提高数据加载的准确性,防止redis锁提前解除导致的数据加载遗漏。
另一方面,本实施例中的当前服务器还可以将采用从头加载的加载方式的分表在断点续传缓存中的数据删除,从而可以防止数据重复加载,进一步提高数据加载的准确性。
在一个实施例中,在从任务队列获取一个表信息之前,上述方法还包括:从监听到的加载请求中提取被请求服务器集群的标识信息;在被请求服务器集群的标识信息与服务器集群的标识信息相匹配时,进入从任务队列获取一个表信息的步骤。
在本实施例中,加载请求中包含被请求服务器集群的标识信息,例如,该标识信息可以是机房号等。被请求服务器集群是指被请求执行数据加载任务的服务器集群(机房)。具体地,用户可以根据需要指定执行任务的服务器集群,在监听到加载请求的服务器集群不是用户指定的服务器集群时,退出加载任务。本实施例,在同时存在多个服务器集群时,可以支持对执行任务的服务器集群的灵活选择或切换,可以根据实际资源情况控制和转移加载任务,从而提高数据加载的效率。
在一个实施例中,将获取到的表信息对应的目标分表中的数据加载至缓存之前,上述方法还包括:确定目标分表所在分库的当前并发量;在当前并发量小于预设的并发阈值时,进入将将获取到的表信息对应的目标分表中的数据加载至缓存的步骤;在当前并发量大于预设的并发阈值时,将获取到的表信息放回任务队列的队尾。
在本实施例中,集群中的服务器根据获取到的表信息确定该表信息对应的分库的当前并发量,根据当前并发量确定是否立即进入加载数据。在当前并发量大于预设的并发阈值时,进一步还可以根据系统当前资源情况,等待一定的时间后再将表信息放回任务队列。本实施例,通过监控分库的当前并发量,可以实现对各分库流量的控制,从而平衡各分库的并发量,控制单库压力,提高各分库压力分配的均衡性。
在一个实施例中,将获取到的表信息对应的目标分表中的数据加载至缓存,包括:在目标分表为第一类型分表时,从目标分表的首位数据开始进行全量加载;在目标分表为第二类型分表时,获取目标分表的历史加载信息,从历史加载信息记录的上一次加载中断时加载到的数据开始对目标分表进行加载。
本实施例,不仅支持对目标分表中的数据进行全量加载,也支持对目标分表中的数据进行断点续传,本实施例,可以根据目标分表对应采用的加载方式的不同,对目标分表中的数据进行相对应方式的加载。从而可以提高数据加载的灵活性和可控性,断点续传的加载方式可以根据历史加载信息进行数据续传,从而节省加载时间,提高加载速度。
在一个实施例中,上述方法还包括:当数据加载操作中断时,记录未完成加载的各分表的加载信息,将未完成加载的各分表的加载信息存入断点续传缓存。
本实施例,可以支持加载过程的暂停和恢复操作,通过记录数据加载操作中断时未完成加载的各分表的加载信息,当再次得到加载指令时,可以直接从断点续传缓存中调取上一次中断时记录的历史加载信息,根据记录完成续传,提高了数据加载的可控性和可查性,防止因异常中断带来的加载信息的丢失。
在一个实施例中,上述方法还包括:根据加载请求的数量对服务器集群中的服务器进行扩容或缩容调整。
本实施例,根据待加载数据的数据量,即生成的加载请求的数量,可以动态调整监听消息队列的服务器集群中服务器的容量。例如,当加载请求的数量较大时,可以对服务器进行扩容,以提高全量数据加载至缓存的速度,使系统性能快速满足业务要求;当加载请求的数量较小时,可以对服务器进行缩容,从而减少硬件资源浪费。
进一步地,上述方法还可以包括以下步骤:在数据加载完成时,判断数据加载前后已加载至缓存中的某业务类型的数据与数据库中该业务类型的数据是否一致,在两者中的数据不一致时,动态调整缓存中的数据,使缓存中的数据与数据库中的数据保持一致。例如,当数据库中的数据被删除时,也相应删除缓存中的数据,当数据库发生数据更新时,也相应更新缓存中的数据。
下面,结合一个应用实例,对本申请涉及的数据加载方法进行进一步地详细说明。参考图3至图4,图3示出了一个应用实例中主机房的整体构架示意图,图4示出了一个应用实例中子机房的整体构架示意图。基于上述的整体构架进行全量缓存数据加载方法的逻辑示意图如图5至图7所示。图5示出了全量缓存数据加载方法的后台消息推送方的流程示意图,图6示出了全量缓存数据加载方法的后台消息监听方的流程示意图。图7示出加载完成后校准缓存和数据库中数据一致性的流程示意图。具体地,对于全量缓存数据加载的逻辑说明如下:
1、后台可以通过页面选择需要加载的机房、需要加载的全量缓存类型、加载方式(从头加载或断点续传加载)。
2、设置redis锁以防止多次加载同一类型的业务数据。
3、判断通过页面选择的全量缓存的加载方式。
4、如果是从头加载,通过微服务框架删除断点续传redis缓存。
5、如果是断点续传加载,通过微服务框架将断点续传redis缓存中status设置为waiting。
6、根据被指定的需要进行全量缓存的业务数据的类型计算所有的分库分表的数量,并且以单表的维度顺序塞入redis任务队列,例如,塞入规则可以为:根据分库号以每次一张表的方式轮询塞入,即,第一轮中以第一次塞0库1表,第二次塞1库1表,第三次塞2库1表……第N次塞N-1库1表的顺序依次将表信息塞入任务队列;第二轮中以第一次塞0库2表,第二次塞1库2表,第三次塞2库2表……第N次塞N-1库1表的顺序依次将表信息塞入任务队列,以此循环,第n轮中以第一次塞0库n表,第二次塞1库n表,第三次塞2库n表……第N次塞N-1库n表的顺序依次将表信息塞入任务队列。可以减少单库压力,平衡加载过程中每个分库的压力。
7、根据业务数据的类型和分表的数量推送加载请求到消息队列。
8、后台应用监听到消息队列中的消息。
9、判断消息中的加载请求信息中是否包含当前应用所在的当前机房的标识信息。
10、如果加载请求信息中不包含当前应用所在的当前机房的标识信息,则直接退出。
11、如果加载请求信息中包含当前应用所在的当前机房的标识信息,则根据业务类型从该业务类型对应的redis任务队列获取一条表信息,判断该表信息对应的数据库分库的单库执行数量(断点续传的加载方式时可以断点续传中status为running的数量)是否达到并发阈值,若达到并发阈值,休眠1000ms后将表信息塞回redis任务队列队尾,重新推送加载请求到消息队列,如果没有达到并发阈值,可以分为两种情况:
从头开始的加载方式:根据表信息定位对应的待加载的分表,从该分表中的首位数据开始将该分表中的数据加载到redis集群,加载至redis集群前后都会查询一次数据库,比对数据库与缓存中的数据是否一致。其中,表信息可以包括数据类型、分库号、分表号、表名称等。
断点续传的加载方式:
1)、根据表信息获取redis断点续传缓存中对应的待加载分表的加载信息,更新该表status为running,记录starttime和执行ip,记录当前批次开始时间,从该分表断点续传id开始遍历数据:将数据库数据存入缓存value,将当前时间存入缓存加载时间loadTime字段,缓存key设置永不失效。
2)、查出起止id重新查询一遍数据(用于校准)。
3)、根据开始时间、起止id、数据的更新时间比较数据库与缓存中数据的差异,如果数据有减少则删除缓存中的数据,数据更新则更新缓存中的数据。
4)、更新加载信息,例如,更新断点续传缓存中的加载到的id位置为该批次最后一条id。
5)、判断该表是否遍历结束,如果该表遍历结束,则设置该表断点续传redis中status为complete,记录endTime和ip。如果该表未遍历结束,判断任务人工中断开关,如果任务人工中断开关打开,更新该表断点续传redis中status为pause,记录endTime和ip;如果任务人工中断开关关闭,循环开始下一批次id遍历。
6)、检查该缓存类型所有分库分表的断点续传status是否都为complete,如果该缓存类型所有分库分表断点续传status为complete,删除redis锁,退出该表全量加载;如果该缓存类型还有分库分表断点续传status不为complete,判断所有分库分表断点续传status是否还有waiting或running状态的数据。
7)、如果所有分库分表断点续传status都不是waiting或running状态则先删除redis锁后再退出该表全量缓存加载,否则直接退出该表全量缓存加载。
其中,断点续传的redis缓存数据结构(Hash结构)如下表所示,用于加载过程进度监控以及暂停恢复:
redis任务队列数据结构(构造有序任务队列,平均分担数据库压力)如下表所示:
上述应用实例所涉及的数据加载方法,具有如下特点:
1、全量缓存加载可以充分利用应用服务器资源,可以平均分摊应用服务器压力,并且可以通过对应用服务器扩容随时加快加载进度。
2、支持全量缓存加载过程状态的查询与控制、平均分摊数据库压力,以及通过单库并发阈值控制数据库压力。
采用上述的应用实例所涉及的数据加载方法前:1亿条数据的全量缓存加载需要30分钟,全量缓存加载时各个应用服务器和各个数据库压力不均,造成硬件资源浪费,无法使系统性能快速满足业务要求。
采用上述的应用实例所涉及的数据加载方法前:1亿条数据的全量缓存加载只需不到5分钟,全量缓存加载时各个应用服务器压力平均,各个数据库压力平均,并且可以通过扩容应用服务器加快加载进度,最大限度利用硬件资源,使系统性能快速满足业务要求。
应该理解的是,虽然图2、图5至图7的流程图中的各个步骤按照箭头的指示依次显示,但是这些步骤并不是必然按照箭头指示的顺序依次执行。除非本文中有明确的说明,这些步骤的执行并没有严格的顺序限制,这些步骤可以以其它的顺序执行。而且,图2、图5至图7中的至少一部分步骤可以包括多个子步骤或者多个阶段,这些子步骤或者阶段并不必然是在同一时刻执行完成,而是可以在不同的时刻执行,这些子步骤或者阶段的执行顺序也不必然是依次进行,而是可以与其它步骤或者其它步骤的子步骤或者阶段的至少一部分轮流或者交替地执行。
在一个实施例中,如图8所示,提供了一种数据加载装置,包括:分表确定模块810、任务放入模块820和请求推送模块830,其中:
分表确定模块810,用于获取待加载数据的分库分表标识,根据分库分表标识确定数据库中待加载数据的分表;
任务放入模块820,用于以分表作为维度,将待加载数据的各分表的表信息放入任务队列;
请求推送模块830,用于将与待加载数据的分表的数量相对应数量的加载请求推送至服务器集群监听的消息队列,以使得服务器集群中的任意一个服务器在监听到任意一个加载请求时,从任务队列获取一个表信息,将获取到的表信息对应的目标分表中的数据加载至缓存。
在一个实施例中,任务放入模块820逐轮从分库分表标识对应的各分库中分别筛选出相同数量的分表;将筛选出的分表的表信息按照筛选顺序依次放入任务队列。
在一个实施例中,任务放入模块820在当前筛选轮次,分别从分库分表标识对应的各分库按照分库排序依次筛选出相同数量的分表;在当前筛选轮次不是最后筛选轮次时,进行下一筛选轮次的分别从分库分表标识对应的各分库按照分库排序依次筛选出相同数量的分表。
在一个实施例中,分表确定模块810,还用于获取待加载数据的各分表的加载方式信息;将第一类型分表的加载状态修改为等待加载状态,第一类型分表为根据加载方式信息确定的采用断点续传的加载方式且未完成加载的分表;删除断点续传缓存中第二类型分表的数据,第二类型分表为根据加载方式信息确定的采用从头加载的加载方式的分表。
在一个实施例中,上述装置还包括数据加载模块840,数据加载模块840在从任务队列获取一个表信息之前,从监听到的加载请求中提取被请求服务器集群的标识信息;在被请求服务器集群的标识信息与服务器集群的标识信息相匹配时,进入从任务队列获取一个表信息的步骤。
在一个实施例中,数据加载模块840还用于在将获取到的表信息对应的目标分表中的数据加载至缓存之前,确定目标分表所在分库的当前并发量;在当前并发量小于预设的并发阈值时,进入将获取到的表信息对应的目标分表中的数据加载至缓存的步骤;在当前并发量大于预设的并发阈值时,将获取到的表信息放回任务队列的队尾。
在一个实施例中,数据加载模块840在目标分表为第一类型分表时,从目标分表的首位数据开始进行全量加载;在目标分表为第二类型分表时,获取目标分表的历史加载信息,从历史加载信息记录的上一次加载中断时加载到的数据开始对目标分表进行加载。
在一个实施例中,上述装置还包括信息记录模块850,信息记录模块840用于当数据加载操作中断时,记录未完成加载的各分表的加载信息,将未完成加载的各分表的加载信息存入断点续传缓存。
在一个实施例中,数据加载模块840,还用于根据加载请求的数量对服务器集群中的服务器进行扩容或缩容调整。
关于数据加载装置的具体限定可以参见上文中对于数据加载方法的限定,在此不再赘述。上述数据加载装置中的各个模块可全部或部分通过软件、硬件及其组合来实现。上述各模块可以硬件形式内嵌于或独立于计算机设备中的处理器中,也可以以软件形式存储于计算机设备中的存储器中,以便于处理器调用执行以上各个模块对应的操作。
在一个实施例中,提供了一种计算机设备,该计算机设备可以是服务器,其内部结构图可以如图9所示。该计算机设备包括通过系统总线连接的处理器、存储器、网络接口和数据库。其中,该计算机设备的处理器用于提供计算和控制能力。该计算机设备的存储器包括非易失性存储介质、内存储器。该非易失性存储介质存储有操作系统、计算机程序和数据库。该内存储器为非易失性存储介质中的操作系统和计算机程序的运行提供环境。该计算机设备的数据库用于存储待加载数据。该计算机设备的网络接口用于与外部的终端通过网络连接通信。该计算机程序被处理器执行时以实现一种数据加载方法。
本领域技术人员可以理解,图9中示出的结构,仅仅是与本申请方案相关的部分结构的框图,并不构成对本申请方案所应用于其上的计算机设备的限定,具体的计算机设备可以包括比图中所示更多或更少的部件,或者组合某些部件,或者具有不同的部件布置。
在一个实施例中,提供了一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,处理器执行计算机程序时实现以下步骤:获取待加载数据的分库分表标识,根据分库分表标识确定数据库中待加载数据的分表;以分表作为维度,将待加载数据的各分表的表信息放入任务队列;将与待加载数据的分表的数量相对应数量的加载请求推送至服务器集群监听的消息队列,以使得服务器集群中的任意一个服务器在监听到任意一个加载请求时,从任务队列获取一个表信息,将获取到的表信息对应的目标分表中的数据加载至缓存。
在一个实施例中,处理器执行计算机程序实现将待加载数据的各分表的表信息放入任务队列时,具体实现以下步骤:逐轮从分库分表标识对应的各分库中分别筛选出相同数量的分表;将筛选出的分表的表信息按照筛选顺序依次放入任务队列。
在一个实施例中,处理器执行计算机程序实现逐轮从分库分表标识对应的各分库中分别筛选出相同数量的分表时,具体实现以下步骤:在当前筛选轮次,分别从分库分表标识对应的各分库按照分库排序依次筛选出相同数量的分表;在当前筛选轮次不是最后筛选轮次时,进行下一筛选轮次的分别从分库分表标识对应的各分库按照分库排序依次筛选出相同数量的分表。
在一个实施例中,处理器执行计算机程序还实现以下步骤:获取待加载数据的各分表的加载方式信息;将第一类型分表的加载状态修改为等待加载状态,第一类型分表为根据加载方式信息确定的采用断点续传的加载方式且未完成加载的分表;删除断点续传缓存中第二类型分表的数据,第二类型分表为根据加载方式信息确定的采用从头加载的加载方式的分表。
在一个实施例中,处理器执行计算机程序实现从任务队列获取一个表信息之前,还实现以下步骤:从监听到的加载请求中提取被请求服务器集群的标识信息;在被请求服务器集群的标识信息与服务器集群的标识信息相匹配时,进入从任务队列获取一个表信息的步骤。
在一个实施例中,处理器执行计算机程序实现将获取到的表信息对应的目标分表中的数据加载至缓存之前,还实现以下步骤:确定目标分表所在分库的当前并发量;在当前并发量小于预设的并发阈值时,进入将获取到的表信息对应的目标分表中的数据加载至缓存的步骤;在当前并发量大于预设的并发阈值时,将获取到的表信息放回任务队列的队尾。
在一个实施例中,处理器执行计算机程序实现将获取到的表信息对应的目标分表中的数据加载至缓存时,具体实现以下步骤:在目标分表为第一类型分表时,从目标分表的首位数据开始进行全量加载;在目标分表为第二类型分表时,获取目标分表的历史加载信息,从历史加载信息记录的上一次加载中断时加载到的数据开始对目标分表进行加载。
在一个实施例中,处理器执行计算机程序实现时还实现以下步骤:当数据加载操作中断时,记录未完成加载的各分表的加载信息,将未完成加载的各分表的加载信息存入断点续传缓存。
在一个实施例中,处理器执行计算机程序实现时还实现以下步骤:根据加载请求的数量对服务器集群中的服务器进行扩容或缩容的调整。
在一个实施例中,提供了一种计算机可读存储介质,其上存储有计算机程序,计算机程序被处理器执行时实现以下步骤:获取待加载数据的分库分表标识,根据分库分表标识确定数据库中待加载数据的分表;以分表作为维度,将待加载数据的各分表的表信息放入任务队列;将与待加载数据的分表的数量相对应数量的加载请求推送至服务器集群监听的消息队列,以使得服务器集群中的任意一个服务器在监听到任意一个加载请求时,从任务队列获取一个表信息,将获取到的表信息对应的目标分表中的数据加载至缓存。
在一个实施例中,计算机程序被处理器执行实现将待加载数据的各分表的表信息放入任务队列时,具体实现以下步骤:逐轮从分库分表标识对应的各分库中分别筛选出相同数量的分表;将筛选出的分表的表信息按照筛选顺序依次放入任务队列。
在一个实施例中,计算机程序被处理器执行实现逐轮从分库分表标识对应的各分库中分别筛选出相同数量的分表时,具体实现以下步骤:在当前筛选轮次,分别从分库分表标识对应的各分库按照分库排序依次筛选出相同数量的分表;在当前筛选轮次不是最后筛选轮次时,进行下一筛选轮次的分别从分库分表标识对应的各分库按照分库排序依次筛选出相同数量的分表。
在一个实施例中,计算机程序被处理器执行还实现以下步骤:获取待加载数据的各分表的加载方式信息;将第一类型分表的加载状态修改为等待加载状态,第一类型分表为根据加载方式信息确定的采用断点续传的加载方式且未完成加载的分表;删除断点续传缓存中第二类型分表的数据,第二类型分表为根据加载方式信息确定的采用从头加载的加载方式的分表。
在一个实施例中,计算机程序被处理器执行实现从任务队列获取一个表信息之前,还实现以下步骤:从监听到的加载请求中提取被请求服务器集群的标识信息;在被请求服务器集群的标识信息与服务器集群的标识信息相匹配时,进入从任务队列获取一个表信息的步骤。
在一个实施例中,计算机程序被处理器执行实现将获取到的表信息对应的目标分表中的数据加载至缓存之前,还实现以下步骤:确定目标分表所在分库的当前并发量;在当前并发量小于预设的并发阈值时,进入将获取到的表信息对应的目标分表中的数据加载至缓存的步骤;在当前并发量大于预设的并发阈值时,将获取到的表信息放回任务队列的队尾。
在一个实施例中,计算机程序被处理器执行实现将获取到的表信息对应的目标分表中的数据加载至缓存时,具体实现以下步骤:在目标分表为第一类型分表时,从目标分表的首位数据开始进行全量加载;在目标分表为第二类型分表时,获取目标分表的历史加载信息,从历史加载信息记录的上一次加载中断时加载到的数据开始对目标分表进行加载。
在一个实施例中,计算机程序被处理器执行实现时还实现以下步骤:当数据加载操作中断时,记录未完成加载的各分表的加载信息,将未完成加载的各分表的加载信息存入断点续传缓存。
在一个实施例中,计算机程序被处理器执行实现时还实现以下步骤:根据加载请求的数量对服务器集群中的服务器进行扩容或缩容的调整。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的计算机程序可存储于一非易失性计算机可读取存储介质中,该计算机程序在执行时,可包括如上述各方法的实施例的流程。其中,本申请所提供的各实施例中所使用的对存储器、存储、数据库或其它介质的任何引用,均可包括非易失性和/或易失性存储器。非易失性存储器可包括只读存储器(ROM)、可编程ROM(PROM)、电可编程ROM(EPROM)、电可擦除可编程ROM(EEPROM)或闪存。易失性存储器可包括随机存取存储器(RAM)或者外部高速缓冲存储器。作为说明而非局限,RAM以多种形式可得,诸如静态RAM(SRAM)、动态RAM(DRAM)、同步DRAM(SDRAM)、双数据率SDRAM(DDRSDRAM)、增强型SDRAM(ESDRAM)、同步链路(Synchlink)DRAM(SLDRAM)、存储器总线(Rambus)直接RAM(RDRAM)、直接存储器总线动态RAM(DRDRAM)、以及存储器总线动态RAM(RDRAM)等。
以上实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。
以上所述实施例仅表达了本申请的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本申请构思的前提下,还可以做出若干变形和改进,这些都属于本申请的保护范围。因此,本申请专利的保护范围应以所附权利要求为准。
Claims (9)
1.一种数据加载方法,所述方法包括:
获取待加载数据的分库分表标识,根据所述分库分表标识确定数据库中所述待加载数据的分表;
以分表作为维度,将所述待加载数据的各分表的表信息放入任务队列;
将与所述待加载数据的分表的数量相对应数量的加载请求推送至服务器集群监听的消息队列,以使得所述服务器集群中的任意一个服务器在监听到任意一个所述加载请求时,从所述任务队列获取一个所述表信息,将获取到的所述表信息对应的目标分表中的数据加载至缓存;
其中,所述将所述待加载数据的各分表的表信息放入任务队列,包括:
逐轮从所述分库分表标识对应的各分库中分别筛选出相同数量的分表;
将筛选出的分表的表信息按照筛选顺序依次放入所述任务队列;
其中,所述逐轮从所述分库分表标识对应的各分库中分别筛选出相同数量的分表,包括:
在当前筛选轮次,分别从所述分库分表标识对应的各分库按照分库排序依次筛选出相同数量的分表;
在当前筛选轮次不是最后筛选轮次时,进行下一筛选轮次的分别从所述分库分表标识对应的各分库按照分库排序依次筛选出相同数量的分表。
2.根据权利要求1所述的方法,其特征在于,所述方法还包括:
获取所述待加载数据的各分表的加载方式信息;
将第一类型分表的加载状态修改为等待加载状态,所述第一类型分表为根据所述加载方式信息确定的采用断点续传的加载方式且未完成加载的分表;
删除断点续传缓存中第二类型分表的数据,所述第二类型分表为根据所述加载方式信息确定的采用从头加载的加载方式的分表。
3.根据权利要求1所述的方法,其特征在于,在所述从所述任务队列获取一个所述表信息之前,所述方法还包括:
从监听到的所述加载请求中提取被请求服务器集群的标识信息;
在所述被请求服务器集群的标识信息与所述服务器集群的标识信息相匹配时,进入所述从所述任务队列获取一个所述表信息的步骤。
4.根据权利要求1所述的方法,其特征在于,在所述将获取到的所述表信息对应的目标分表中的数据加载至缓存之前,所述方法还包括:
确定所述目标分表所在分库的当前并发量;
在所述当前并发量小于预设的并发阈值时,进入所述将获取到的所述表信息对应的目标分表中的数据加载至缓存的步骤;
在所述当前并发量大于预设的并发阈值时,将所述获取到的所述表信息放回所述任务队列的队尾。
5.根据权利要求2所述的方法,其特征在于,所述将获取到的所述表信息对应的目标分表中的数据加载至缓存,包括:
在所述目标分表为所述第一类型分表时,从所述目标分表的首位数据开始进行全量加载;
在所述目标分表为所述第二类型分表时,获取所述目标分表的历史加载信息,从所述历史加载信息记录的上一次加载中断时加载到的数据开始对所述目标分表进行加载。
6.根据权利要求1至5任意一项所述的方法,其特征在于,所述方法还包括:
当数据加载操作中断时,记录未完成加载的各分表的加载信息,将未完成加载的各分表的加载信息存入断点续传缓存;和/或,
根据加载请求的数量对所述服务器集群中的服务器进行扩容或缩容调整。
7.一种数据加载装置,其特征在于,所述装置包括:
分表确定模块,用于获取待加载数据的分库分表标识,根据所述分库分表标识确定数据库中所述待加载数据的分表;
任务放入模块,用于以分表作为维度,将所述待加载数据的各分表的表信息放入任务队列;
请求推送模块,用于将与所述待加载数据的分表的数量相对应数量的加载请求推送至服务器集群监听的消息队列,以使得所述服务器集群中的任意一个服务器在监听到任意一个所述加载请求时,从所述任务队列获取一个所述表信息,将获取到的所述表信息对应的目标分表中的数据加载至缓存;
其中,所述将所述待加载数据的各分表的表信息放入任务队列,包括:
逐轮从所述分库分表标识对应的各分库中分别筛选出相同数量的分表;
将筛选出的分表的表信息按照筛选顺序依次放入所述任务队列;
其中,所述逐轮从所述分库分表标识对应的各分库中分别筛选出相同数量的分表,包括:
在当前筛选轮次,分别从所述分库分表标识对应的各分库按照分库排序依次筛选出相同数量的分表;
在当前筛选轮次不是最后筛选轮次时,进行下一筛选轮次的分别从所述分库分表标识对应的各分库按照分库排序依次筛选出相同数量的分表。
8.一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述计算机程序时实现权利要求1至6中任一项所述方法的步骤。
9.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现权利要求1至6中任一项所述的方法的步骤。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110249090.8A CN113065084B (zh) | 2021-03-08 | 2021-03-08 | 数据加载方法、装置、计算机设备和存储介质 |
CA3151219A CA3151219A1 (en) | 2021-03-08 | 2022-03-07 | Data loading method, device, computer equipment and storage medium |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110249090.8A CN113065084B (zh) | 2021-03-08 | 2021-03-08 | 数据加载方法、装置、计算机设备和存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN113065084A CN113065084A (zh) | 2021-07-02 |
CN113065084B true CN113065084B (zh) | 2022-12-23 |
Family
ID=76559909
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110249090.8A Active CN113065084B (zh) | 2021-03-08 | 2021-03-08 | 数据加载方法、装置、计算机设备和存储介质 |
Country Status (2)
Country | Link |
---|---|
CN (1) | CN113065084B (zh) |
CA (1) | CA3151219A1 (zh) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114816586B (zh) * | 2022-06-28 | 2022-09-27 | 深圳高灯计算机科技有限公司 | 可见数据加载方法、装置、计算机设备和存储介质 |
CN116244538B (zh) * | 2023-01-31 | 2023-11-21 | 彭志勇 | 基于serviceworker的文件缓存方法和加载方法 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106844397A (zh) * | 2015-12-07 | 2017-06-13 | 阿里巴巴集团控股有限公司 | 基于分库分表的任务传输方法、装置及系统 |
CN111258741A (zh) * | 2020-02-14 | 2020-06-09 | 江苏苏宁物流有限公司 | 仓库任务执行的方法、分布式服务器集群及计算机设备 |
CN111309467A (zh) * | 2020-02-24 | 2020-06-19 | 拉扎斯网络科技(上海)有限公司 | 任务分发方法及装置、电子设备及存储介质 |
-
2021
- 2021-03-08 CN CN202110249090.8A patent/CN113065084B/zh active Active
-
2022
- 2022-03-07 CA CA3151219A patent/CA3151219A1/en active Pending
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106844397A (zh) * | 2015-12-07 | 2017-06-13 | 阿里巴巴集团控股有限公司 | 基于分库分表的任务传输方法、装置及系统 |
CN111258741A (zh) * | 2020-02-14 | 2020-06-09 | 江苏苏宁物流有限公司 | 仓库任务执行的方法、分布式服务器集群及计算机设备 |
CN111309467A (zh) * | 2020-02-24 | 2020-06-19 | 拉扎斯网络科技(上海)有限公司 | 任务分发方法及装置、电子设备及存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN113065084A (zh) | 2021-07-02 |
CA3151219A1 (en) | 2022-09-08 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN113065084B (zh) | 数据加载方法、装置、计算机设备和存储介质 | |
US8694472B2 (en) | System and method for rebuilding indices for partitioned databases | |
CN110753099B (zh) | 分布式缓存系统以及缓存数据更新方法 | |
CN111708586B (zh) | 应用启动配置项加载方法、装置、计算机设备和存储介质 | |
CN112532687B (zh) | kubernetes负载均衡器扩容方法和系统 | |
CN107391634B (zh) | 数据迁移方法及装置 | |
CN107153643B (zh) | 数据表连接方法及装置 | |
CN112100152A (zh) | 业务数据处理方法、系统、服务器和可读存储介质 | |
CN115587118A (zh) | 任务数据的维表关联处理方法及装置、电子设备 | |
CN110716924A (zh) | 删除过期数据的方法和装置 | |
CN109697112B (zh) | 分布式集约化一站式作业系统和实现方法 | |
CN107943615B (zh) | 基于分布式集群的数据处理方法与系统 | |
CN116521363B (zh) | 一种代码打包方法、计算机设备及存储介质 | |
CN111459913B (zh) | 分布式数据库的容量扩展方法、装置及电子设备 | |
CN112711606A (zh) | 数据库访问方法、装置、计算机设备和存储介质 | |
CN114564153B (zh) | 一种卷映射解除方法、装置、设备和存储介质 | |
CN107590199B (zh) | 一种面向内存的多线程数据库设计方法 | |
CN112115166B (zh) | 数据缓存方法、装置、计算机设备和存储介质 | |
CN112000648B (zh) | 数据清除方法、装置、计算机设备和存储介质 | |
CN110851421B (zh) | 减少数据迁移耗时的方法、装置、存储介质及电子设备 | |
CN113485828A (zh) | 基于quartz的分布式任务调度系统及方法 | |
CN113177224B (zh) | 基于区块链的数据密封方法、装置、设备和存储介质 | |
CN111767330B (zh) | 一种数据交互方法、装置、电子设备及存储介质 | |
CN110955666B (zh) | 数据处理方法和数据处理装置 | |
CN112540897B (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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |