您好,欢迎来到12图资源库!分享精神,快乐你我!我们只是素材的搬运工!!
  • 首 页
  • 当前位置:首页 > 开发 > WEB开发 >
    开发者必看!你想知道的迁移之道都在这里了(2)
    时间:2021-08-07 08:02 来源:网络整理 作者:网络 浏览:收藏 挑错 推荐 打印

    全量同步半途中缀是一个十分让人顺手的成绩,能够一张2亿条数据的表,在同步到1.8亿的时分由于网络或源库快照过旧的成绩招致同步失败,假设没有好的断点控制机制,那能够之前的付出都白白糜费,还要重新再次同步一次。DRS经过以分片为单位做为断点的保存记载,关于下面的例子,即使同步中缀,也可以再次被拉起,而且拉起后,曾经同步成功的分片将不再同步,还没有同步的分片则会继续同步。

    流量控制

    客户的业务往往是存在高峰期和低峰期,高峰期时,数据库的资源占用是最高的,我们要尽量避开在业务高峰期做全量的同步,由于全量同步对源库的cpu、内存和网络资源占用是很大的。DRS采用流量控制的机制来增加业务高峰期对源库的资源占用,主要是经过控制网络流量的方式,客户可以设置要停止流量控制的时间段,DRS在全量同步进程中,会实时计算同步的流量大小,运转到该时段后,当流量超过设置的阈值,会放缓数据获取的速度。运转过该时段后,便恢复全部的数据同步速度。

    全量+增量的无缝衔接

    在业务切库的场景中,数据的迁移进程普通可以选择两种方案,一种是一次性将源库的数据迁移到目的库,但是需求业务停机窗口,这个窗口的大小取决于全量数据迁移的时间。当数据量较大时,整个迁移进程能够需求几天的时间,这种业务停机是无法接受的。所以另一种方案就是业务不中缀的数据迁移方案,它的完成原理就是基于全量迁移和增量同步的无缝衔接,关于Oracle->GaussDB(for openGauss)的迁移,Oracle数据库提供了指定scn停止快照导出的功用,基于这个特性,DRS在做全量同步时,指定scn停止导出,这样整个全量同步的数据就是此scn点前的快照数据,然后增量同步以这个scn点作为同步的分界点,只要大于这个scn的增量事务才会被同步到目的库。这样就完成了全量和增量的无缝衔接,同步进程无需业务停止停机,当全量数据同步完成且增量同步追逐到以后时间点时,便可停止业务切换,业务中缀窗口可以控制在秒级。

    增量同步的技术架构

    DRS的增量同步架构主要分为3个部分,辨别是数据抓取、落盘文件和数据回放。

    开发者必看!你想知道的迁移之道都在这里了

    数据抓取

    数据抓取经过对源库日志的解析,实时获取源库的变化数据,在外部完成上主要包括日志拉取、日志解析、事务整合和数据落盘几个步骤。

    日志拉取

    DRS采用Oracle的Logminer接口获取实时的redo日志,当redo归档后,DRS会读取归档日志文件。为了避免源库的归档日志被不确定性删除,DRS会启动日志拉取的线程(可以多线程并发)把日志拉取到本地,然后停止后续的解析。

    日志解析

    Oracle Logminer接口获取到的数据需求进一步解析才能获取到实践的变化内容,DRS的日志解析线程对前往的数据停止过滤、拼接、元数据映射、转换等操作构成一条残缺的变更记载对象。

    事务整合

    日志解析是按照源库变化数据的顺序停止解析,解析后的每条记载的事务是交叉混合在一同的,必须对每条记载按照事务id停止整合才能构成一个残缺的事务。另一方面关于Oracle RAC的场景,还需求对不同节点的事务停止排序,避免事务乱序的状况发作。

    落盘文件

    经过了事务整合后,构成了一个按照源库业务提交顺序的序列,DRS会按照这个顺序把这些数据写入到磁盘文件。落盘的数据包含了源库每一条变化数据的全部信息,包含表信息、列信息、事务信息、数据信息和其他额外信息(如时间戳、rowid等),依据这些信息前面的组件便可以把每一条变化数据恢复成对象的SQL。

    数据回放

    数据回放就是将数据抓取到的数据在目的库停止执行的进程,但它和数据的抓取是解耦的。它读取DRS的落盘文件,解析出每条变化的数据,依据文件中记载的元数据信息重构出对应的SQL语句,在目的库执行。

    在数据回放之前,DRS提供了过滤和转换的功用,可以对同步的数据停止过滤,可配置过滤条件,如只同步id < 10000的数据,也可以对同步数据的表名、schema名或列名停止映射等。

    异常处置和回放功用是两个重要的考量点,DRS经过配置数据抵触策略来处置回放中的异常数据,经过并发机制来提高装载的功用。

    抵触策略

    所谓的抵触是指在数据回放的时分出现了数据类报错(如主键抵触、update和delete无法找到记载等),这些报错一版都是由于两边的数据不分歧形成的。DRS对这类错误采用了三种处置策略,辨别是掩盖、疏忽和等候。

    掩盖:当出现抵触时,用抓取到的数据掩盖掉目的库的数据

    疏忽:数据抵触后,直接跳差错误记载,继续执行

    等候:数据抵触后,等候人工处置

    并发机制

    DRS的并发机制采用记载级别的并发,最大化的提升数据装载的功用。

    开发者必看!你想知道的迁移之道都在这里了

    首先从DRS的落盘文件中读取增量数据,按顺序放入一个队列中,并行剖析引擎会从队列中获取每一条数据,并依据其主键信息判别能否存在数据抵触,关于没有抵触的数听阐明可以并行去执行,则把这些数据分散到多个线程队列中,当线程队列中的数据量到达设定的阈值时,这批数据会作为一个事务在目的库执行。关于有抵触的数据,则把这条数据放到抵触队列,等候线程把上一批数据执行完成后,再次进入并行剖析引擎判别能否存在抵触。

    Ps:该内容依据《GaussDB(for openGauss)数据迁移之DRS》技术直播整理完成

    【编辑引荐】

    项目实战-酒店预订系统iPhone客户端开发(Objective - C版)

    基于SSM框架图书管理系统开发与设计(附源码材料)-毕业设计

    【Spring Boot Web效劳开发】Java注解运用技巧

    聊聊我是怎样调试代码的?

    Linux下复杂几步安装AI开发环境-ROS(超有意思)

    (责任编辑:admin)