改进算法+改进策略 == 改进性能三位数

xiaoxiao2022-08-12  117

改进算法

原来采用A表与B表的差集进行新增同步, 考虑到有些表的新增时有个字段会在原来的基础上递增, 这样只需比较A表和B表那个字段的最大值, 就可以进行新增同步, 性能改进明显.

 

改进策略

数据量大的表都是有历史数据在里面, 就可以建立两个视图, 一个对应当日数据, 一个对于历史数据, 

这些数据有个特点, 历史数据不变, 当日数据不断变化.

 

为此在变更同步是, 只需要考虑当日数据, 不需要考虑历史数据, 这样大量减少比较的时间, 性能改进相当明显.

 

改进性能三位数

原来一张表在变更更新时,都> 600秒, 现在全部变更更新时, 只要4.281秒

 

newniu ETL 目前功能

零, 代码自动生成

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
转载请注明原文地址: https://www.6miu.com/read-4974492.html

最新回复(0)