数据实时同步中的一种特殊场景说明及处理方法

举报
KX 发表于 2021/06/08 16:42:26 2021/06/08
【摘要】 使用CDC工具进行数据实时同步时,若源库为主备并存场景,则目的端需要识别同步数据来自于主库还是备库,并加以分类处理,否则目的库中数据会出现与源端数据不一致的情况,本文介绍了一种解决此问题的方案。

数据实时同步简要介绍:

数据同步或数据集成一般选用两类技术或工具,即:

1ETLExtract-Transform-Load)工具,它是将数据从源系统加载到数据仓库的过程。用来描述将数据从来源端经过萃取(extract)、转置(transform)、加载(load)至目的端的过程。

2CDC工具,全称Change Data Capture,变更数据捕捉,从数据库内部捕捉变更数据,将变更数据推送到推送到目的库中。CDC机制速度极快,数据精准,且与应用程序耦合少,可抽象脱离业务系统。

实时同步场景中因对数据的实时性要求较高,所以一般选用CDC工具。

特殊场景说明:

普通场景下,使用CDC工具解析源库日志信息,实时同步源库数据到目的地,如下图所示:


但在一些特定业务场景中,为尽量减轻主数据库业务压力,一般设置一个备数据库,定期将主数据库中超过一定期限的数据迁移到备数据库中。备份时先将主数据库中超过一定期限未更新的数据复制到备数据库中,再将主库中已复制的数据删除。如下图所示:


类似以上既有主库也有备库的情况,若要做数据的实时同步,则主库和备库都需要将数据实时同步到目的地,避免因为主库的备份动作导致目的端数据误删、重复等与源端产生不一致,如下图所示:


这种情景下,主库、备库的表名、字段名完全一致,目的库需要正确识别同步数据来源于主库还是备库,并分类处理,保证目的库中数据与源端数据一致。以下介绍一种解决此类需求的方式。

主备库同时进行数据同步时的解决方案:

使用CDC工具进行数据同步时,为了便于目的端处理,需要在原始数据的基础上添加一些扩展字段,如原表名、操作类型、时间戳等,如下图所示:


为了解决上述源库有主备的情况,可在以上扩展字段的基础上再增加一个扩展字段,如优先级字段,规定若源库为主数据库,优先级字段值为“100”,若源库为备数据库,优先级字段值为“200”,则目的端在处理来自源端同步过来的数据时,在原处理基础上增加以下处理逻辑:

  • 若同步过来的数据为“插入”操作,检查目的端中是否存在与待插入数据相同的数据(注:比较不带扩展字段的原始部分是否一致),若没有则正常插入,若有则比较两条数据中“优先级”扩展字段,目的端保存“优先级”扩展字段更大的那一条数据;
  • 若同步过来的数据为“删除”操作,检查目的端中是否存在与待删除数据相同的数据(注:比较不带扩展字段的原始部分是否一致),若没有则不做任何操作,若有则比较两条数据中“优先级”扩展字段:若两条数据中“优先级”扩展字段一样的话则删除目的端中数据,若同步过来的数据中“优先级”扩展字段值小于目的端中相同数据的“优先级”扩展字段值则不做任何操作,若同步过来的数据中“优先级”扩展字段值大于目的端中相同数据的“优先级”扩展字段值则删除目的端中数据;

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。