数据归档的方法、装置和计算机可读存储介质转让专利

申请号 : CN201911085751.7

文献号 : CN110837592B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 程鹏兴高新刚肖盛锋赵越郭声永

申请人 : 京东数字科技控股有限公司

摘要 :

本公开涉及一种数据归档的方法、装置和计算机可读存储介质,涉及数据库技术领域。本公开的方法包括:获取用户输入的归档规则,归档规则包括:待归档数据的地址信息和待归档数据的范围,范围包括时间范围或标识范围;将归档规则划分为多个子规则;根据每个子规则创建对应的归档任务,并将归档任务放入任务队列中;从任务队列中取出至少一个的归档任务,并执行取出的归档任务,以便对待归档数据进行归档。

权利要求 :

1.一种数据归档的方法,包括:

获取用户输入的归档规则,所述归档规则包括:待归档数据的地址信息和所述待归档数据的范围,所述范围包括时间范围或标识范围;

将所述归档规则划分为多个子规则;

根据每个子规则创建对应的归档任务,并将所述归档任务放入任务队列中;

并行多线程每次分别从所述任务队列中取出一个归档任务,并执行取出的归档任务,以便对所述待归档数据进行归档;

所述将所述归档规则划分为多个子规则包括:

根据所述归档规则创建规则划分任务,将所述规则划分任务放入任务队列中;

从所述任务队列中取出所述规则划分任务,根据所述规则划分任务将所述归档规则划分为多个子规则;

其中,在所述归档规则包括所述待归档数据的时间范围的情况下,按照预设时间长度,将所述待归档数据的时间范围划分为多个时间子范围,在所述归档规则包括所述待归档数据的标识范围的情况下,按照预设标识范围长度,将所述待归档数据的标识范围划分为多个标识子范围,以便形成所述子规则。

2.根据权利要求1所述的方法,其中,

所述归档任务包括:所述待归档数据的地址信息和所述待归档数据的子范围,所述子范围包括:时间子范围或标识子范围;

所述从所述任务队列中取出至少一个的归档任务,并执行取出的归档任务包括:由至少两个任务执行单元分别从所述任务队列中取出一个归档任务,针对每个归档任务,根据待归档数据的地址信息从源数据库,获取与所述待归档数据的子范围相对应的待归档数据;

在目标数据库中创建目标表,将获取的待归档数据存储到所述目标表中;

将已存储到目标表中待归档数据对应的所述源数据库中的数据删除。

3.根据权利要求2所述的方法,其中,

所述获取与所述待归档数据的子范围相对应的待归档数据包括:每次根据所述源数据库的当前性能,确定本次待获取的待归档数据的数量;所述当前性能包括当前每秒处理事务数,当前CPU利用率,当前每秒内I/O操作的时间占比中至少一项;

根据本次待获取的待归档数据的数量,获取相应数量的属于所述子范围的待归档数据。

4.根据权利要求3所述的方法,其中,

所述每次根据所述源数据库的当前性能,确定本次待获取的待归档数据的数量包括:将当前每秒处理事务数,当前CPU利用率,当前每秒内I/O操作的时间占比进行加权得到加权值;

根据所述加权值与预设数量,确定本次待获取的待归档数据的数量。

5.根据权利要求2所述的方法,其中,

所述在目标数据库中创建目标表,将获取的待归档数据存储到所述目标表中包括:根据源数据库的标识、源表的标识以及欲存储的待归档数据的范围,确定所述目标表的标识;所述欲存储的待归档数据的范围包括:欲存储的待归档数据的时间范围或标识范围;

根据欲存储的待归档数据的范围,将对应的获取的待归档数据存储到所述目标表中。

6.根据权利要求1所述的方法,其中,

所述将所述归档任务放入任务队列中包括:

根据所述归档任务对应的子规则的状态标志位判断所述子规则对应的归档任务是否在被执行,如果未被执行,则将所述归档任务放入任务队列中;如果在被执行,则放弃将所述归档任务放入任务队列中。

7.根据权利要求1所述的方法,其中,

所述将所述归档任务放入任务队列中包括:

根据预设调度速率和并行度将所述归档任务放入任务队列中;其中,所述并行度表示每次并行放入任务队列中的归档任务的数量。

8.根据权利要求1所述的方法,还包括:

确定所述任务队列中的未执行的归档任务的数量;

在所述未执行的归档任务的数量超过阈值的情况下,降低创建归档任务和放入任务队列速率,或者,提高从所述任务队列中取出归档任务并执行的速率。

9.根据权利要求7所述的方法,还包括:

根据所述待归档数据的地址信息对应的源数据库的负载信息,调整所述并行度。

10.根据权利要求2所述的方法,其中,

所述将获取的待归档数据存储到所述目标表中包括:每次将获取的待归档数据存储到所述目标表之前,比对所述目标表与所述待归档数据的源表的结构,如果结构不一致,则根据所述源表的结构更新所述目标表的结构,再将获取的待归档数据存储到更新后的所述目标表。

11.根据权利要求1所述的方法,还包括:

显示所述归档规则,已归档的待归档数据的数量,归档速率中至少一项信息。

12.一种数据归档的装置,包括:

输入模块,用于获取用户输入的归档规则,所述归档规则包括:待归档数据的地址信息和所述待归档数据的范围,所述范围包括时间范围或标识范围;

规则划分模块,用于将所述归档规则划分为多个子规则;

任务管理模块,用于根据每个子规则创建对应的归档任务,并将所述归档任务放入任务队列中;

归档模块,用于并行多线程每次分别从所述任务队列中取出一个归档任务,并执行取出的归档任务,以便对所述待归档数据进行归档;

其中,所述规则划分模块用于根据所述归档规则创建规则划分任务,将所述规则划分任务放入任务队列中;从所述任务队列中取出所述规则划分任务,根据所述规则划分任务将所述归档规则划分为多个子规则;其中,在所述归档规则包括所述待归档数据的时间范围的情况下,按照预设时间长度,将所述待归档数据的时间范围划分为多个时间子范围,在所述归档规则包括所述待归档数据的标识范围的情况下,按照预设标识范围长度,将所述待归档数据的标识范围划分为多个标识子范围,以便形成所述子规则。

13.一种数据归档的装置,包括:

处理器;以及

耦接至所述处理器的存储器,用于存储指令,所述指令被所述处理器执行时,使所述处理器执行如权利要求1-11任一项所述的数据归档的方法。

14.一种非瞬时性计算机可读存储介质,其上存储有计算机程序,其中,该程序被处理器执行时实现权利要求1-11任一项所述方法的步骤。

说明书 :

数据归档的方法、装置和计算机可读存储介质

技术领域

[0001] 本公开涉及数据库技术领域,特别涉及一种数据归档的方法、装置和计算机可读存储介质。

背景技术

[0002] 随着互联网企业的快速发展,其后端数据库存储的数据和占据的磁盘空间越来越大。因此为了保证线上服务的高可用,需要及时清理冷数据(暂时不用的历史数据),从而释放线上数据库服务器的磁盘空间。
[0003] 目前,实现释放线上数据库的磁盘空间的做法基本就是靠DBA(Database Administrator,DBA)手动地把数据从线上数据库归档到线下数据库。

发明内容

[0004] 发明人发现:目前数据归档方案是由DBA手动编写脚本执行的,而且每隔一段时间就需要重新编写和执行,归档效率低。
[0005] 本公开所要解决的一个技术问题是:提出一种自动化的数据归档方案,提高归档效率。
[0006] 根据本公开的一些实施例,提供的一种数据归档的方法,包括:获取用户输入的归档规则,归档规则包括:待归档数据的地址信息和待归档数据的范围,范围包括时间范围或标识范围;将归档规则划分为多个子规则;根据每个子规则创建对应的归档任务,并将归档任务放入任务队列中;从任务队列中取出至少一个的归档任务,并执行取出的归档任务,以便对待归档数据进行归档。
[0007] 在一些实施例中,将归档规则划分为多个子规则包括:根据归档规则创建规则划分任务,将规则划分任务放入任务队列中;从任务队列中取出规则划分任务,根据规则划分任务将归档规则划分为多个子规则;其中,在归档规则包括待归档数据的时间范围的情况下,按照预设时间长度,将待归档数据的时间范围划分为多个时间子范围,在归档规则包括待归档数据的标识范围的情况下,按照预设标识范围长度,将待归档数据的标识范围划分为多个标识子范围,以便形成子规则。
[0008] 在一些实施例中,归档任务包括:待归档数据的地址信息和待归档数据的子范围,子范围包括:时间子范围或标识子范围;从任务队列中取出至少一个的归档任务,并执行取出的归档任务包括:由至少两个任务执行单元分别从任务队列中取出一个归档任务,针对每个归档任务,根据待归档数据的地址信息从源数据库,获取与待归档数据的子范围相对应的待归档数据;在目标数据库中创建目标表,将获取的待归档数据存储到目标表中;将已存储到目标表中待归档数据对应的源数据库中的数据删除。
[0009] 在一些实施例中,获取与待归档数据的子范围相对应的待归档数据包括:每次根据源数据库的当前性能,确定本次待获取的待归档数据的数量;当前性能包括当前每秒处理事务数,当前CPU利用率,当前每秒内I/O操作的时间占比中至少一项;根据本次待获取的待归档数据的数量,获取相应数量的属于子范围的待归档数据。
[0010] 在一些实施例中,每次根据源数据库的当前性能,确定本次待获取的待归档数据的数量包括:将当前每秒处理事务数,当前CPU利用率,当前每秒内I/O操作的时间占比进行加权得到加权值;根据加权值与预设数量,确定本次待获取的待归档数据的数量。
[0011] 在一些实施例中,在目标数据库中创建目标表,将获取的待归档数据存储到目标表中包括:根据源数据库的标识、源表的标识以及欲存储的待归档数据的范围,确定目标表的标识;欲存储的待归档数据的范围包括:欲存储的待归档数据的时间范围或标识范围;根据欲存储的待归档数据的范围,将对应的获取的待归档数据存储到目标表中。
[0012] 在一些实施例中,将归档任务放入任务队列中包括:根据归档任务对应的子规则的状态标志位判断子规则对应的归档任务是否在被执行,如果未被执行,则将归档任务放入任务队列中;如果在被执行,则放弃将所述归档任务放入任务队列中。
[0013] 在一些实施例中,将归档任务放入任务队列中包括:根据预设调度速率和并行度将归档任务放入任务队列中;其中,并行度表示每次并行放入任务队列中的归档任务的数量。
[0014] 在一些实施例中,该方法还包括:确定任务队列中的未执行的归档任务的数量;在未执行的归档任务的数量超过阈值的情况下,降低创建归档任务和放入任务队列速率,或者,提高从任务队列中取出归档任务并执行的速率。
[0015] 在一些实施例中,该方法还包括:根据待归档数据的地址信息对应的源数据库的负载信息,调整并行度。
[0016] 在一些实施例中,将获取的待归档数据存储到目标表中包括:每次将获取的待归档数据存储到目标表之前,比对目标表与待归档数据的源表的结构,如果结构不一致,则根据源表的结构更新目标表的结构,再将获取的待归档数据存储到更新后的目标表。
[0017] 在一些实施例中,该方法还包括:显示归档规则,已归档的待归档数据的数量,归档速率中至少一项信息。
[0018] 根据本公开的另一些实施例,提供的一种数据归档的装置,包括:输入模块,用于获取用户输入的归档规则,归档规则包括:待归档数据的地址信息和待归档数据的范围,范围包括时间范围或标识范围;规则划分模块,用于将归档规则划分为多个子规则;任务管理模块,用于根据每个子规则创建对应的归档任务,并将归档任务放入任务队列中;归档模块,用于从任务队列中取出至少一个的归档任务,并执行取出的归档任务,以便对待归档数据进行归档。
[0019] 在一些实施例中,规则划分模块用于根据归档规则创建规则划分任务,将规则划分任务放入任务队列中;从任务队列中取出规则划分任务,根据规则划分任务将归档规则划分为多个子规则;其中,在归档规则包括待归档数据的时间范围的情况下,按照预设时间长度,将待归档数据的时间范围划分为多个时间子范围,在归档规则包括待归档数据的标识范围的情况下,按照预设标识范围长度,将待归档数据的标识范围划分为多个标识子范围,以便形成子规则。
[0020] 在一些实施例中,归档任务包括:待归档数据的地址信息和待归档数据的子范围,子范围包括:时间子范围或标识子范围;归档模块用于由至少两个任务执行单元分别从任务队列中取出一个归档任务,针对每个归档任务,根据待归档数据的地址信息从源数据库,获取与待归档数据的子范围相对应的待归档数据;在目标数据库中创建目标表,将获取的待归档数据存储到目标表中;将已存储到目标表中待归档数据对应的源数据库中的数据删除。
[0021] 在一些实施例中,归档模块用于每次根据源数据库的当前性能,确定本次待获取的待归档数据的数量;当前性能包括当前每秒处理事务数,当前CPU利用率,当前每秒内I/O操作的时间占比中至少一项;根据本次待获取的待归档数据的数量,获取相应数量的属于子范围的待归档数据。
[0022] 在一些实施例中,归档模块用于将当前每秒处理事务数,当前CPU利用率,当前每秒内I/O操作的时间占比进行加权得到加权值;根据加权值与预设数量,确定本次待获取的待归档数据的数量
[0023] 在一些实施例中,归档模块用于根据源数据库的标识、源表的标识以及欲存储的待归档数据的范围,确定目标表的标识;欲存储的待归档数据的范围包括:欲存储的待归档数据的时间范围或标识范围;根据欲存储的待归档数据的范围,将对应的获取的待归档数据存储到目标表中。
[0024] 在一些实施例中,任务管理模块用于根据归档任务对应的子规则的状态标志位判断子规则对应的归档任务是否在被执行,如果未被执行,则将归档任务放入任务队列中;如果在被执行,则放弃将所述归档任务放入任务队列中。
[0025] 在一些实施例中,任务管理模块用于根据预设调度速率和并行度将归档任务放入任务队列中;其中,并行度表示每次并行放入任务队列中的归档任务的数量。
[0026] 在一些实施例中,该装置还包括:监控模块用于确定任务队列中的未执行的归档任务的数量;在未执行的归档任务的数量超过阈值的情况下,降低创建归档任务和放入任务队列速率,或者,提高从任务队列中取出归档任务并执行的速率。
[0027] 在一些实施例中,该装置还包括:调整模块用于根据待归档数据的地址信息对应的源数据库的负载信息,调整并行度。
[0028] 在一些实施例中,归档模块还用于每次将获取的待归档数据存储到目标表之前,比对目标表与待归档数据的源表的结构,如果结构不一致,则根据源表的结构更新目标表的结构,再将获取的待归档数据存储到更新后的目标表。
[0029] 在一些实施例中,该装置还包括:显示模块用于显示归档规则,已归档的待归档数据的数量,归档速率中至少一项信息。
[0030] 根据本公开的又一些实施例,提供的一种数据归档的装置,包括:处理器;以及耦接至处理器的存储器,用于存储指令,指令被处理器执行时,使处理器执行如前述任意实施例的数据归档的方法。
[0031] 根据本公开的再一些实施例,提供的一种非瞬时性计算机可读存储介质,其上存储有计算机程序,其中,该程序被处理器执行时实现前述任意实施例的数据归档的方法。
[0032] 本公开中根据用户输入的归档规则,划分子规则并创建对应的归档任务,将归档任务放入任务队列中,从任务队列中取出至少一个的归档任务执行,从而实现对待归档数据的归档。本公开的方案可以根据用户的需求,自动进行数据的归档,不需要人工反复编写脚本并手动操作数据的归档,提高数据的归档效率。
[0033] 通过以下参照附图对本公开的示例性实施例的详细描述,本公开的其它特征及其优点将会变得清楚。

附图说明

[0034] 为了更清楚地说明本公开实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本公开的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
[0035] 图1示出本公开的一些实施例的数据归档的方法的流程示意图。
[0036] 图2示出本公开的另一些实施例的数据归档的方法的流程示意图。
[0037] 图3示出本公开的又一些实施例的数据归档的方法的流程示意图。
[0038] 图4示出本公开的一些实施例的数据归档的装置的结构示意图。
[0039] 图5示出本公开的另一些实施例的数据归档的装置的结构示意图。
[0040] 图6示出本公开的又一些实施例的数据归档的装置的结构示意图。

具体实施方式

[0041] 下面将结合本公开实施例中的附图,对本公开实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本公开一部分实施例,而不是全部的实施例。以下对至少一个示例性实施例的描述实际上仅仅是说明性的,决不作为对本公开及其应用或使用的任何限制。基于本公开中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本公开保护的范围。
[0042] 本公开提出一种自动化的数据归档的方法,下面结合图1进行描述。
[0043] 图1为本公开数据归档的方法一些实施例的流程图。如图1所示,该实施例的方法包括:步骤S102~S108。
[0044] 在步骤S102中,获取用户输入的归档规则。
[0045] 可以设置规则输入界面,用户在规则输入界面输入归档规则。归档规则包括:待归档数据的地址信息和待归档数据的范围,范围包括时间范围或标识范围。待归档数据的地址信息例如包括:源数据库的标识(例如,名称、IP地址、端口)或集群标识、源表的标识(例如,名称)。待归档数据的范围可以按时间划分或者按标识划分,可以由用户进行选择。归档规则还可以包括并行度,并行度用于反映对归档规则的处理速率,表示每次并行放入任务队列中的任务的数量,后续将进行具体描述。例如,用户录入的归档规则包括:源数据库标识是testDB,源表标识是testTable,待归档数据的范围为两年前的数据即date_sub(now(),interval 365*2day),同时用户设置的并行度是2。
[0046] 在一些实施例中,用户输入归档规则后,可以选择启用该归档规则,修改该归档规则或者删除该归档规则等功能,还可以选择显示归档规则详情的功能。在显示归档规则详情的情况下,规则名称(可以自动生成)、源数据库标识、源表标识、目标数据库标识、规则类型(数据归档、数据删除等类型),规则条件(待归档数据的范围),并行度等至少一项信息,可以在归档规则详情页面进行显示。
[0047] 在步骤S104中,将归档规则划分为多个子规则。
[0048] 用户输入的各种归档规则可以存储于规则表中,可以为每个归档规则设置启动标识,在启动标识表示已启动的情况下,将归档规则划分为多个子规则。进一步,可以将子规则存储到子规则表。在归档规则完成的情况下,可以将启动标识修改为已完成。
[0049] 在一些实施例中,根据归档规则创建规则划分任务,将规则划分任务放入任务队列中;从任务队列中取出规则划分任务,根据规则划分任务将归档规则划分为多个子规则。
[0050] 规则划分任务可以包括:按时间划分或者按标识划分的指示标识,还可以包括归档规则的内容。在归档规则包括待归档数据的时间范围的情况下,规则划分任务中包括按时间划分的指示标识,则按照预设时间长度,将待归档数据的时间范围划分为多个时间子范围。各个时间子范围交集为空,且并集为归档规则中待归档数据的时间范围。例如,如果按时间划分子规则,可以一天对应一个子规则;例如2014-06-18 00:00:00--2014-06-19 00:00:00是一个子规则中子范围,2014-06-19 00:00:00--2014-06-20 00:00:00是第二个子规则的子范围。
[0051] 在归档规则包括待归档数据的标识范围的情况下,规则划分任务中包括按标识划分的指示标识,按照预设标识范围长度,将待归档数据的标识范围划分为多个标识子范围,各个标识子范围交集为空,且并集为归档规则中待归档数据的标识范围。例如,如果按标识划分子规则,可以一百万条待归档数据对应一个子规则。子规则中可以包括:待归档数据的地址信息和待归档数据的子范围。
[0052] 可以采用Celery(一种分布式任务队列的实现模型)实现上述方法。生成规则划分任务后,可以由任务调度器(Beat)按照预设调度速率(例如每秒调度一次)周期性将规则划分任务调度到任务队列(Broker)中。并行度表示每次并行放入任务队列中任务的数量。可以至少由一个任务执行单元(Worker),从任务队列中取出规则划分任务,根据规则划分任务将归档规则划分为多个子规则。任务队列和任务执行单元都可以有多个,在任务执行单元有多个的情况下,可以并行执行多个任务,提高处理效率。
[0053] 在步骤S106中,根据每个子规则创建对应的归档任务,并将归档任务放入任务队列中。
[0054] 可以根据每个子规则创建一个归档任务。归档任务包括:待归档数据的地址信息和待归档数据的子范围,子范围包括:时间子范围或标识子范围。例如,根据预设调度速率和并行度将归档任务放入任务队列中;其中,并行度表示每次并行放入任务队列中的归档任务的数量。可以由任务调度器将归档任务放入任务队列中。
[0055] 在一些实施例中,在归档任务被放入任务队列的情况下,可以将子规则对应的状态标志位修改为执行中。根据归档任务对应的子规则的状态标志位判断子规则对应的归档任务是否在被执行,如果未被执行,则将归档任务放入任务队列中。如果在被执行,则放弃将所述归档任务放入任务队列中。
[0056] 在不知S108中,从任务队列中取出至少一个的归档任务,并执行取出的归档任务,以便对待归档数据进行归档。
[0057] 在一些实施例中,每个任务执行单元按照任务队列中各个归档任务的顺序,则将归档任务取出。这样可以避免归档任务被重复执行,避免数据重复归档。
[0058] 可以每次取出一个归档任务并执行,也可以并行多线程分别取出一个归档任务并分别执行。在一些实施例中,由至少两个任务执行单元分别从任务队列中取出一个归档任务,针对每个归档任务,如图2所示,可以执行步骤S202~S206。
[0059] 在步骤S202中,根据待归档数据的地址信息从源数据库,获取与待归档数据的子范围相对应的待归档数据。
[0060] 在一些实施例中,如果源数据库为主从数据库结构中的主数据库,则根据主数据库获取对应的从数据库的地址信息,向从数据获取与待归档数据的子范围相对应的待归档数据,从而避免增加主数据库的压力。
[0061] 在一些实施例中,根据待归档数据的地址信息从源数据库,获取与待归档数据的子范围相对应的待归档数据包括:根据源数据库的性能,分一次或多次从源数据库获取待归档数据。每次根据源数据库的当前性能,确定本次待获取的待归档数据的数量;当前性能包括当前每秒处理事务数(TPS),当前CPU利用率,当前每秒内I/O操作的时间占比(即一秒中用于I/O操作的时间的百分比)中至少一项;根据本次待获取的待归档数据的数量,获取相应数量的属于子范围的待归档数据。每次获取的待归档数据互不重复。当前TPS、当前CPU利用率和当前每秒内I/O操作的时间占比可以是预设时间内的统计平均值。
[0062] 例如,将当前每秒处理事务数,当前CPU利用率,当前每秒内I/O操作的时间占比进行加权得到加权值;根据加权值与预设数量,确定本次待获取的待归档数据的数量。进一步,当前每秒处理事务数,当前CPU利用率,当前每秒内I/O操作的时间占比等性能指标设置对应的TPS基线值、CPU基线值、每秒内I/O操作的时间占比基线值。针对每个指标,利用公式:((当前指标值-基线值)/基线值))*权重百分比,计算出一个百分比,该值可正可负。将计算出的各个百分比求和得到一个总的百分比。如果总的百分比大于零,则表示现在源数据库负载非常高,可以暂停归档数据。如果总的百分比小于零,利用公式:预设数量+预设数量*(总的百分比的绝对值-0.5)*2,计算出本次归档多少行数据。例如,预设数量为1000行,经过上述运算后,得到的本次归档行数的取值区间是[0,2000]。
[0063] 上述实施例的方法可以根据源数据库的负载,动态调整每次归档的数量,降低源数据库线上业务访问变慢甚至宕机的风险。
[0064] 在步骤S204中,在目标数据库中创建目标表,将获取的待归档数据存储到目标表中。
[0065] 在一些实施例中,根据源数据库的标识、源表的标识以及欲存储的待归档数据的范围,确定目标表的标识;欲存储的待归档数据的范围包括:欲存储的待归档数据的时间范围或标识范围;根据欲存储的待归档数据的范围,将对应的获取的待归档数据存储到目标表中。
[0066] 例如,根据源数据库的名称和源表的名称以及子规则类型对应的欲存储的待归档数据的范围,可以动态生成目标表的名字。如果子规则表示按时间列来归档,可以将一个月作为欲存储的待归档数据的范围,将对应的待归档数据归档到一张目标表里;如果子规则表示按ID来归档,可以将三千万行作为欲存储的待归档数据的范围,将对应的待归档数据归档到一张目标表里。根据目标表的标识即可知保存的数据的区间。例如,目标表的标识就是testTable201406,testTable201407等等,方便以后进行查找。
[0067] 在源数据库为分布式数据库的情况下,可以将欲存储的待归档数据的范围确定为归档规则中待归档数据的范围,即所有待归档数据存储到一张目标表里。
[0068] 在一些实施例中,每次将获取的待归档数据存储到目标表之前,比对目标表与待归档数据的源表的结构,如果结构不一致,则根据源表的结构更新目标表的结构,再将获取的待归档数据存储到更新后的目标表。
[0069] 在步骤S206中,将已存储到目标表中待归档数据对应的源数据库中的数据删除。
[0070] 将待归档数据存储到目标表后,可以将源数据库对应的主数据库上的待归档数据进行删除,从而释放线上数据库的空间和压力。在子规则对应的归档任务完成的情况下,可以将子规则对应的状态标志位修改为已完成。
[0071] 上述实施例的方法中根据用户输入的归档规则,划分子规则并创建对应的归档任务,将归档任务放入任务队列中,从任务队列中取出至少一个的归档任务执行,从而实现对待归档数据的归档。上述实施例的方案可以根据用户的需求,自动进行数据的归档,不需要人工反复编写脚本并手动操作数据的归档,并且可以并行执行多个归档任务,提高数据的归档效率。此外,在进行数据归档的过程中可以根据源数据库的负荷调整归档行数以及动态生成目标表的标识做到见名即可知数据的归档区间,降低源数据库线上业务访问变慢甚至宕机的风险,便于后续数据查询。
[0072] 下面结合图3描述本公开数据归档的方法的另一些实施例。
[0073] 图3为本公开数据归档的方法另一些实施例的流程图。如图3所示,该实施例的方法包括:步骤S302~S316。
[0074] 在步骤S302中,获取用户输入的归档规则。
[0075] 在步骤S304中,将归档规则划分为多个子规则.
[0076] 在步骤S306中,根据每个子规则创建对应的归档任务,并将归档任务放入任务队列中。
[0077] 在步骤S308中,从任务队列中取出至少一个的归档任务,并执行取出的归档任务,以便对待归档数据进行归档。
[0078] 可以并行地根据一个或多个子规则,对待归档数据进行归档。步骤S302~S308可以参考前述实施例的描述。
[0079] 在步骤S310中,确定任务队列中的未执行的归档任务的数量.
[0080] 在步骤S312中,在未执行的归档任务的数量超过阈值的情况下,进行任务调整操作,任务调整操作包括:降低创建归档任务和放入任务队列速率,提高从任务队列中取出归档任务并执行的速率中至少一项。
[0081] 每隔预设周期可以创建积压查询任务,将积压查询任务放入队列中,任务执行单元执行积压查询任务时,可以利用监控器(flower)获取broker的任务队列里积压情况,然后触发响应的动作。如果队列长时间积压过高,说明任务生成速度过快,执行速度慢。可以降低预设调度速率,或者降低并行度,从而降低创建归档任务和放入任务队列速率;或者,提高从任务队列中取出归档任务并执行的速率,可以通过增加任务执行单元的个数来提高取出归档任务并执行的速率。通过上述调整可以实现生成任务和执行任务的动态平衡。
[0082] 上述任务调整操作也适用于其他任务,例如规则划分任务等。
[0083] 在步骤S314中,根据待归档数据的地址信息对应的源数据库的负载信息,调整并行度。
[0084] 源数据库负载高于负载阈值的情况下,可以降低并行度,可以按照预设步长降低并行度。源数据库负载过高,需要减少访问量,因此,降低并行度可以降低任务生成速度,从而降低访问量。也可以降低预设调度速率,或者,减少并行执行归档任务的数量。也可以在源数据库负载高于负载阈值的情况下,触发报警,由DBA进行调整。
[0085] 在步骤S316中,显示归档规则,已归档的待归档数据的数量,归档速率中至少一项信息。
[0086] 还可以显示任务积压状态监控信息等,可以根据实际需求进行设置。归档速率可以用TPM(每分钟归档的行数)表示,可以显示各个时刻的TPM。
[0087] 步骤S314,S316与步骤S310~S312可以不分先后顺序。
[0088] 上述实施例的方法可以根据用户自定义归档规则进行自动归档,方便归档任务的灵活管控,可根据归档规则自动拆分成子规则,同时通过状态标志位来规避数据重复归档的风险,可以动态实时追踪源数据库的负载压力,可实现自动调整归档并行度、归档行数等,降低源数据库压力,可以动态实时追踪源表结构变更,可实现自动同步表结构。具有可视化的任务积压状态监控。帮助用户了解归档进度。具有可视化的归档信息的展示,帮助用户快速获取归档信息。
[0089] 本公开还提供一种数据归档的装置,下面结合图4进行描述。
[0090] 图4为本公开数据归档的装置的一些实施例的结构图。如图4所示,该实施例的装置40包括:输入模块410,规则划分模块420,任务管理模块430,归档模块440。
[0091] 输入模块410,用于获取用户输入的归档规则,归档规则包括:待归档数据的地址信息和待归档数据的范围,范围包括时间范围或标识范围。
[0092] 规则划分模块420,用于将归档规则划分为多个子规则。
[0093] 在一些实施例中,规则划分模块420用于根据归档规则创建规则划分任务,将规则划分任务放入任务队列中;从任务队列中取出规则划分任务,根据规则划分任务将归档规则划分为多个子规则;其中,在归档规则包括待归档数据的时间范围的情况下,按照预设时间长度,将待归档数据的时间范围划分为多个时间子范围,在归档规则包括待归档数据的标识范围的情况下,按照预设标识范围长度,将待归档数据的标识范围划分为多个标识子范围,以便形成子规则。
[0094] 任务管理模块430,用于根据每个子规则创建对应的归档任务,并将归档任务放入任务队列中。
[0095] 在一些实施例中,任务管理模块430用于根据预设调度速率和并行度将归档任务放入任务队列中;其中,并行度表示每次并行放入任务队列中的归档任务的数量。
[0096] 在一些实施例中,任务管理模块用于根据归档任务对应的子规则的状态标志位判断子规则对应的归档任务是否在被执行,如果未被执行,则将归档任务放入任务队列中;如果在被执行,则放弃将所述归档任务放入任务队列中。
[0097] 归档模块440,用于从任务队列中取出至少一个的归档任务,并执行取出的归档任务,以便对待归档数据进行归档。
[0098] 在一些实施例中,归档任务包括:待归档数据的地址信息和待归档数据的子范围,子范围包括:时间子范围或标识子范围;归档模块440用于由至少两个任务执行单元分别从任务队列中取出一个归档任务,针对每个归档任务,根据待归档数据的地址信息从源数据库,获取与待归档数据的子范围相对应的待归档数据;在目标数据库中创建目标表,将获取的待归档数据存储到目标表中;将已存储到目标表中待归档数据对应的源数据库中的数据删除。
[0099] 在一些实施例中,归档模块440用于每次根据源数据库的当前性能,确定本次待获取的待归档数据的数量;当前性能包括当前每秒处理事务数,当前CPU利用率,当前每秒内I/O操作的时间占比中至少一项;根据本次待获取的待归档数据的数量,获取相应数量的属于子范围的待归档数据。
[0100] 在一些实施例中,归档模块440用于将当前每秒处理事务数,当前CPU利用率,当前每秒内I/O操作的时间占比进行加权得到加权值;根据加权值与预设数量,确定本次待获取的待归档数据的数量
[0101] 在一些实施例中,归档模块440用于根据源数据库的标识、源表的标识以及欲存储的待归档数据的范围,确定目标表的标识;欲存储的待归档数据的范围包括:欲存储的待归档数据的时间范围或标识范围;根据欲存储的待归档数据的范围,将对应的获取的待归档数据存储到目标表中。
[0102] 在一些实施例中,归档模块440还用于每次将获取的待归档数据存储到目标表之前,比对目标表与待归档数据的源表的结构,如果结构不一致,则根据源表的结构更新目标表的结构,再将获取的待归档数据存储到更新后的目标表。
[0103] 如图4所示,在一些实施例中,该装置还包括:监控模块450用于确定任务队列中的未执行的归档任务的数量;在未执行的归档任务的数量超过阈值的情况下,降低创建归档任务和放入任务队列速率,或者,提高从任务队列中取出归档任务并执行的速率。
[0104] 如图4所示,在一些实施例中,该装置还包括:调整模块460用于根据待归档数据的地址信息对应的源数据库的负载信息,调整并行度。
[0105] 如图4所示,在一些实施例中,该装置还包括:显示模块470用于显示归档规则,已归档的待归档数据的数量,归档速率中至少一项信息。
[0106] 本公开的实施例中的数据归档的装置可各由各种计算设备或计算机系统来实现,下面结合图5以及图6进行描述。
[0107] 图5为本公开数据归档的装置的一些实施例的结构图。如图5所示,该实施例的装置50包括:存储器510以及耦接至该存储器510的处理器520,处理器520被配置为基于存储在存储器510中的指令,执行本公开中任意一些实施例中的数据归档的方法。
[0108] 其中,存储器510例如可以包括系统存储器、固定非易失性存储介质等。系统存储器例如存储有操作系统、应用程序、引导装载程序(Boot Loader)、数据库以及其他程序等。
[0109] 图6为本公开数据归档的装置的另一些实施例的结构图。如图6所示,该实施例的装置60包括:存储器510以及处理器520,分别与存储器610以及处理器620类似。还可以包括输入输出接口630、网络接口640、存储接口650等。这些接口630,640,650以及存储器610和处理器620之间例如可以通过总线660连接。其中,输入输出接口630为显示器、鼠标、键盘、触摸屏等输入输出设备提供连接接口。网络接口640为各种联网设备提供连接接口,例如可以连接到数据库服务器或者云端存储服务器等。存储接口650为SD卡、U盘等外置存储设备提供连接接口。
[0110] 本领域内的技术人员应当明白,本公开的实施例可提供为方法、系统、或计算机程序产品。因此,本公开可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本公开可采用在一个或多个其中包含有计算机可用程序代码的计算机可用非瞬时性存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
[0111] 本公开是参照根据本公开实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解为可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
[0112] 这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
[0113] 这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
[0114] 以上所述仅为本公开的较佳实施例,并不用以限制本公开,凡在本公开的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本公开的保护范围之内。