ITPub博客

首页 > 数据库 > 数据库开发技术 > 数据同步之离线同步

数据同步之离线同步

原创 数据库开发技术 作者:lixiaoya84 时间:2023-12-08 09:09:11 0 删除 编辑


数据传输和备份过程中,离线同步也是常用的数据同步方式,增量同步和全量同步是离线同步两种数据同步策略,它们在不同场景下具有不同的特点和适用性。本文将深入探讨增量同步和全量同步的原理及其应用,以及对应常见的问题解决方案。


01

—

离线同步的原理和应用场景


一、全量同步

全量同步是一种数据备份和传输的方法,它将源数据的所有内容不论是否发生改变都传输到目标端。这种方法适用于数据量较小或需要完整数据的场景,能够确保数据的完整性。在全量同步中,源端的所有数据都会被传输到目标端,以便进行备份和恢复操作等。

全量同步的实现原理有四种实现原理:‍

1、数据库复制:利用数据库的复制功能,可以将数据在多个节点之间通过特定的协议进行同步复制,以实现数据的冗余和高可用性。

2、数据镜像:使用存储阵列或者文件系统的快照功能,将数据实时镜像到其他存储设备上,保持数据的一致性。

3、日志复制:通过复制数据库的事务日志或者操作日志来实现数据的复制,常见的技术有基于归档日志的复制和基于逻辑日志的复制。这些技术可以根据具体的需求和场景来选择和应用。

4、SQL查询数据流:通过SQL语句读取数据库的全量数据之后,分批同步到目标源端进行数据同步。

全量同步是指将源系统中的所有数据都复制到目标系统中,包括数据库表、数据文件、配置文件等。它适用于以下几个场景:

1、数据迁移:当需要将数据从一个系统迁移到另一个系统时,可以使用全量同步来完整复制数据,并确保目标系统与源系统一致。

2、备份恢复:在进行数据备份时,全量同步可以将源系统的数据完整地复制到备份系统中,以备将来需要进行数据恢复的情况。

3、高可用性:在构建高可用性架构时,全量同步可以将主系统中的数据实时地复制到备用系统中,以保证在主系统发生故障时能够立即切换到备用系统而不丢失数据。

4、数据分析:在进行数据分析和挖掘任务时,有时需要在不同的环境中进行数据复制和处理。全量同步可以将数据从一个环境复制到另一个环境,并保证数据的一致性。

总之,全量同步可以用于任何需要完整复制数据的场景,以确保数据的一致性和可用性。


二、增量同步

增量同步,也称为差异备份,是指在前一次全量备份的基础上,仅传输和备份发生改变的部分数据。它一般适用于数据量庞大、频繁更新的场景,能够减少传输和同步的时间和存储资源。

增量同步实现原理有多种方法,以下是几种常见的实现原理:

1、日志增量同步:通过捕获数据库或应用程序产生的事务日志或操作日志,然后将日志的变更内容应用到备份目标中。这种方法可以实现较为精确的增量备份,但需要源数据库支持事务日志或操作日志的生成和捕获。

2、基于时间戳或版本号的增量同步:在源数据库中,每个数据记录都包含一个时间戳字段或版本号字段,用于表示最后一次更新记录的时间或版本号。备份过程中,备份目标会记录上次备份的时间戳或版本号,在下次备份时,仅备份时间戳或版本号大于上次备份的记录。

3、增量块存储:将数据划分为多个块,并对每个块进行增量备份。备份目标保存每个块的备份历史,根据块的变化情况选择是否备份。这种方法可以实现较精细的增量备份,并且在数据变化较少的情况下可以减少备份的数据量。

4、基于文件系统的增量同步:通过监测文件系统的变化,识别新增、修改或删除的文件,并将变更的文件进行备份。这种方法适用于需要备份文件系统中的数据。

增量同步每次增量同步完成都会生成一个checkpoint用于下次增量同步的时候进行比对。


增量同步是指在全量同步的基础上,只复制源系统中发生了变化的数据,以减少数据传输量和提高同步效率。增量同步适用于以下几个场景:

1、数据备份:在进行增量备份时,只需要将源系统中发生了新增、修改或删除的数据进行同步,而不需要复制整个数据库或文件系统。这样可以减少备份时间和存储空间的消耗。

2、数据复制:在构建分布式系统或数据集群时,增量同步可以将源系统中的变化数据实时地同步到目标系统中,以保证数据的一致性。

3、数据治理:在进行数据治理或数据同步任务时,增量同步可以捕获源系统中发生的数据变化,并及时同步到目标系统中,以保持数据的准确性和一致性。

4、数据分析:在进行实时数据分析或流式计算任务时,增量同步可以将源系统中的实时数据流同步到目标系统中,并进行实时处理,以支持实时决策和预测分析。

总之,增量同步适用于需要实时同步源系统中变化数据的场景,能够提高数据同步的效率和性能,并保持数据的一致性。


在选择增量同步和全量同步策略时,需要根据实际需求及资源可用性进行权衡。如果数据量较小或需要完整数据,全量同步是较为合适的选择;如果数据量大且频繁更新,并且具备日志或时间戳记录的能力,增量同步会更有效率。

增量同步和全量同步是常用的数据同步策略,它们在不同场景下具有不同的特点和适用性。了解增量同步和全量同步的原理及其应用,可以根据具体需求选择合适的同步策略,以提高数据传输和备份效率。



02

—

常见问题以及对应解决方案‍‍


1、脏数据如何排查和定位?

脏数据定义为在将数据写入目标数据源过程中发生异常,导致写入失败。脏数据的产生会影响数据同步的结果,因此可以在同步任务配置中控制是否允许脏数据产生,并设定允许的脏数据条数。

如果任务设置允许脏数据,当脏数据产生时,任务会继续执行,但脏数据将被舍弃,不会写入目标数据源。可以设定允许产生的脏数据条数。

当设置脏数据允许条数为0条时,当脏数据产生时,任务会失败退出。

当设置脏数据允许条数为x条时,当脏数据产生条数超过x条时,任务将失败退出;当脏数据产生条数小于x条时,任务会继续运行,但脏数据将被舍弃,不会写入目标数据源。

为了方便脏数据的排除和定位,第一需要在任务设置参数的地方设置脏数据管理。第二需要在日志中打印脏数据的处理情况,第三可以记录脏数据的原始数据情况。便于后期定向处理。


2、如何排查离线同步任务运行时间长的问题?

对于离线同步任务的运行时间过长,一般性能瓶颈会存在于三个地方:‍

1)源数据读取速度慢

2)处理过程中的执行资源不够

3)写入目标源的未执行并行写入

4)写入目标源的IO存在瓶颈‍‍‍‍‍‍‍‍

对于这三个地方我们分别进行数据监控,便于快速的分析和定位同步任务的性能瓶颈点。

1)监控数据源的读速率

2)监控目标源并型写入的线程数,以及是否存在并行写入的数据热点。例如data x 在并行写入的时候会按照主键进行数据分片处理。

3)监控当前未执行的离线同步任务,如果出现调度系统已经执行,但是未分配资源进行执行的离线同步任务,则表示当前的资源不够。‍

4)监控目标源的写入速率‍


 3、能否支持断点续传?
如果离线同步任务失败,是否根据当前的任务运行的情况进行断点续传是很重要的,否则要么提示了数据同步的时长,要么就会增加脏数据。

离线同步的断点续传实现原理主要涉及两个关键点:断点记录和数据差异比较。

首先,断点记录是指在进行离线同步过程中,记录下同步的进度位置。这一般通过标记同步位置或记录同步的数据块信息来实现。当同步过程中断或中止时,可以根据断点记录来恢复同步。

其次,数据差异比较是指在进行断点续传时,对待同步的数据进行差异比较,只传输变化的部分。这可以通过比较源数据和目标数据之间的差异来实现。根据差异的类型和规模,可以采用不同的策略进行差异比较和传输。

一种常见的实现方式是使用文件的校验值(如MD5或SHA-1值)或版本号来进行差异比较和传输。当进行断点续传时,可以根据源文件和目标文件的校验值或版本号来判断文件是否发生变化,进而决定是否传输文件。如果文件发生变化,则只传输变化的部分;如果文件没有变化,则跳过传输。

另一种实现方式是基于块的增量同步。将待同步的数据分割成多个块,每个块有唯一的标识符。在进行断点续传时,可以根据块的标识符来判断块是否发生变化,进而决定是否传输该块。如果块发生变化,则只传输变化的部分;如果块没有变化,则跳过传输。

总之,离线同步的断点续传实现原理主要涉及断点记录和数据差异比较。通过记录同步进度位置和对待同步的数据进行差异比较,可以实现在断点处进行续传,只传输变化的部分,提高同步效率。


4、是否支持并行任务进行任务的写,并行任务写冲突如何解决?

离线同步的并行任务写冲突可以通过以下几种方式进行解决:

1、锁机制:在进行并行任务执行时,可以使用锁机制来保证对共享资源的互斥访问。多个并行任务在访问资源之前,需要先获取锁,只有获取到锁的任务才能对资源进行写操作,其他任务则需要等待。这样可以避免并行任务之间的写冲突。

2、事务机制:在涉及到数据库操作的离线同步任务中,可以使用事务机制来解决并行任务的写冲突。通过将相关的数据库操作封装在一个事务中,可以保证在同一时刻只有一个任务能够执行对数据库的写操作。其他任务在该事务执行期间需要等待。

3、分割任务:如果并行任务之间的写冲突无法避免,可以考虑将大任务分割成多个小任务,每个小任务单独执行,并在执行之间进行同步。通过将任务分割成互不冲突的子任务,可以避免并行任务之间的写冲突。

4、冲突检测和冲突解决:在并行任务执行过程中,可以实时检测任务之间的冲突,并采取相应的策略进行解决。例如,当发现并行任务之间存在写冲突时,可以暂停其中一个任务,等待另一个任务完成后再继续执行。

需要根据具体的离线同步场景和任务特点选择合适的解决方案。综合考虑任务复杂度、并发性能和数据一致性等因素,选择最适合的解决方案来解决并行任务的写冲突问题。

正常情况下,为了提高离线同步的性能并且解决写冲突,一般采用数据分片的方式,因为锁机制和事务锁都会影响离线同步的性能。


5、离线同步是否能够支持全场景覆盖?

抽取服务读取抽取配置规则将包含:库到库、表到表、多表到单表、文件到表、表到文件的各种规则抽取。根据抽取规则执行抽取任务,实现数据抽取和同步任务。‍‍

6、日志是否完善?‍‍‍‍‍‍‍‍

1) 调度过程日志,管理记录调度中的主要过程和异常信息,如调度开始、调度完成、数据库操作异常和读写文件异常的日志。

2) Job执行日志,管理记录Job执行信息的日志,提供该日志的查询、删除和执行状态重置功能。

3) Job详细事件日志,管理记录Job执行中的详细事件(清洗记录条数、数据库具体操作情况)的日志,提供对日志的查询、删除操作。


以上是对离线同步任务的分析,希望对大家有所帮助。



欢迎加入【数据行业交流群】社群,长按以下二维码加入专业微信群,商务合作加微信备注商务合作


往期历史热门文章:

基于DataOps的数据开发治理:实现数据流程的自动化和规范化

数据平台:湖仓一体、流批一体、存算分离的核心问题及原因解析

数据治理体系该怎么建设?

实时数仓&流批一体技术发展趋势

数据仓库、数据中台、大数据平台的关系?

数字化转型如何促进业务的发展

数据中台中的核心概念解析

数据治理中的数据标准的作用?

全面数字化转型:打造全新营销模式





原文作者:Ruby的数据漫谈;如有侵权,请联系管理员删除。

请登录后发表评论 登录
全部评论

注册时间:2021-06-18

  • 博文量
    252
  • 访问量
    132898