数据同步方法、装置、电子设备、存储介质和程序产品转让专利

申请号 : CN202210660639.7

文献号 : CN114741367B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 曹皓爽

申请人 : 腾讯科技(深圳)有限公司

摘要 :

本申请实施例公开了一种数据同步方法、装置、电子设备、存储介质和程序产品;该方法包括:从日志文件的变更数据中获取待存储变更数据;若第一缓存中的已存数据存储量小于预设存储阈值,将待存储变更数据存储至第一缓存中;若第一缓存中的已存数据存储量不小于预设存储阈值,则将待存储变更数据转存至外部存储器,并从日志文件中删除待存储变更数据;将外部存储器中的预设数据量的待存储变更数据转存至第二缓存;根据预设查找规则,在第一缓存、第二缓存以及外部存储器中查找待发送数据;向目标端发送所述待发送数据。本申请可在数据进行转存并删除日志文件中对应的数据,避免造成额外的存储压力导致数据的丢失,提升数据同步的可靠性。

权利要求 :

1.一种数据同步方法,其特征在于,所述方法包括:

将对数据的变更操作对应的变更数据存储,得到日志文件,所述日志文件中的变更数据具有对应的日志标识,所述日志标识指示所述变更数据写入所述日志文件的顺序;

根据所述日志文件中的日志标识,按照所述日志标识对应的写入顺序,从所述日志文件的变更数据中获取待存储变更数据;

若第一缓存中的已存数据存储量小于预设存储阈值,将所述待存储变更数据存储至所述第一缓存中;

若所述第一缓存中的已存数据存储量不小于所述预设存储阈值,则将所述待存储变更数据转存至外部存储器,并从所述日志文件中删除所述待存储变更数据;

在将所述待存储变更数据转存至外部存储器时,生成通知信号,以指示根据所述外部存储器中的待存储变更数据的日志标识所对应的写入顺序从早到迟的顺序,将所述外部存储器中的预设数据量的所述待存储变更数据转存至第二缓存;

根据上一次发送成功的待发送数据对应的日志标识确定目标日志标识,依次在所述第一缓存、所述第二缓存以及所述外部存储器中查找与所述目标日志标识对应的待存储变更数据作为待发送数据,所述待发送数据为当前待同步至目标端的数据;

向所述目标端发送所述待发送数据。

2.根据权利要求1所述的方法,其特征在于,所述将所述外部存储器中的预设数据量的所述待存储变更数据转存至第二缓存,包括:根据所述日志标识,确定所述外部存储器中的待存储变更数据对应的写入顺序;

根据所述写入顺序,从所述外部存储器中筛选出所述预设数据量的所述待存储变更数据;

将所述预设数据量的所述待存储变更数据存储至所述第二缓存中。

3.根据权利要求1所述的方法,其特征在于,根据预设查找规则,在所述第一缓存、所述第二缓存以及外部存储器中查找所述待发送数据,包括:获取目标日志标识;

根据所述预设查找规则,在所述第一缓存、所述第二缓存以及所述外部存储器中,查找与所述目标日志标识对应的待存储变更数据,得到待过滤变更数据;

对所述待过滤变更数据进行过滤处理,得到所述待发送数据。

4.根据权利要求3所述的方法,其特征在于,所述根据所述预设查找规则,在所述第一缓存、所述第二缓存以及外部存储器中,查找与所述目标日志标识对应的变更数据,得到待过滤变更数据,包括:根据所述预设查找规则,依次在所述第一缓存、所述第二缓存、所述外部存储器中查找与所述目标日志标识对应的待存储变更数据;

将查找到的与所述目标日志标识对应的待存储变更数据确定为所述待过滤变更数据。

5.根据权利要求3所述的方法,其特征在于,所述根据所述预设查找规则,在所述第一缓存、所述第二缓存以及外部存储器中,查找与所述目标日志标识对应的变更数据,得到待过滤变更数据,包括:根据所述预设查找规则,确定所述第一缓存、所述第二缓存以及外部存储器对应的优先级;

按照优先级从高到低的顺序,从所述第一缓存、所述第二缓存以及外部存储器中查找与所述目标日志标识对应的变更数据;

将查找到的与所述目标日志标识对应的变更数据确定为所述待过滤变更数据。

6.根据权利要求3所述的方法,其特征在于,所述对所述待过滤变更数据进行过滤处理,得到所述待发送数据,包括:根据预设过滤规则,确定待保留的数据类型;

从所述待过滤变更数据中,提取出与所述待保留的数据类型对应的数据,得到所述待发送数据。

7.根据权利要求3所述的方法,其特征在于,所述对所述待过滤变更数据进行过滤处理,得到所述待发送数据,包括:根据预设过滤规则,确定待过滤的数据类型;

从所述待过滤变更数据中,删除与所述待过滤的数据类型对应的数据,得到所述待发送数据。

8.根据权利要求1所述的方法,其特征在于,所述向所述目标端发送所述待发送数据,包括:将所述待发送数据组装为预设数据结构,得到目标数据包;

向所述目标端发送所述目标数据包。

9.根据权利要求1所述的方法,其特征在于,所述向所述目标端发送所述待发送数据之后,还包括:获取针对所述待发送数据的反馈信息,所述反馈信息包括发送成功或发送失败;

若所述反馈信息为发送失败,重新发送所述待发送数据,直到所述待发送数据发送成功;

若所述反馈信息为发送成功,将所述待发送数据对应的变更数据从所述日志文件中删除。

10.根据权利要求1‑9任一项所述的方法,其特征在于,根据预设查找规则,在所述第一缓存、所述第二缓存以及外部存储器中查找待发送数据之后,所述方法还包括:获取所述待发送数据对应的发送进度信息,并将所述发送进度信息存放在元数据中。

11.根据权利要求10所述的方法,其特征在于,若所述待发送数据发送成功,所述方法还包括:对所述待发送数据对应的发送进度信息进行更新。

12.一种数据同步装置,其特征在于,所述装置包括:

获取模块,用于将对数据的变更操作对应的变更数据存储,得到日志文件,所述日志文件中的变更数据具有对应的日志标识,所述日志标识指示所述变更数据写入所述日志文件的顺序;

根据所述日志文件中的日志标识,按照所述日志标识对应的写入顺序,从所述日志文件的变更数据中获取待存储变更数据;

存储模块,用于若第一缓存中的已存数据存储量小于预设存储阈值,将所述待存储变更数据存储至所述第一缓存中;

第一转存模块,用于若所述第一缓存中的已存数据存储量不小于所述预设存储阈值,则将所述待存储变更数据转存至外部存储器,并从所述日志文件中删除所述待存储变更数据;

第二转存模块,用于在将所述待存储变更数据转存至外部存储器时,生成通知信号,以指示根据所述外部存储器中的待存储变更数据的日志标识所对应的写入顺序从早到迟的顺序,将所述外部存储器中的预设数据量的所述待存储变更数据转存至第二缓存;

查找模块,用于根据上一次发送成功的待发送数据对应的日志标识确定目标日志标识,依次在所述第一缓存、所述第二缓存以及所述外部存储器中按照待存储变更数据的日志标识所对应的写入顺序从早到迟的顺序查找与所述目标日志标识对应的待存储变更数据作为待发送数据,所述待发送数据为当前待同步至目标端的数据;

同步模块,用于向所述目标端发送所述待发送数据。

13.一种电子设备,其特征在于,包括处理器和存储器,所述存储器存储有多条指令;所述处理器从所述存储器中加载指令,以执行如权利要求1~11任一项所述的数据同步方法中的步骤。

14.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质存储有多条指令,所述指令适于处理器进行加载,以执行权利要求1~11任一项所述的数据同步方法中的步骤。

15.一种计算机程序产品,其特征在于,包括计算机程序/指令,所述计算机程序/指令被处理器执行时实现权利要求1~11任一项所述的数据同步方法中的步骤。

说明书 :

数据同步方法、装置、电子设备、存储介质和程序产品

技术领域

[0001] 本申请涉及数据存储技术领域,具体涉及一种数据同步方法、装置、电子设备、存储介质和程序产品。

背景技术

[0002] 在分布式存储中,通常需要捕获数据库中出现变化的数据,即变更数据,然后将变更数据进行同步或备份等处理。在捕获数据库中的变更数据时,通常可以采用基于预写日志的捕获技术,即数据库会将所有更改操作在写入到存储引擎前,先存储在事物日志中,因此,可以依据该日志文件,捕获到变更数据。
[0003] 然而,由于捕获的变更数据需要传输至目标端,当网络出现波动异常目标端出现不可服务时,则可能造成批量数据同步失败,甚至可能导致数据丢失,难以实现可靠的数据同步。

发明内容

[0004] 本申请实施例提供一种数据同步方法、装置、电子设备、存储介质和程序产品,可以提升数据同步的可靠性。
[0005] 本申请实施例提供一种数据同步方法,包括:
[0006] 根据日志文件中的日志标识,按照所述日志标识对应的写入顺序,从所述日志文件的变更数据中获取待存储变更数据;
[0007] 若第一缓存中的已存数据存储量小于预设存储阈值,将所述待存储变更数据存储至所述第一缓存中;
[0008] 若所述第一缓存中的已存数据存储量不小于所述预设存储阈值,则将所述待存储变更数据转存至外部存储器,并从所述日志文件中删除所述待存储变更数据;
[0009] 将所述外部存储器中的预设数据量的所述待存储变更数据转存至第二缓存;
[0010] 根据预设查找规则,在所述第一缓存、所述第二缓存以及所述外部存储器中查找待发送数据,所述待发送数据为当前待同步至目标端的数据;
[0011] 向所述目标端发送所述待发送数据。
[0012] 本申请实施例还提供一种数据同步装置,包括:
[0013] 获取模块,用于根据日志文件中的日志标识,按照所述日志标识对应的写入顺序,从所述日志文件的变更数据中获取待存储变更数据;
[0014] 存储模块,用于若第一缓存中的已存数据存储量小于预设存储阈值,将所述待存储变更数据存储至所述第一缓存中;
[0015] 第一转存模块,用于若所述第一缓存中的已存数据存储量不小于所述预设存储阈值,则将所述待存储变更数据转存至外部存储器,并从所述日志文件中删除所述待存储变更数据;
[0016] 第二转存模块,用于将所述外部存储器中的预设数据量的所述待存储变更数据转存至第二缓存;
[0017] 查找模块,用于根据预设查找规则,在所述第一缓存、所述第二缓存以及所述外部存储器中查找待发送数据,所述待发送数据为当前待同步至目标端的数据;
[0018] 同步模块,用于向所述目标端发送所述待发送数据。
[0019] 在一些实施例中,第二转存模块还包括:
[0020] 转存单元,用于根据所述日志标识,确定所述外部存储器中的待存储变更数据对应的写入顺序;
[0021] 筛选单元,用于根据所述写入顺序,从所述外部存储器中筛选出所述预设数据量的所述待存储变更数据;
[0022] 存储单元,用于将所述预设数据量的所述待存储变更数据存储至所述第二缓存中。
[0023] 在一些实施例中,查找模块还包括:
[0024] 标识获取单元,用于获取目标日志标识;
[0025] 查找单元,用于根据所述预设查找规则,在所述第一缓存、所述第二缓存以及外部存储器中,查找与所述目标日志标识对应的待存储变更数据,得到待过滤变更数据;
[0026] 过滤单元,用于对所述待过滤变更数据进行过滤处理,得到所述待发送数据。
[0027] 在一些实施例中,查找单元还用于:
[0028] 根据所述预设查找规则,依次在所述第一缓存、第二缓存、外部存储器中查找与所述目标日志标识对应的待存储变更数据;
[0029] 将查找到的与所述目标日志标识对应的待存储变更数据确定为所述待过滤变更数据。
[0030] 在一些实施例中,查找单元还用于:
[0031] 根据所述预设查找规则,确定所述第一缓存、所述第二缓存以及外部存储器对应的优先级;
[0032] 按照优先级从高到低的顺序,从所述第一缓存、所述第二缓存以及外部存储器中查找与所述目标日志标识对应的变更数据;
[0033] 将查找到的与所述目标日志标识对应的变更数据确定为所述待过滤变更数据。
[0034] 在一些实施例中,过滤单元还用于:
[0035] 根据预设过滤规则,确定待保留的数据类型;
[0036] 从所述待过滤变更数据中,提取出与所述待保留的数据类型对应的数据,得到所述待发送数据。
[0037] 在一些实施例中,过滤单元还用于:
[0038] 根据预设过滤规则,确定待过滤的数据类型;
[0039] 从所述待过滤变更数据中,删除与所述待过滤的数据类型对应的数据,得到所述待发送数据。
[0040] 在一些实施例中,同步模块还用于:
[0041] 将所述待发送数据组装为预设数据结构,得到目标数据包;
[0042] 向所述目标端发送所述目标数据包。
[0043] 在一些实施例中,数据同步装置还包括反馈模块,向所述目标端发送所述待发送数据之后,反馈模块用于:
[0044] 获取针对所述待发送数据的反馈信息,所述反馈信息包括发送成功或发送失败;
[0045] 若所述反馈信息为发送失败,重新发送所述待发送数据,直到所述待发送数据发送成功;
[0046] 若所述反馈信息为发送成功,将所述待发送数据对应的变更数据从所述日志文件中删除。
[0047] 在一些实施例中,数据同步装置还包括进度记录模块,根据预设查找规则,在所述第一缓存、第二缓存以及外部存储器中查找待发送数据之后,进度记录模块用于:
[0048] 获取所述待发送数据对应的发送进度信息,并将所述发送进度信息存放在元数据中。
[0049] 在一些实施例中,若所述待发送数据发送成功,进度记录模块还用于:
[0050] 对所述待发送数据对应的发送进度信息进行更新。
[0051] 本申请实施例还提供一种电子设备,包括存储器存储有多条指令;所述处理器从所述存储器中加载指令,以执行本申请实施例所提供的任一种数据同步方法中的步骤。
[0052] 本申请实施例还提供一种计算机可读存储介质,所述计算机可读存储介质存储有多条指令,所述指令适于处理器进行加载,以执行本申请实施例所提供的任一种数据同步方法中的步骤。
[0053] 本申请实施例还提供一种计算机程序产品,包括计算机程序/指令,所述计算机程序/指令被处理器执行时实现本申请实施例所提供的任一种数据同步方法中的步骤。
[0054] 本申请实施例可以根据日志标识所指示的写入顺序,从日志文件中获取待存储变更数据,在第一缓存中的已存储数据量小于预设存储阈值时,将待存储变更数据存入第一缓存,当第一缓存中的已存储数据量不小于预设存储阈值时,将待存储变更数据转存至外部存储器,并删除日志文件中对应的数据,避免日志文件中的数量过大,造成额外的存储压力导致数据的丢失。将预设数据量的待存储变更数据从外部存储器中转存至第二缓存,提升从外部存储器中读取数据的速率,从第一缓存、第二缓存和外部存储器中查找待发送数据并发送,可避免漏发数据,进一步提升数据同步的可靠性,从而可知在本申请中,既可以保证将数据快速同步至目标端,也可以避免数据的丢失和遗漏,提升了数据同步的可靠性。

附图说明

[0055] 为了更清楚地说明本申请实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
[0056] 图1a是本申请实施例提供的数据同步方法的场景示意图;
[0057] 图1b是本申请实施例提供的数据同步方法的流程示意图;
[0058] 图1c是本申请实施例提供的数据同步方法的框架图;
[0059] 图1d是本申请实施例提供的数据同步方法的整体架构图;
[0060] 图2a是本申请另一实施例提供的数据同步方法的流程示意图;
[0061] 图2b是本申请实施例提供的各个组件的交互示意图;
[0062] 图3是本申请实施例提供的数据同步装置的种结构示意图;
[0063] 图4是本申请实施例提供的电子设备的结构示意图。

具体实施方式

[0064] 下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
[0065] 本申请实施例提供一种数据同步方法、装置、电子设备、存储介质和程序产品。
[0066] 其中,该数据同步装置具体可以集成在电子设备中,该电子设备可以为终端、服务器等设备。其中,终端可以为手机、平板电脑、智能蓝牙设备、笔记本电脑、或者个人电脑(Personal Computer,PC)等设备;服务器可以是单一服务器,也可以是由多个服务器组成的服务器集群。
[0067] 在一些实施例中,该数据同步装置还可以集成在多个电子设备中,比如,内容推荐装置可以集成在多个服务器中,由多个服务器来实现本申请的数据同步。
[0068] 在一些实施例中,服务器也可以以终端的形式来实现。
[0069] 例如,参考图1a,示出了本申请实施例提供的数据同步的应用场景示意图。
[0070] 如图1a中所示,用户终端101和服务器102位于无线网络或有线网络中,用户终端101和服务器102进行数据交互。服务器102可以是单独的服务器,也可以是服务器集群,可以是本地服务器,也可以是云端服务器。
[0071] 用户终端101上安装有对应的应用程序,用户可以在应用程序内进行操作,以实现对应的功能,基于用户操作,用户终端101可以生成对应的用户请求,并将这些用户请求传递至服务器102中,以便服务器102对用户请求进行处理。
[0072] 例如,服务器102是一个分布式服务器集群,当其中一个服务器接收到用户请求并处理后,可以将该用户请求所产生的数据同步至所有的分布式服务器集群中所有的服务器中。例如,服务器102可以对用户请求进行解析,得到对应的任务,然后执行该任务,并将对应的数据进行存储,在进行数据存储时,可以是采用预写日志的方式,将对应的数据写入数据引擎之前,先写到日志文件中保存。
[0073] 从而,服务器102可以从日志文件中拉取待存储变更数据,若第一缓存的已存数据存储量小于预设存储阈值,将待存储变更数据存储至第一缓存中;若第一缓存中的已存数据存储量不小于预设存储阈值,则将待存储变更数据转存至外部存储器,并从所述日志文件中删除待存储变更数据;将外部存储器中的预设数据量的待存储变更数据转存至第二缓存;不同的发送模块可以根据预设查找规则,在所述第一缓存、所述第二缓存以及所述外部存储器中查找待发送数据;向所述目标端发送待发送数据,实现数据的同步。
[0074] 需要说明的是,为了保证分布式服务器集群中数据的一致性,可以使用raft共识算法,该算法中,每个服务器的所扮演的角色可以在领导者、跟随者和候选者中切换,其中领导者可以用来处理客户端的读写,也即上述接收到用户请求的服务器可以是指分布式集群中的领导者。该数据同步方法可应用于分布式服务器集群中的领导者,分布式服务器集群中的领导者发生变更后,旧领导者会主动停止执行该数据同步方法,同时,新的领导者会继续同步数据,以保证数据同步不会受到单个服务器故障的影响,以提升数据同步的可靠性。
[0075] 在一些实施例中,分布式服务器集群可以是基于区块链系统构建的,即服务器102可以作为区块链系统中的一个节点,也可以实现上述的各个步骤,例如,获取到待存储变更数据后,将待存储变更数据进行存储,然后将数据同步至区块链中的所有节点,通过共识后进行上链存储,提升数据存储的可靠性。
[0076] 其中,区块链是分布式数据存储、点对点传输、共识机制、加密算法等计算机技术的新型应用模式。区块链(Blockchain),本质上是一个去中心化的数据库,是一串使用密码学方法相关联产生的数据块,每一个数据块中包含了一批次网络交易的信息,用于验证其信息的有效性(防伪)和生成下一个区块。区块链可以包括区块链底层平台、平台产品服务层以及应用服务层。
[0077] 区块链底层平台可以包括用户管理、基础服务、智能合约以及运营监测等处理模块。其中,用户管理模块负责所有区块链参与者的身份信息管理,包括维护公私钥生成(账户管理)、密钥管理以及用户真实身份和区块链地址对应关系维护(权限管理)等,并且在授权的情况下,审核某些真实身份的交易情况,提供风险控制的规则配置(风控审计);基础服务模块部署在所有区块链节点设备上,用来验证业务请求的有效性,并对有效请求完成共识后记录到存储上,对于一个新的业务请求,基础服务先对接口适配解析和鉴权处理(接口适配),然后通过共识算法将业务信息加密(共识管理),在加密之后完整一致的传输至共享账本上(网络通信),并进行记录存储;智能合约模块负责合约的注册发行以及合约触发和合约执行,开发人员可以通过某种编程语言定义合约逻辑,发布到区块链上(合约注册),根据合约条款的逻辑,调用密钥或者其它的事件触发执行,完成合约逻辑,同时还提供对合约升级注销的功能;运营监测模块主要负责产品发布过程中的部署、配置的修改、合约设置、云适配以及产品运行中的实时状态的可视化输出,例如:告警、监测网络情况、监测节点设备健康状态等。
[0078] 平台产品服务层提供典型应用的基本能力和实现框架,开发人员可以基于这些基本能力,叠加业务的特性,完成业务逻辑的区块链实现。应用服务层提供基于区块链方案的应用服务给业务参与方进行使用。
[0079] 以下分别进行详细说明。
[0080] 云存储(cloud storage)是在云计算概念上延伸和发展出来的一个新的概念,分布式云存储系统(以下简称存储系统)是指通过集群应用、网格技术以及分布存储文件系统等功能,将网络中大量各种不同类型的存储设备(存储设备也称之为存储节点)通过应用软件或应用接口集合起来协同工作,共同对外提供数据存储和业务访问功能的一个存储系统。
[0081] 目前,存储系统的存储方法为:创建逻辑卷,在创建逻辑卷时,就为每个逻辑卷分配物理存储空间,该物理存储空间可能是某个存储设备或者某几个存储设备的磁盘组成。客户端在某一逻辑卷上存储数据,也就是将数据存储在文件系统上,文件系统将数据分成许多部分,每一部分是一个对象,对象不仅包含数据而且还包含数据标识(ID,ID entity) 等额外的信息,文件系统将每个对象分别写入该逻辑卷的物理存储空间,且文件系统会记录每个对象的存储位置信息,从而当客户端请求访问数据时,文件系统能够根据每个对象的存储位置信息让客户端对数据进行访问。
[0082] 存储系统为逻辑卷分配物理存储空间的过程,具体为:按照对存储于逻辑卷的对象的容量估量(该估量往往相对于实际要存储的对象的容量有很大余量)和独立冗余磁盘阵列(RAID,Redundant Array of Independent Disk)的组别,预先将物理存储空间划分成分条,一个逻辑卷可以理解为一个分条,从而为逻辑卷分配了物理存储空间。在本申请实施例中,服务器也可以是指分布式云存储系统中的一个存储节点,基于该数据同步方法,将数据同步至分布式云存储系统中的其他节点。
[0083] 在本实施例中,提供了一种数据同步,如图1b所示,该数据同步方法的具体流程可以如下:
[0084] S110、根据日志文件中的日志标识,按照所述日志标识对应的写入顺序,从所述日志文件的变更数据中获取待存储变更数据。
[0085] 日志文件是指预写日志算法(Write Ahead Log,WAL)所产生的文件,WAL是指数据库中一种高效的日志算法,使用WAL的数据库,会在将所有对数据的变更操作写入到存储引擎之前,先存储在事务日志中,得到日志文件。
[0086] 变更数据是指记录在日志文件中的数据,变更操作是指对数据的进行改变的操作,例如,对数据的修改、新增、或删除等等,那么变更数据即为每次变更操作所对应的数据,例如,用户对在某个数据中新增了数据A,那么该数据A则为变更数据,又例如,用户删除了数据B,那么该数据B也为变更数据。
[0087] 日志标识是指日志文件中每条数据对应的标识,该日志标识可以用来的指示日志文件中的数据的写入顺序。也即日志序列号(Log Sequence Number,LSN),写入日志文件中的每条数据均有其对应的日志标识,日志标识通常可以是按照数据的写入顺序依次递增,从而,日志标识可以指示对应的数据的写入顺序。
[0088] 根据上述内容可知,日志文件中可以包括变更数据,以及变更数据对应的日志标识,其中,日志标识可以指示变更数据写入日志文件的顺序。
[0089] 在一些实施方式中,从日志文件的变更数据中获取待存储变更数据时,可以是按照预设间隔从日志文件中,获取待存储变更数据。其中,预设间隔可以设置为1天、1个小时等等,预设间隔的具体时长可以根据实际的需要进行设置,在此不做具体限定。例如,预设间隔为1个小时,即每间隔一个小时,拉取一次日志文件中新增的变更数据。作为一种具体的实现方式,可以是预先设置有定时器,将定时器的定时时长设置为预设间隔,当定时器到达该预设间隔时,可以发出对应的信号,在接收到定时器发送的信号时,触发从日志文件中获取待存储变更数据的操作。
[0090] 作为一种实施方式,从日志文件中获取待存储变更数据时,可以是记录上一次获取待存储变更数据的时间,将在上一次获取待存储变更数据的时间之后写入日志文件中的所有变更数据,作为待存储变更数据。
[0091] 作为一种实施方式,从日志文件中获取待存储变更数据时,还可以是按照预设时间间隔获取一次,并且每次获取时,均根据日志文件中的变更数据的写入顺序,确定出指定量的变更数据为待存储变更数据。例如,日志文件中存储有日志标识为1‑10的10条变更数据,若每次拉取5条变更数据,那么第一次可以是拉取最先写入的5条变更数据,即日志标识为1‑5的变更数据,下一次则拉取日志标识为5‑10的变更数据。
[0092] S120、若第一缓存中的已存数据存储量小于预设存储阈值,将所述待存储变更数据存储至所述第一缓存中。
[0093] 第一缓存中的已存数据存储量是指当前存储在第一缓存中的数据所占用的存储量。预设存储阈值可以是指第一缓存的最大存储阈值,也可以是预先设定的一个存储阈值。当第一缓存中的已存数据存储量小于预设存储阈值时,可以认为第一缓存中还可以继续存放待存储变更数据,从而,可以直接将待存储变更数据存储至第一缓存中。
[0094] S130、若所述第一缓存中的已存数据存储量不小于所述预设存储阈值,则将所述待存储变更数据转存至外部存储器,并从所述日志文件中删除所述待存储变更数据。
[0095] 若第一缓存中已存数据存储量不小于预设存储阈值,表明第一缓存中不能再存放其他数据,从而无法将待存储变更数据存放在第一缓存中。为了避免日志文件中数据过多,造成较大存储压力,可以在第一缓存中已存储数据存储量不小于预设存储阈值时,将待存储变更数据转存至外部存储器,并从日志文件中删除待存储变更数据。
[0096] 第一缓存可以是指电子设备内部的存储,外部存储器是指在电子设备外部的存储,该外部存储器可以是指数据库,服务器,或者是提供存储服务的平台等等。
[0097] 将待存储变更数据存放在外部存储器中之后,可以将日志文件中的待存储变更数据删除,以避免日志文件中的数据量过多,造成额外的存储压力,同时也可以避免日志文件中数据量过多,而影响到变更数据的写入,避免变更数据的丢失。
[0098] S140、将所述外部存储器中的预设数据量的所述待存储变更数据转存至第二缓存。
[0099] 由于外部存储器是在电子设备外部的存储,因此,将待存储变更数据的存入外部存储器,或者从外部存储器中取出数据时,均会消耗较长的时间,为了提升数据的读取效率,可以将外部存储器中的预设数据量的待存储变更数据转存至第二缓存。其中,第二缓存也为电子设备内部的存储,第二缓存和第一缓存可以组成电子设备内部的链式缓存。
[0100] 在一些实施方式中,将外部存储器中的预设数据量的待存储变更数据转存至第二缓存时,可以是根据所述日志标识,确定所述外部存储器中的待存储变更数据对应的写入顺序;根据所述写入顺序,从所述外部存储器中筛选出所述预设数据量的所述待存储变更数据;将所述预设数据量的所述待存储变更数据存储至所述第二缓存中。
[0101] 其中,待存储变更数据是日志文件中的变更数据,也具有其对应的日志标识,基于日志标识可以确定出待存储变更数据对应的写入顺序。预设数据量是指第二缓存中存储的待存储变更数据的数据量,也即,仅将外部存储器中的预设数据量的待存储变更数据转存至第二缓存中。
[0102] 具体在从外部存储器中筛选出预设数据量的待存储变更数据时,可以在外部存储器中,按照写入顺序确定出预设数据量的待存储变更数据,然后将该预设数据量的待存储变更数据转存至第二缓存中。按照写入顺序依次确定出预设数据量的待存储变更数据,可以避免数据的遗漏,确保每条待存储变更数据均可以被同步。
[0103] 例如,预设数据量为3,待存储变更数据对应的日志标识为5‑10,其中,日志标识序号越大,表示写入顺序越迟,从而可以将日志标识为5‑7对应的待存储变更数据转存至第二缓存中。此时,第一缓存中存储着日志标识为1‑4的待存储变更数据,第二缓存中存储着日志标识为5‑7对应的待存储变更数据,外部存储器中存储着日志标识为8‑10对应的待存储变更数据。由于待存储变更数据转存至外部存储器之后,删除了日志文件中对应的数据,那么日志文件中则记录着日志标识为1‑4对应的待存储变更数据。
[0104] S150、根据预设查找规则,在所述第一缓存、所述第二缓存以及所述外部存储器中查找待发送数据,所述待发送数据为当前待同步至目标端的数据。
[0105] 通过上述步骤可知,从日志文件中获取到待存储变更数据,并根据第一缓存中已存数据存储量,将待存储变更数据进行了存储。为了实现数据在分布式系统中的同步,可以从存储待存储变更数据的地方获取到待发送数据,以便将待发送数据发送到目标端,以便将数据同步至目标端。
[0106] 预设查找规则是指在第一缓存、第二缓存以及外部存储器中查找待发送数据时,需要遵循的规则。在一些实施方式中,查找待发送数据时,可以是获取目标日志标识;根据所述预设查找规则,在第一缓存、第二缓存以及外部存储器中,查找与所述目标日志标识对应的待存储变更数据,得到待过滤变更数据;对所述待过滤变更数据进行过滤处理,得到所述待发送数据;将日志文件中的变更数据进行存储之后,为了实现数据的同步,可以查找到当前待同步至目标端的数据,即待发送数据。
[0107] 目标日志标识是指将要被发送的变更数据所对应的日志标识,在一些实施方式中,为了保证日志文件中的每条变更数据均可以进行同步,可以是按照变更数据写入日志文件的写入顺序,依次同步变更数据。目标日志标识可以是根据上一次发送成功的待发送数据对应的日志标识确定的,例如,可以是获取上一次发送成功的待发送数据对应的日志标识,得到上一日志标识;然后是确定出日志文件中,上一日志标识对应的下一日志标识,将该下一日志标识,确定为目标日志标识。例如,上一次发送成功的待发送数据对应的日志标识为4,即上一日志标识为4,将5确定为目标日志标识。
[0108] 在确定出目标日志标识后,可以根据预设查找规则,在第一缓存、第二缓存以及外部存储器中,查找与所述目标日志标识对应的待存储变更数据,得到待过滤变更数据。
[0109] 在一些实施方式中,预设查找规则中可以包括查找顺序,例如,查找顺序可以是先查找第一缓存、再查找第二缓存、再查找外部存储器。也就是说,可以是根据预设查找规则,依次从第一缓存、第二缓存以及外部存储器中,查找与目标日志标识对应的待存储变更数据。
[0110] 例如,在查找待过滤变更数据时,可以是先在第一缓存中查找和目标日志标识对应的待存储变更数据;若在第一缓存中查找到与目标日志标识对应的待存储变更数据,则将查找到的待存储变更数据确定为待过滤变更数据;若在第一缓存中未查找到与目标日志标识对应的待存储变更数据,则继续在第二缓存中查找;若在第二缓存中查找到与目标日志标识对应的待存储变更数据,将查找到的待存储变更数据确定为待过滤变更数据;若在第二缓存中未查找到与目标日志标识对应的待存储变更数据,则在外部存储器中查找;若在外部存储器中查找到与目标日志标识对应的待存储变更数据,将查找到的待存储变更数据确定为待过滤变更数据。
[0111] 由于第一缓存和第二缓存均为电子设备内部的缓存,而外部存储器为电子设备外部的存储,那么读取第一缓存和第二缓存中的数据的效率是高于读取外部存储器中的数据的效率。由此,按照第一缓存、第二缓存和外部存储器的顺序依次查找,可以提升数据的查找效率。
[0112] 在一些实施方式中,根据预设查找规则查找待过滤变更数据时,还可以是根据所述预设查找规则,确定所述第一缓存、所述第二缓存以及外部存储器对应的优先级;按照优先级从高到低的顺序,从所述第一缓存、所述第二缓存以及外部存储器中查找与所述目标日志标识对应的待存储变更数据;将查找到的与所述目标日志标识对应的待存储变更数据确定为所述待过滤变更数据。
[0113] 预设查找规则中可以是包括第一缓存、第二缓存以及外部存储器对应的优先级,其中,优先级可以是预先设定好的。在获取到第一缓存、第二缓存以及外部存储器对应的优先级后,可以按照优先级从高到低的顺序,从第一缓存、第二缓存以及外部存储器中查找与目标日志标识对应的待存储变更数据。例如,第二缓存的优先级高于第一缓存,第一缓存的优先级高于外部存储器,则是先在第二缓存中查找;若在第二缓存中未查找到,则在第一缓存中查找;若未在第一缓存中查找到,则继续在外部存储器中查找。
[0114] 在查找到与目标日志标识对应的待存储变更数据后,可以得到待过滤变更数据。通常,日志文件中记录的变更数据可以分为用户类型和系统类型,其中,用户类型是指用户操作所产生的变更数据,系统类型是指对元数据进行操作所产生的变更数据。
[0115] 在一些实施方式中,对待过滤变更数据进行过滤处理,得到待发送数据,可以是根据预设过滤规则进行过滤,得到待发送数据。
[0116] 预设过滤规则可以是用户根据实际的需要设置的规则,其中,预设过滤规则中可以是设置需要保留的数据类型或者需要剔除的数据类型。
[0117] 作为一种实施方式,预设过滤规则中可以设置需要保留的数据类型,则可以根据预设过滤规则,确定出待保留的数据类型;然后从待过滤变更数据中,提取出与待保留的数据类型对应的数据,得到待发送数据。例如,待保留的数据类型为用户类型,则可以从待过滤数据中提取出用户类型的数据,得到待发送数据。
[0118] 作为另一种实施方式,预设过滤规则中可以设置需要剔除的数据类型,则可以根据预设过滤规则,确定待过滤的数据类型;从所述待过滤变更数据中,删除与所述待过滤的数据类型对应的数据,得到所述待发送数据。例如,待过滤的数据类型为系统类型,则可以从待过滤变更数据中,将系统类型的数据删除,然后将删除了系统类型的待过滤变更数据,确定为待发送数据。
[0119] S160、向所述目标端发送所述待发送数据。
[0120] 在得到待发送数据之后,可以将向目标端发送待发送数据,以实现将待发送数据同步到目标端。在一些实施方式中,向目标端发送待发送数据可以是将待发送数据组装为预设数据结构,得到目标数据包;向目标端发送目标数据包。
[0121] 预设数据结构可以是指和目标端进行通信时,需要遵守的通信协议所指定的数据结构。在将待发送数据组装为预设数据结构时,可以是先获取数据包模板,该数据包模板中可以包括和目标端通信时的必要字段,将待发送数据插入数据包模板中指定位置处,即可以得到目标数据包。然后向目标端发送该目标数据包,以便可以和目标端进行正常通信,实现数据的同步。
[0122] 在一些实施方式中,变更数据在写入日志文件时,通常是将数据封装成一条日志项LogEntry,然后将其追加到日志文件中,那么LogEntry可以认为是变更数据本身所具有的数据结构,也即待发送数据本身的数据结构。在将待发送数据组装成预设数据结构时,若存在多个待发送数据,可以直接将多个待发送数据拼接在一起,得到目标数据包。
[0123] 在一些实施方式中,向目标端发送待发送数据之后,还可以根据待发送数据的发送情况,执行后续步骤。例如,可以是获取针对所述待发送数据的反馈信息,所述反馈信息包括发送成功或发送失败;若所述反馈信息为发送失败,重新发送所述待发送数据,直到所述待发送数据发送成功;若所述反馈信息为发送成功,将所述待发送数据从所述日志文件中删除。
[0124] 可以理解的是,数据的传输受到目标端的状态和网络影响,若目标端的服务不可用,则可能导致待发送数据无法送达目标端,从而导致发送失败。若网络情况不好,也可能导致和目标端的连接超时,进一步导致数据发送失败。为了确保数据可以同步至目标端,在发送待发送数据之后,可以接收针对待发送数据的反馈信息,该反馈信息可以包括发送成功或发送失败,从而可以获知数据是否同步成功。
[0125] 在一些实施方式中,可以是在向目标端发送待发送数据后的预设时间段内,确定是否接收到预设信息,若接收到预设信息则可以认为待发送数据发送失败;若未接收到预设信息,则可以认为待发送数据已经成功发送至目标端。
[0126] 在一些实施方式中,可以接收针对待发送信息的反馈信息,在接收到反馈信息后,根据预先存储的映射关系表,确定接收到的是发送成功还是发送失败。其中,映射关系表中可以包括反馈信息与发送情况的对应关系。例如,代码1,对应的发送情况为发送失败,代码2对应的发送情况为发送成功。若接收到的反馈信息为1,则可以认为待发送数据发送失败;
若接收到的反馈信息为2,则可以认为待发送数据发送成功。
[0127] 若待发送数据发送失败,为了确定待发送数据可以同步至目标端,可以不断重新发送待发送数据,直到待发送数据发送成功。若待发送数据发送成功,表明待发送数据已经同步至目标端,从而可以删除掉日志文件中和待发送数据对应的变更数据。
[0128] 可以理解的是,日志文件中的变更数据到待发送数据,可以是经过了如下的变换过程:变更数据‑待存储数据‑待过滤数据‑待发送数据,从而可以确定出和待发送数据对应的变更数据。
[0129] 作为一种实施方式,可以是获取待发送数据对应的日志标识,也即目标日志标识,然后目标日志标识对应的变更数据从日志文件中删除,避免日志文件中的数据量过多,造成额外的存储压力。
[0130] 在一些实施方式中,为了保证每条变更数据都可以同步至目标端,在查找到待发送数据后,可以获取待发送数据对应的发送进度信息,并将发送进度信息存放在元数据中。例如,在确定出待发送数据准备发送时,可以将发送进度信息确定为开始发送,并写入元数据中。
[0131] 在待发送数据成功发送至目标端后,可以是将发送进度信息更新为发送成功。从而可以实现对每个发送的数据的进度进行管理,避免遗漏。
[0132] 需要说明的是,执行S120之后可直接执行S150‑S160,执行S130之后,可继续执行S140‑S160,也就是说S120和S130‑S140为择一执行,若执行S120,则无需执行S130‑S140。
[0133] 为了进一步详细阐述上述步骤,可参阅图1c,示出了数据同步方法的框架的示意图,本申请实施例提供的数据同步方法依赖于数据同步框架实现,数据同步框架可部署在分布式集群中的领导者服务器上。
[0134] 在图1c中,在接收到用户请求,将用户请求转为任务处理之后,数据则会走向分布式层Replicator(raft),然后数据写入KVEngine即存储引擎之前,先将其写入WAL即日志文件中。将数据同步至其他服务器时,可以是依赖数据同步框架中的Source模块,即源数据拉取模块,定时从WAL中捕获数据,然后将数据交由Sink模块,即发送模块,再由发送模块将数据发送到目标端。
[0135] 其中,对于同一种源数据拉取模块拉取到的数据,可以定义多种不同的发送模块。例如,图1c中所示出的发送模块1,发送模块2,发送模块3和发送模块4均为不同的发送模块,其中,发送模块1可以是指BackUp  Sink即备份发送模块、发送模块2可以是指MultiRegion Sink即多区域发送模块、发送模块3可以是指Flink Sink即Flink发送模块,发送模块4可以是指Kafka Sink即Kafka发送模块等等,并且用户可以随时添加或删除发送模块,以提供了高可扩展性。不同的发送模块对应的实时性要求可能不同,因此,可以针对不同的发送模块对其中发送数据进行不同的流控管理,并且每个发送模块内部可以自定义过滤模块,实现了较好的流控管理,并且不同的发送模块之间并不会相互影响。
[0136] 上述的步骤中,可以将每个发送模块的发送进度信息统一存放在元数据中,并持久化到磁盘中,当前的领导者服务器出现故障,也可以依托一致性算法切换领导者服务器,旧领导者会主动停止执行该数据同步方法,同时,新的领导者会继续同步数据,以确保数据可以正常同步,提升数据同步的可靠性。
[0137] 例如,服务器A正在执行数据同步,且同步到日志标识为5的数据,但服务器A出现故障导致日志标识为5的数据并未同步成功,此时,可自动切换为新的领导者,即服务器B,服务器A停止数据同步,转由服务器B继续同步日志标识为5的数据。
[0138] 上述各个步骤中可由不同的数据同步框架中不同组件的执行。例如,可参阅图1d,示出了数据同步方法的整体架构示意图。
[0139] 其中,GateWay是系统的接入层,DBS是系统存储层,数据在DBS中可以被分成多个分片(partition),每个分片会存在多个副本,副本之间可以通过分布式共识算法维护数据的一致性,每个副本中可以包含存储引擎和日志文件。
[0140] 其中,分片是指将数据分成多个片,存储在多个服务器上,每个服务器上的数据叫做一个分片,副本是指对每个分片构建多个备份,即将每个分片存储在多个服务器上,避免数据丢失。其中,数据同步方法的框架部署在领导者副本中,当领导者副本出现变化后,旧领导者副本可自动停止数据同步,新领导者副本继续数据同步,从而不会影响到数据的同步,有效解决了传输过程中不可靠的问题,提升了整个数据同步的容错性。
[0141] 下面将结合图1d,对数据同步框架中的各个组件进行详细说明。
[0142] Source是指源数据拉取模块,Stream是指流进度管理模块,Sink是指发送模块,Filter是指过滤模块,ChainBufferCache是指链式缓存。
[0143] Source,负责同步日志文件中的变更数据以及汇总Sink的进度信息。在启动的时候会开启一个定时器,定时从日志文件中拉取其中的变更数据,得到待存储变更数据,并将待存储变更数据放到链式缓存中,需要说明的是,定时器的触发时间间隔是用户可配置的。同时,可以汇总不同发送模块的发送进度信息,并将进度信息持久化到元数据中,并触发丢弃日志文件中的变更数据的操作。
[0144] Stream,负责管理多个发送模块中的数据流的生命周期。每个分片对应一个Stream实例,一个Stream实例中包含一个Source实例和多个Sink实例,Sink种类和数量是用户可配置的。
[0145] Sink,负责将捕获的数据流发送到远程对端。定时从ChainBufferCache中提取数据并发送到远程对端,并向Source更新发送进度信息。
[0146] ChainBufferCache链式缓存,由多层缓存组成,第一层是WalBufferCache,即第一缓存,第二层是CosBufferCache,即第二缓存。无论是读取操作、写入操作还是删除操作,都会先去第一层中执行,如果没有找到对应的数据再去下一层接着执行,以此类推。
[0147] Filter,负责过滤筛选可发送的信息和流控管理,将过滤后的数据组装成基本收发单元Frame,并以Frame为单位进行网络收发。
[0148] 在图1d中,源数据拉取模块可以从WAL中拉取数据并通过流进度管理模块,然后不同的发送模块可以将数据发送到不同的目标端,例如,MultiRegion Sink即多区域发送模块,可以将数据从区域A发送到目标端区域B实现异地数据复制,BackUp Sink即备份发送模块,可以将数据从区域A发送到目标端远程备份端实现数据备份,第三方数据库发送模块例如Kafka Sink,可以将数据从区域A发送到目标端Kafka,实现接入第三方数据库。流进度管理模块可以对发送模块的种类和数据进行设置,每个发送模块内部可以根据需要定义不同过滤模块,实现了较好的流控管理。可见依赖于各个组件之间的相互配合,可以实现数据的流控管理,并且在数据发送出现异常导致第一缓存中无法存入数据时,可以及时将数据进行转存,避免造成额外的存储压力,导致数据丢失等情况,可进一步提升数据同步的可靠性。
[0149] 本申请实施例提供的数据同步方案可以应用在各种分布式系统中数据同步场景中。比如,以异地复制为例,在网络出现波动时,若第一缓存中无法继续存入待存储变更数据,可以将待存储变更数据进行转存,避免日志文件中数据量过大,导致额外的存储压力和数据丢失的情况,提升数据同步的可靠性。
[0150] 由上可知,本申请实施例可以在第一缓存中的已存储数据量不小于预设存储阈值时,将待存储变更数据先转存至外部存储器中,并删除日志文件中的对应的数据,以避免日志文件中的数据量过多,造成额外的存储压力导致数据的丢失,提升数据同步的可靠性。然后将外部存储器中的部分数据转存到第二缓存,并按照预设查找规则查找待发送数据,以提升数据的查找效率,从而可以有效提升数据同步的可靠性和效率。
[0151] 根据上述实施例所描述的方法,以下将作进一步详细说明。
[0152] 在本实施例中,将以异地复制功能为例,对本申请实施例的方法进行详细说明。
[0153] 如图2a所示,一种数据同步方法具体流程如下:
[0154] S210、定时从日志文件中拉取变更数据,得到待存储变更数据。
[0155] S220、确定第一缓存中的已存储数据量是否到达预设存储阈值,若否,执行S230;若是,执行S240。
[0156] S230、将待存储变更数据存储至第一缓存中。
[0157] S240、将待存储变更数据转存至外部存储器,删除日志文件中对应的数据,并将外部存储器中的预设数据量的待存储变更数据转存至第二缓存。
[0158] S250、定时从第一缓存、第二缓存以及外部存储器中拉取数据,得到待过滤变更数据。
[0159] S260、对待过滤变更数据进行过滤,得到待发送数据,并发送待发送数据。
[0160] S270、若待发送数据发送成功,更新发送进度信息,并丢弃日志文件中的对应数据。
[0161] 日志文件中存储有变更数据,按照变更数据写入日志文件的顺序,即按照LSN定时从日志文件中拉取待存储变更数据。
[0162] 若第一缓存中的已存储数据量未达到预设存储阈值,则表明第一缓存中可继续存入数据,从而可以直接将待存储数据存储至第一缓存中。
[0163] 若第一缓存中的已存储数据量达到预设存储阈值,则表明第一缓存中无法继续存入数据,从而可以将待存储数据进行转存。需要说明的是,由于网络传输波动或者目标端的服务不可用时,则会导致第一缓存中的已存储数据量超过预设存储阈值,阻碍正常的数据写入流程,为了避免大量的日志文件堆积,可以将待存储变更数据异步投递至外部存储,然后触发删除日志文件中对应的数据。
[0164] 由于外部存储器是由系统之外的存储服务提供的,由于不论是将待存储变更数据存入外部存储器,还是从外部存储器中取出待存储变更数据,均会消耗较长的时间,为了避免直接从外部存储器中读数据,可以异步将外部存储器中的待存储变更数据,转存一部分至第二缓存中,以提升读数据的效率。在将外部存储器中的待存储变更数据转存至第二缓存时,可以是按照LSN将预设数据量的待存储变更数据转存至第二缓存中。
[0165] 由此可知,在正常情况下,待存储变更数据是存储在第一缓存中,在网络波动或目标端不可用时,待存储变更数据是存储在外部存储器以及第二缓存中。
[0166] 由此,可以从第一缓存、第二缓存和外部存储器中查找待过滤变更数据,具体的,在查找待过滤变更数据时,也要遵循LSN的顺序,并且依次在第一缓存、第二缓存、外部存储器中查找。也即先在第一缓存中查找,若没有查找到再继续在第二缓存中查找,若仍然没有查找到则在外部存储器中查找。优先在系统的内部缓存中查找,可以提升查找数据的效率,当内部缓存中无法查找到对应的数据时,再去外部存储器中查找,以确保可以查找到待过滤变更数据。
[0167] 然后对待过滤变更数据进行过滤,筛选出需要发送到目标端的内容,得到待发送数据,再将待发送数据组装成预设数据结构,向目标端发送该预设数据结构的待发送数据,实现数据的同步。
[0168] 若待发送数据发送成功,则可以删除掉日志文件中对应的数据,避免日志文件中的数据量过大,造成额外的存储压力。
[0169] 同时,也可以参阅图2b,示出了各个组件的数据交互示意图,下面将结合图2b详述上述异地复制的过程。其中,Source拉取数据时,将外部存储器中的数据转存到第二缓存时,以及发送数据时均需要按照LSN的顺序。
[0170] 1、Source可以定时从DBS中的日志文件中拉取数据,得到待存储变更数据,然后将待存储数据通过Stream,同步调用Sink的接口例如OnFrame接口,以便通过OnFrame接口直接将待存储变更数据插入到ChainBufferCache中。
[0171] ChainBufferCache可分为两层,第一层为WalBufferCache,即第一缓存,第二层为CosBufferCache,即第二缓存。OnFrame接口在将待存储变更数据插入到ChainBufferCache中时,可以是先判断WalBufferCache是否已经到达预设存储阈值,若没有到达预设存储阈值,则将待存储变更数据插入WalBufferCache中,完成对待存储变更数据的存储;若到达预设存储阈值,则将待存储变更数据进行转存,完成对待存储变更数据的存储。
[0172] 2、Sink可以定时从WalBufferCache的头部中拉取待存储变更数据,此时,查找到的数据为待过滤变更数据,由于日志文件中存储的变更数据可以包括用户操作数据和系统操作数据,而用户操作数据才是需要发送至目标端的,由此,可以将待过滤数据通过Filter进行过滤,并打包成Frame结构发送。
[0173] 3、通过数据同步框架的写入器即ForwardWriter,将打包成Frame结构的数据批量发送至目标端。
[0174] 4、若WalBufferCache即第一缓存已经到达预设存储阈值,表明WalBufferCache中无法再存入数据,为了避免WalBufferCache中无法存入数据导致日志文件中数据堆积,阻碍正常的变更数据写入流程,可以将待存储变更数据通过外部写入器即CosWriter,将待存储变更数据异步转存到外部存储器,可提供存储服务。当待存储变更数据成功转存到外部存储器后,则可以正常触发丢弃日志文件中的对应数据。
[0175] 5、ChainBufferCache的第二层为CosBufferCache,即第二缓存,可以存储外部存储器中的预设数据量的待存储变更数据,便于后续读取数据时更加快捷。例如,可以是在通过CosWriter将数据异步写入外部存储器时,生成一个信号,以便通知可将外部存储器中的数据转存至CosBufferCache。需要说明的是,该过程也需要按照LSN的顺序将外部存储器中预设数据量的待存储变更数据转存至CosBufferCache。
[0176] 6、Sink在发送数据时,也必须要按照LSN的顺序发送,因此发送的流程会先从WalBufferCache即第一缓存中查找数据,如果发现LSN缺失,则会去CosBufferCache即第二缓存中查找数据,若还是没有找到,则会主动去外部存储器上搜索数据。需要说明的是,上述过程均为异步处理过程,同时异地复制的过程的也会继续,只是由于网络波动可能较为缓慢,或者是由于目标端不可用而阻塞。
[0177] 7、数据成功发送到目标端之后,可以向流进度管理模块反馈Sink的发送进度,以便可以更新Sink的发送进度信息,最后触发删除日志文件中对应的数据的操作。
[0178] 若网络正常且待发送数据可正常发送,WalBufferCache中可以继续存入待存储变更数据,该异地复制过程依次为步骤1、步骤2、步骤3和步骤7。
[0179] 若网络波动或待发送数据无法正常发送到目标端,WalBufferCache中无法继续存入待存储变更数据,该异地复制过程可依次为步骤1、步骤4、步骤5、步骤6、步骤2、步骤3和步骤7。若发送失败则会一直重试发送,直到发送成功为止;若发送成功,则可以更新Sink的发送进度信息。
[0180] 由上可知,本申请实施例在正常情况下,可以将待存储数据正常存储至第一缓存,并从第一缓存中获取待发送数据正常发送。在网络波动或目标端服务不可用时,导致第一缓存中的已存储数据量不小于预设存储阈值时,可以将待存储变更数据先转存至外部存储器中,并删除日志文件中的对应的数据,以避免日志文件中的数据量过多,造成额外的存储压力导致数据的丢失,提升数据同步的可靠性。然后将外部存储器中的部分数据转存到第二缓存,并按照预设查找规则查找待发送数据,以提升数据的查找效率,从而可以有效提升数据同步的可靠性和效率。该方法可支撑异地单活、流水备份等多个功能点。在异地数据同步的场景下,有效保证毫秒级低传输时延,同时提供了高可靠性和高可用性。在备份的场景下,可实现秒级的流水备份能力。
[0181] 为了更好地实施以上方法,本申请实施例还提供一种数据同步装置,该数据同步装置具体可以集成在电子设备中,该电子设备可以为终端、服务器等设备。其中,终端可以为手机、平板电脑、智能蓝牙设备、笔记本电脑、个人电脑等设备;服务器可以是单一服务器,也可以是由多个服务器组成的服务器集群。
[0182] 比如,在本实施例中,将以数据同步装置具体集成在服务器为例,对本申请实施例的方法进行详细说明。
[0183] 例如,如图3所示,该数据同步装置可以包括获取模块310、存储模块320、第一转存模块330、第二转存模块340、查找模块350以及同步模块360。
[0184] 获取模块310,用于根据日志文件中的日志标识,按照所述日志标识对应的写入顺序,从所述日志文件的变更数据中获取待存储变更数据;
[0185] 存储模块320,用于若第一缓存中的已存数据存储量小于预设存储阈值,将所述待存储变更数据存储至所述第一缓存中;
[0186] 第一转存模块330,用于若所述第一缓存中的已存数据存储量不小于所述预设存储阈值,则将所述待存储变更数据转存至外部存储器,并从所述日志文件中删除所述待存储变更数据;
[0187] 第二转存模块340,用于将所述外部存储器中的预设数据量的所述待存储变更数据转存至第二缓存;
[0188] 查找模块350,用于根据预设查找规则,在所述第一缓存、所述第二缓存以及所述外部存储器中查找待发送数据,所述待发送数据为当前待同步至目标端的数据;
[0189] 同步模块360,用于向所述目标端发送所述待发送数据。
[0190] 在一些实施例中,第二转存模块340还包括:
[0191] 转存单元,用于根据所述日志标识,确定所述外部存储器中的待存储变更数据对应的写入顺序;
[0192] 筛选单元,用于根据所述写入顺序,从所述外部存储器中筛选出所述预设数据量的所述待存储变更数据;
[0193] 存储单元,用于将所述预设数据量的所述待存储变更数据存储至所述第二缓存中。
[0194] 在一些实施例中,查找模块350还包括:
[0195] 标识获取单元,用于获取目标日志标识;
[0196] 查找单元,用于根据所述预设查找规则,在所述第一缓存、第二缓存以及外部存储器中,查找与所述目标日志标识对应的待存储变更数据,得到待过滤变更数据;
[0197] 过滤单元,用于对所述待过滤变更数据进行过滤处理,得到所述待发送数据。
[0198] 在一些实施例中,查找单元还用于:
[0199] 根据所述预设查找规则,依次在所述第一缓存、第二缓存、外部存储器中查找与所述目标日志标识对应的待存储变更数据;
[0200] 将查找到的与所述目标日志标识对应的待存储变更数据确定为所述待过滤变更数据。
[0201] 在一些实施例中,查找单元还用于:
[0202] 根据所述预设查找规则,确定所述第一缓存、所述第二缓存以及外部存储器对应的优先级;
[0203] 按照优先级从高到低的顺序,从所述第一缓存、所述第二缓存以及外部存储器中查找与所述目标日志标识对应的变更数据;
[0204] 将查找到的与所述目标日志标识对应的变更数据确定为所述待过滤变更数据。
[0205] 在一些实施例中,过滤单元还用于:
[0206] 根据预设过滤规则,确定待保留的数据类型;
[0207] 从所述待过滤变更数据中,提取出与所述待保留的数据类型对应的数据,得到所述待发送数据。
[0208] 在一些实施例中,过滤单元还用于:
[0209] 根据预设过滤规则,确定待过滤的数据类型;
[0210] 从所述待过滤变更数据中,删除与所述待过滤的数据类型对应的数据,得到所述待发送数据。
[0211] 在一些实施例中,同步模块360还用于:
[0212] 将所述待发送数据组装为预设数据结构,得到目标数据包;
[0213] 向所述目标端发送所述目标数据包。
[0214] 在一些实施例中,数据同步装置300还包括反馈模块,向所述目标端发送所述待发送数据之后,反馈模块用于:
[0215] 获取针对所述待发送数据的反馈信息,所述反馈信息包括发送成功或发送失败;
[0216] 若所述反馈信息为发送失败,重新发送所述待发送数据,直到所述待发送数据发送成功;
[0217] 若所述反馈信息为发送成功,将所述待发送数据对应的变更数据从所述日志文件中删除。
[0218] 在一些实施例中,数据同步装置300还包括进度记录模块,根据预设查找规则,在所述第一缓存、第二缓存以及外部存储器中查找待发送数据之后,进度记录模块用于:
[0219] 获取所述待发送数据对应的发送进度信息,并将所述发送进度信息存放在元数据中。
[0220] 在一些实施例中,若所述待发送数据发送成功,进度记录模块还用于:
[0221] 对所述待发送数据对应的发送进度信息进行更新。
[0222] 具体实施时,以上各个模块或单元可以作为独立的实体来实现,也可以进行任意组合,作为同一或若干个实体来实现,以上各个模块或单元的具体实施可参见前面的方法实施例,在此不再赘述。
[0223] 由上可知,本实施例的数据同步装置可以在第一缓存中的已存储数据量不小于预设存储阈值时,将待存储变更数据先转存至外部存储器中,并删除日志文件中的对应的数据,以避免日志文件中的数据量过多,造成额外的存储压力导致数据的丢失,提升数据同步的可靠性。然后将外部存储器中的部分数据转存到第二缓存,并按照预设查找规则查找待发送数据,以提升数据的查找效率,从而可以有效提升数据同步的可靠性和效率。
[0224] 本申请实施例还提供一种电子设备,该电子设备可以为终端、服务器等设备。其中,终端可以为手机、平板电脑、智能蓝牙设备、笔记本电脑、个人电脑,等等;服务器可以是单一服务器,也可以是由多个服务器组成的服务器集群,等等。
[0225] 在一些实施例中,该数据同步装置还可以集成在多个电子设备中,比如,数据同步装置可以集成在多个服务器中,由多个服务器来实现本申请的数据同步方法。
[0226] 在本实施例中,将以本实施例的电子设备是服务器为例进行详细描述,比如,如图4所示,其示出了本申请实施例所涉及的电子设备的结构示意图,具体来讲:
[0227] 该电子设备可以包括一个或者一个以上处理核心的处理器401、一个或一个以上计算机可读存储介质的存储器402、电源403、输入模块404以及通信模块405等部件。本领域技术人员可以理解,图4中示出的电子设备结构并不构成对电子设备的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件布置。其中:
[0228] 处理器401是该电子设备的控制中心,利用各种接口和线路连接整个电子设备的各个部分,通过运行或执行存储在存储器402内的软件程序和/或模块,以及调用存储在存储器402内的数据,执行电子设备的各种功能和处理数据。在一些实施例中,处理器401可包括一个或多个处理核心;在一些实施例中,处理器401可集成应用处理器和调制解调处理器,其中,应用处理器主要处理操作系统、用户界面和应用程序等,调制解调处理器主要处理无线通信。可以理解的是,上述调制解调处理器也可以不集成到处理器401中。
[0229] 存储器402可用于存储软件程序以及模块,处理器401通过运行存储在存储器402的软件程序以及模块,从而执行各种功能应用以及数据处理。存储器402可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需的应用程序(比如声音播放功能、图像播放功能等)等;存储数据区可存储根据电子设备的使用所创建的数据等。此外,存储器402可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他易失性固态存储器件。相应地,存储器402还可以包括存储器控制器,以提供处理器401对存储器402的访问。
[0230] 电子设备还包括给各个部件供电的电源403,在一些实施例中,电源403可以通过电源管理系统与处理器401逻辑相连,从而通过电源管理系统实现管理充电、放电、以及功耗管理等功能。电源403还可以包括一个或一个以上的直流或交流电源、再充电系统、电源故障检测电路、电源转换器或者逆变器、电源状态指示器等任意组件。
[0231] 该电子设备还可包括输入模块404,该输入模块404可用于接收输入的数字或字符信息,以及产生与用户设置以及功能控制有关的键盘、鼠标、操作杆、光学或者轨迹球信号输入。
[0232] 该电子设备还可包括通信模块405,在一些实施例中通信模块405可以包括无线模块,电子设备可以通过该通信模块405的无线模块进行短距离无线传输,从而为用户提供了无线的宽带互联网访问。比如,该通信模块405可以用于帮助用户收发电子邮件、浏览网页和访问流式媒体等。
[0233] 尽管未示出,电子设备还可以包括显示单元等,在此不再赘述。具体在本实施例中,电子设备中的处理器401会按照如下的指令,将一个或一个以上的应用程序的进程对应的可执行文件加载到存储器402中,并由处理器401来运行存储在存储器402中的应用程序,从而实现各种功能,如下:
[0234] 根据日志文件中的日志标识,按照所述日志标识对应的写入顺序,从所述日志文件的变更数据中获取待存储变更数据;
[0235] 若第一缓存中的已存数据存储量小于预设存储阈值,将所述待存储变更数据存储至所述第一缓存中;
[0236] 若所述第一缓存中的已存数据存储量不小于所述预设存储阈值,则将所述待存储变更数据转存至外部存储器,并从所述日志文件中删除所述待存储变更数据;
[0237] 将所述外部存储器中的预设数据量的所述待存储变更数据转存至第二缓存;
[0238] 根据预设查找规则,在所述第一缓存、所述第二缓存以及所述外部存储器中查找待发送数据,所述待发送数据为当前待同步至目标端的数据;
[0239] 向所述目标端发送所述待发送数据。
[0240] 以上各个操作的具体实施可参见前面的实施例,在此不再赘述。
[0241] 由上可知,本申请实施例可以在第一缓存中的已存储数据量不小于预设存储阈值时,将待存储变更数据先转存至外部存储器中,并删除日志文件中的对应的数据,以避免日志文件中的数据量过多,造成额外的存储压力导致数据的丢失,提升数据同步的可靠性。然后将外部存储器中的部分数据转存到第二缓存,并按照预设查找规则查找待发送数据,以提升数据的查找效率,从而可以有效提升数据同步的可靠性和效率。
[0242] 本领域普通技术人员可以理解,上述实施例的各种方法中的全部或部分步骤可以通过指令来完成,或通过指令控制相关的硬件来完成,该指令可以存储于一计算机可读存储介质中,并由处理器进行加载和执行。
[0243] 为此,本申请实施例提供一种计算机可读存储介质,其中存储有多条指令,该指令能够被处理器进行加载,以执行本申请实施例所提供的任一种数据同步方法中的步骤。例如,该指令可以执行如下步骤:
[0244] 根据日志文件中的日志标识,按照所述日志标识对应的写入顺序,从所述日志文件的变更数据中获取待存储变更数据;
[0245] 若第一缓存中的已存数据存储量小于预设存储阈值,将所述待存储变更数据存储至所述第一缓存中;
[0246] 若所述第一缓存中的已存数据存储量不小于所述预设存储阈值,则将所述待存储变更数据转存至外部存储器,并从所述日志文件中删除所述待存储变更数据;
[0247] 将所述外部存储器中的预设数据量的所述待存储变更数据转存至第二缓存;
[0248] 根据预设查找规则,在所述第一缓存、所述第二缓存以及所述外部存储器中查找待发送数据,所述待发送数据为当前待同步至目标端的数据;
[0249] 向所述目标端发送所述待发送数据。
[0250] 其中,该存储介质可以包括:只读存储器(ROM,Read Only Memory)、随机存取记忆体(RAM,Random Access Memory)、磁盘或光盘等。
[0251] 根据本申请的一个方面,提供了一种计算机程序产品或计算机程序,该计算机程序产品或计算机程序包括计算机指令,该计算机指令存储在计算机可读存储介质中。计算机设备的处理器从计算机可读存储介质读取该计算机指令,处理器执行该计算机指令,使得该计算机设备执行上述实施例中提供的数据同步方面的各种可选实现方式中提供的方法。
[0252] 由于该存储介质中所存储的指令,可以执行本申请实施例所提供的任一种数据同步方法中的步骤,因此,可以实现本申请实施例所提供的任一种数据同步方法所能实现的有益效果,详见前面的实施例,在此不再赘述。
[0253] 以上对本申请实施例所提供的一种数据同步方法、装置、电子设备、存储介质和程序产品进行了详细介绍,本文中应用了具体个例对本申请的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本申请的方法及其核心思想;同时,对于本领域的技术人员,依据本申请的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本申请的限制。