原来采用A表与B表的差集进行新增同步, 考虑到有些表的新增时有个字段会在原来的基础上递增, 这样只需比较A表和B表那个字段的最大值, 就可以进行新增同步, 性能改进明显.
数据量大的表都是有历史数据在里面, 就可以建立两个视图, 一个对应当日数据, 一个对于历史数据,
这些数据有个特点, 历史数据不变, 当日数据不断变化.
为此在变更同步是, 只需要考虑当日数据, 不需要考虑历史数据, 这样大量减少比较的时间, 性能改进相当明显.
原来一张表在变更更新时,都> 600秒, 现在全部变更更新时, 只要4.281秒
零, 代码自动生成
1, 生成视图创建代码
2, ETL的SQL代码
一,处理功能
0, ETL.删除(ETL_IS_FOR_DELETE)
删除目的表的最新数据, 不包括归档的历史数据
1, ETL.初始(ETL_IS_BY_INIT)
初始化, 全部插入
2, ETL.同步.新增.增量(ETL_IS_BY_ADD_WITH_INCREASE)
如果源表有新增的,并且新增的行有时间可以标识出来,如ID,时间戳, 然后按此字段进行把源表新增的同步到目的表
3, ETL.同步.新增.差集(ETL_IS_BY_ADD_WITH_DIFF)
如果源表有新增的,但新增的行不能用时间标识出来, 就只能进行两笔对比, 找出差集, 然后新增
4, ETL.同步.变更.更新(ETL_IS_BY_CHANGE_FOR_UPDATE)
如果源表有变更的, 采用每个字段对比的方式判断, 如果有一个字段变化,就整行更新
5, ETL.同步.变更.删除(ETL_IS_BY_CHANGE_FOR_DELETE)
如果源表有变更的, 采用每个字段对比的方式判断, 如果有一个字段变化,就整行删除, 后面采用ETL.同步.新增.差集 插入此记录
6, ETL.同步.变更.归档(ETL_IS_BY_CHANGE_FOR_ARCHIVE)
如果源表有变更的, 采用每个字段对比的方式判断, 如果有一个字段变化,就将此行归档, 即是将此ID记录的所有行年龄+1, 后面采用ETL.同步.新增.差集 插入此记录
二, 日志记录 记录ETL的内容
相关资源:Java 面经手册·小傅哥(公众号:bugstack虫洞栈).pdf