不得不说顶级大佬们都有一种理工的终极浪漫,yugong这个名字真的太贴切了Orz,哈哈哈哈

首先附上项目Github源地址:点击进入
项目官方文档:点击进入
下载地址:点击进入
(建议直接下载tar包,不建议自己编译,会遇到各种问题,需要改源码的大佬当我没说)

强烈建议先去把人家的文档好好看一遍,其实他的文档已经写的非常清楚了,愚公的使用相对简单,这里主要介绍一下yugong的几个模式的问题,以及在使用过程中的问题。

一、表主键的问题

这个是前提条件,所以放在第一个讲
如果表没有主键,是没有办法进行增量更新的!(增量模式INC)
这一点是必须要注意的,如果一定需要增量同步这里只有一个解决办法,就是给表加一个主键。如果表不是很大的话就每天全量把。

二、模式

  1. 全量模式(FULL):遍历源表所有的数据后,插入目标表,需要注意的是如果目标表有主键是不支持断点续传的,也就是说全量同步如果在中途意外终止,是不能够直接再次运行的,需要清空目标表之后再运行,因为会引发主键冲突。

  2. 增量模式(INC):同步方案的主要模式,在表规模变大时采用增量模式会极大的节省时间和减轻数据库压力。需要注意的是增量模式需要源表一定要有主键,而且需要源数据库有该表的物化日志表。物化日志并不是必须的,没有物化日志也能够正常运行增量模式,但是如果源表的字段发生变化并不会同步,这点尤其重要。

  3. 自动模式(ALL):首先进行全量模式,全量完成之后自动切换为增量模式

  4. MARK模式(MARK):愚公自带的创建物化视图的模式,运行此模式会给指定的表自动创建物化视图,需要注意的是操作的表也必须要有主键才会创建成功。

  5. CLEAR模式(CLEAR):自动删除创建的物化视图

  6. 对比模式(CHECK):当数据量极大时我们并不能知道两个数据库是否完全一致,对比模式可以便利两个数据库,查看是否一致。需要注意的是当数据表特别大时(百万数量级),运行会报游标错误,这个应该是数据库的设置问题,这个问题目前没有解决(我们并没有修改顶级数据库的权限)

三、增量模式细则

这个是yugong中的重点了,因为它是最常用的模式,在数据量非常大的时候不可能每天进行全量同步,这样对于数据库的压力太大。

  • 在正常情况下,增量更新是需要物化日志的,当有物化日志时才会进行真正意义上的更新。如果没有物化日至,在增量更新的时候只会检查增加和删除,并不会去检索字段的值
  • 也就是说,如果没有物化日志,源数据库修改一条记录的某一个字段的值,yugong在增量同步的时候就会忽略。
  • 其实从原理上是不难理解,当没有物化日志的时候,增加或删除源数据库的记录都会造成记录数的不一致,这样根据表的主键很容易就能作出跟源表一致的增加或者删除操作,但是如果需要探知字段的值三否一致,就需要一个字段一个字段的对此,这样性价比实在太低了,通过物化日至是非常实用和明智的。

四、物化日至相关

  • 物化日志的原理也非常简单,当表发生增删查改操作时,产生一条记录,记录修改的字段和操作,这样根据记录去反推改动就非常简单了。
  • yugong在Oracle中自动创建的表会有自动删除机制的,也就是只要被读过就会自动删除,所以完全不用操心。
  • 因为为自己的数据库都是Oracle,其他的数据库没有仔细做过实验。

五、yugong提供的自定义处理接口

  • 这个功能非常实用,在同步的时候就可以作一些字段处理。
  • 一些简单的,表名,列名不同的问题,同样的官方已经写的非常清楚了。
  • 这里展示一个为自己用到的小的需求转化
package com.taobao.yugong.translator;import java.sql.Types;
import java.util.Date;import org.apache.commons.lang.ObjectUtils;import com.taobao.yugong.common.db.meta.ColumnMeta;
import com.taobao.yugong.common.db.meta.ColumnValue;
import com.taobao.yugong.common.model.record.Record;public class AcdFileDataTranslator extends AbstractDataTranslator implements DataTranslator {public boolean translator(Record record) {//拿出源表的四个字段值ColumnValue qsrs = record.getColumnByName("qsrs");ColumnValue zjccss = record.getColumnByName("zjccss");ColumnValue zsrs = record.getColumnByName("zsrs");ColumnValue swrs = record.getColumnByName("swrs30");StringBuilder displayNameValue = new StringBuilder(64);//计算程度displayNameValue.append(ObjectUtils.toString(addOf(ObjectUtils.toString(qsrs.getValue()),ObjectUtils.toString(zjccss.getValue()),ObjectUtils.toString(zsrs.getValue()),ObjectUtils.toString(swrs.getValue()))));//定义一个新字段,赋予字段名称,类型ColumnMeta gmtMoveMeta = new ColumnMeta("sgyzcd", Types.VARCHAR);//赋值ColumnValue gmtMoveColumn = new ColumnValue(gmtMoveMeta ,displayNameValue.toString());record.addColumn(gmtMoveColumn);return super.translator(record);}public String addOf(String qsr, String zjccs, String zsr, String swr){if(qsr==null || qsr=="" || zjccs==null || zjccs=="" || zsr==null || zsr=="" || swr==null || swr=="") {return "0";}int qsrs = Integer.parseInt(qsr);int zjccss = Integer.parseInt(zjccs)/10000;int zsrs = Integer.parseInt(zsr);int swrs = Integer.parseInt(swr);String a = "0";if((qsrs>0 && qsrs<=2) || zjccss<0.12){a = "1";}if((zsrs>=1 && zsrs<=2) || qsrs>=3 || zjccss<3){a = "2";}if((swrs>=1 && swrs<=2) || (zsrs>=3 && zsrs<=10) || (zjccss>=3 && zjccss<6)){a = "3";}if(swrs>=3 || zsrs>10 || (swrs==1 && zsrs>=8) || (swrs==2 && zsrs>=5) || zjccss>=6){a = "4";}return a;}
}

就是一个利用原表的四个字段来判断事故的严重程度,非常简单的一个需求。

数据库同步非常实用的工具,阿里数据迁移工具yugong使用细则相关推荐

  1. 阿里数据迁移工具 - 愚公

    听老大说到阿里数据迁移工具-愚公,也许将来可能用的到.但是只是针对oracle的数据迁移 愚公: https://yq.aliyun.com/articles/7937 愚公简是阿里的开源项目,使用纯 ...

  2. 达梦数据库--管理工具,数据迁移工具使用

    国产话达梦数据库,常用工具:达梦管理工具,达梦数据迁移工具. 1.达梦管理工具主要类似于navicat,是数据库可视化工具,新建连接输入IP,端口,账号,密码即可连接数据库. 之后在模式中,可以查看该 ...

  3. 【Android 逆向】使用 DB Browser 查看并修改 SQLite 数据库 ( 从 Android 应用数据目录中拷贝数据库文件 | 使用 DB Browser 工具查看数据块文件 )

    文章目录 一.从 Android 应用数据目录中拷贝 SQlite3 数据库文件 二.使用 DB Browser 工具打开 SQlite3 数据库文件 一.从 Android 应用数据目录中拷贝 SQ ...

  4. java数据同步处理_[java数据库同步解决方案]系统间通讯实现数据信息实时同步解决方案...

    项目开发阶段遇到一个需求,描述大致就是同一个用户在A系统数据库保存的数据信息与在B系统数据库保存的数据信息要保持同步.当A系统用户修改了个人信息,A系统后台在将用户修改后的信息入库的同时也会向B系统发 ...

  5. 数据库同步和数据库复制技术分析

    如何针对不同的应用选择不同的产品,需要我们必须清楚数据库同步和数据库复制的具体含义. 无论概念如何定义,我们都必须清楚,这两种操作的基础是数据库中的数据,但是包含的数据内容却有所不同 数据库同步,顾名 ...

  6. 达梦数据迁移工具入门操作

    DM数据迁移工具,入门操作 1. 首先找到**DM数据迁移工具**,有两种找法, 2. 第一次打开**DM数据迁移工具**,需要新建工程 3. 起一个工程名 4. 点击迁移,然后选择新建迁移,起一个迁 ...

  7. 用Aliyun E-MapReduce集群的sqoop工具和数据库同步数据如何配置网络

    如果您的E-MapReduce集群需要和集群之外的数据库同步数据,需要确保网络是联通的.本文就RDS,ecs自搭,云下私有数据库三种情况,分别介绍如何配置网络. 一.RDS 经典网络RDS 想要访问经 ...

  8. C#同步SQL Server数据库中的数据--数据库同步工具[同步已有的有变化的数据]

    C#同步SQL Server数据库中的数据--数据库同步工具[同步已有的有变化的数据] 1. C#同步SQL Server数据库Schema 2. C#同步SQL Server数据库中的数据--数据库 ...

  9. 记一次阿里云RDS与自建数据库同步中断的补救过程

    背景 2018年4月24日上午9点左右,小编在即将托管的服务器上建立数据库,并通过openvpn建立加密隧道,从而实现阿里云RDS和本地自建数据库之间同步.在托管服务器上配置openvpn后,重启op ...

最新文章

  1. MIT自动驾驶船下水!可乘坐5人,阿姆斯特丹运河航行3小时误差不到0.17米
  2. kafka comsumer
  3. Oliver的救援pascal程序
  4. python3字符串操作_python3-字符串操作
  5. android 引用路径,android – ClassLoader引用了未知路径:/ data...
  6. [团队项目3.0]Scrum团队成立
  7. fzu 1675 The Seventy-seven Problem
  8. 温泉季节到了,设计师需要的SPA插画,完美体现那一池的温暖!
  9. java函数式编程入口_Java中的函数式编程
  10. PAT (Basic Level) Practice1001 害死人不偿命的(3n+1)猜想
  11. LoadRunner测试Google Suggest
  12. 【2020CCPC秦皇岛:C】Cameraman(计算几何+思维+枚举)
  13. 测试计划工作的目的是什么?
  14. 计算机网络安全中的审计,什么是网络安全审计
  15. Go: 内置net/http库解析
  16. CONV SAME CONV VAILD CONV
  17. requests库安装和简单功能学习总结
  18. KSO-C#语言2021年落选,Python获年度编程语言
  19. 【转载】联想ThinkPad X390笔记本装win7系统及BIOS设置方法
  20. 深度学习笔记整理(五)——提高泛化能力的方法

热门文章

  1. 正大国家期货:期货交易系统中包括的四个要素
  2. 华硕笔记本电脑BIOS设置fancystart后黑屏
  3. 私域运营第十三讲:企业微信需不需要养号?
  4. 代码签名、驱动签名的常见问题解答
  5. 第一篇【Python】基础-关东升-专题视频课程
  6. Mastering Microsoft Teams 免积分下载
  7. 使用MATLAB打开.bdf脑电文件
  8. Vivado识别Flash型号失败
  9. 盘点IT业年度十大关键词:2009年在偷菜中溜走
  10. 计算机考研复试-软件工程