For investors
股价:
5.36 美元 %For investors
股价:
5.36 美元 %认真做教育 专心促就业
我们在前几期的文章中给大家简单介绍了程序员在学习软件编程开发技术的时候需要掌握的一些基础知识等内容,而本文我们就再来学习一下,数据迁移常见问题都有哪些。
数据不落盘
为减少全量同步过程中对磁盘的占用,DRS导出的数据不进行落盘缓存,而是直接通过内存传递给导入线程,在导出和导入速率相当的情况下,可以大化的提高全量同步的效率。
断点控制
全量同步半途中断是一个非常让人棘手的问题,可能一张2亿条数据的表,在同步到1.8亿的时候因为网络或源库快照过旧的问题导致同步失败,如果没有好的断点控制机制,那可能之前的付出都白白浪费,还要重新再次同步一次。DRS通过以分片为单位做为断点的保存记录,对于上面的例子,即使同步中断,也可以再次被拉起,而且拉起后,已经同步成功的分片将不再同步,还没有同步的分片则会继续同步。
流量控制
客户的业务往往是存在高峰期和低峰期,高峰期时,数据库的资源占用是高的,我们要尽量避开在业务高峰期做全量的同步,因为全量同步对源库的cpu、内存和网络资源占用是很大的。DRS采用流量控制的机制来减少业务高峰期对源库的资源占用,主要是通过控制网络流量的方式,客户可以设置要进行流量控制的时间段,DRS在全量同步过程中,会实时计算同步的流量大小,运行到该时段后,当流量超过设置的阈值,会放缓数据获取的速度。运行过该时段后,便恢复全部的数据同步速度。
全量+增量的无缝衔接
在业务切库的场景中,数据的迁移过程一般可以选择两种方案,一种是一次性将源库的数据迁移到目标库,但是需要业务停机窗口,这个窗口的大小取决于全量数据迁移的时间。当数据量较大时,整个迁移过程可能需要几天的时间,这种业务停机是无法接受的。所以另一种方案就是业务不中断的数据迁移方案,它的实现原理就是基于全量迁移和增量同步的无缝衔接,对于Oracle->GaussDB(foropenGauss)的迁移,Oracle数据库提供了指定scn进行快照导出的功能,基于这个特性,DRS在做全量同步时,指定scn进行导出,这样整个全量同步的数据就是此scn点前的快照数据,然后增量同步以这个scn点作为同步的分界点,只有大于这个scn的增量事务才会被同步到目标库。这样就实现了全量和增量的无缝衔接,同步过程无需业务进行停机,当全量数据同步完成且增量同步追赶到当前时间点时,便可进行业务切换,业务中断窗口可以控制在秒级。
增量同步的技术架构
DRS的增量同步架构主要分为3个部分,分别是数据抓取、落盘文件和数据回放。
数据抓取
数据抓取通过对源库日志的解析,实时获取源库的变化数据,在内部实现上主要包括日志拉取、日志解析、事务整合和数据落盘几个步骤。
日志拉取
DRS采用Oracle的Logminer接口获取实时的redo日志,当redo归档后,DRS会读取归档日志文件。为了防止源库的归档日志被不确定性删除,DRS会启动日志拉取的线程(可以多线程并发)把日志拉取到本地,然后进行后续的解析。
日志解析
OracleLogminer接口获取到的数据需要进一步解析才能获取到实际的变化内容,DRS的日志解析线程对返回的数据进行过滤、拼接、元数据映射、转换等操作形成一条完整的变更记录对象。
事务整合
日志解析是按照源库变化数据的顺序进行解析,解析后的每条记录的事务是交叉混合在一起的,必须对每条记录按照事务id进行整合才能形成一个完整的事务。另一方面对于OracleRAC的场景,还需要对不同节点的事务进行排序,避免事务乱序的情况发生。
落盘文件
经过了事务整合后,形成了一个按照源库业务提交顺序的序列,DRS会按照这个顺序把这些数据写入到磁盘文件。落盘的数据包含了源库每一条变化数据的全部信息,包含表信息、列信息、事务信息、数据信息和其他额外信息(如时间戳、rowid等),根据这些信息后面的组件便可以把每一条变化数据还原成对象的SQL。
数据回放
数据回放就是将数据抓取到的数据在目标库进行执行的过程,但它和数据的抓取是解耦的。它读取DRS的落盘文件,解析出每条变化的数据,根据文件中记录的元数据信息重构出对应的SQL语句,在目标库执行。
在数据回放之前,DRS提供了过滤和转换的功能,可以对同步的数据进行过滤,可配置过滤条件,如只同步id<10000的数据,也可以对同步数据的表名、schema名或列名进行映射等。
异常处理和回放性能是两个重要的考量点,DRS通过配置数据冲突策略来处理回放中的异常数据,通过并发机制来提高装载的性能。
【免责声明】:本内容转载于网络,转载目的在于传递信息。文章内容为作者个人意见,本平台对文中陈述、观点保持中立,不对所包含内容的准确性、可靠性与完整性提供形式地保证。请读者仅作参考。更多内容请加danei456学习了解。欢迎关注“达内在线”参与分销,赚更多好礼。