`
onlyerlee
  • 浏览: 5939 次
  • 来自: ...
最近访客 更多访客>>
社区版块
存档分类
最新评论

数据迁移程序介绍

 
阅读更多

 

数据迁移说白了就是把数据从一个数据仓库搬到另一个数据仓库。但是如果数据仓库之间的结构不一样的话,就会大大增加迁移的难度。一般的迁移工具只能处理表与表之间、字段之间的简单转换,如果遇上了表结构大不相同的数据迁移,那编写合适的迁移程序就相当必要了。

 

对于一个重构系统而言,由于业务流程改进和代码结构优化,所用及的数据结构也会有很大程度的改变。新系统有些字段可能需要查询旧系统多个表多个字段,经过复杂的逻辑运算后才能确定。如果新旧系统要并行使用一段时间有增量迁移的需求,则更增加了迁移程序的复杂度。不同的系统会有不同的迁移算法,至今也不会有哪一种迁移程序可以涵盖所有的数据迁移需求。本文所列方法只限于新旧系统都是采用hibernate框架进行数据持久化,且新旧系统数据结构有很大不同的情况下使用为佳。

 

采用hibernate进行数据持久化后,数据仓库之间的数据迁移就转换成了对象之间的迁移,我们所要做的无非就是产生新系统的对象然后把它保存,用对象来处理复杂逻辑一向比用单纯的表字段来得更简洁容易。我们就是要架构这样的一个框架,使开发人员只需关注新旧系统对象间的转化,其它的都交由框架去处理。

 

因此我们定义了这样一个接口IDataTransferService,该接口提供两个方法,addupdateadd只对老系统进行新增操作,update除了新增操作外还会对同一对象进行修改操作。相对对象的确认可以通过编程来判断,默认的是根据id值判断。继承IdataTransferService后就是一个对象转换逻辑类。



 

 

IdataTransferService和一个基本实现类BaseServiceImpl,该类实现addupdate方法,在这里要注意的是要做分页和transaction处理。4protected方法,isNeedTransform指示是否要执行transform操作,在特殊情况下,系统只需要执行afterTransform的操作;afterTransform是指执行完transform操作后需要同时进行的一些后续处理;getOldDao指示对旧系统进行数据操作的DAOgetNewDao提示对新系统进行数据操作的DAOtransform是最主要的业务方法,处理新旧系统的对象转换。



 HibernateDaoImpl提供了基本的数据库操作,OldDaoImplNewDaoImpl都继承自它。OldDaoImpl是对旧系统的数据操作DAO,通过setBaseDaoSessionFactory方法指定数据源;getEntityClass指定旧系统的对象类;getAllstart开始取count数量条记录。如果start<0则取全部记录,注意,如果实体没有名为id的属性,则需要重写这个方法,这是为性能考虑。

NewDaoImpl是对新系统的数据操作DAO,通过setBaseDaoSessionFactory方法指定数据源;getEntityClass指定旧系统的对象类;getBySrcEntity根据旧对象查找对应的新对象,有些要通过旧系统实体的联合主键来确定,一般可以用联合主键组合起来的MD5编码来作为新系统对象的主键。



 TransactionSaveService是具有事务的批处理类,它会把分页内的所有对象放在一个事务内处理。


 

public long transData(BaseServiceImpl service, List oldList, boolean isUpdate) {

      long processCount = 0; // 已经处理的记录数

 

      for (int j = 0; j < oldList.size(); j++) {

        IdEntity src = (IdEntity) oldList.get(j);

        if (service.getOldDao().getEntityClass()!=null) {

           src = (IdEntity) service.getOldDao().get(service.getOldDao().getEntityClass(), src.getId());

        }

 

        Object target = null;

        if (service.isNeedTransform()) {

           target = service.getNewDao().getBySrcEntity(service.getEntityClass(), src);

           // 如果新对象中已有记录且不是更新

           if (target != null && !isUpdate) {

              continue;

           }

           if (target == null) {

              try {

                 target = service.getEntityClass().newInstance();

              } catch (Exception e) {

                 e.printStackTrace();

              }

           }

           if (target != null) {

              service.transform(target, src);

              save(service.getNewDao(), target);

 

              processCount++;

           }

        }

        service.afterTransform(target, src);

      }

      return processCount;

   }

 

 

BaseServiceImpladdupdate方法,以update为例

 

@Override

public void update (int startPage, int endPage, String startDate, String endDate) throws NmoException {

      Logger.getLogger(this.getClass()).debug("Begin update by time transform!");

      long beginTime = System.currentTimeMillis();

 

      long processCount = 0; // 已经处理的记录数

      for (int i = startPage; i <= endPage; i++) {

        List oldList = getOldDao().getAll(i, IDataTransferService.PageSize, startDate, endDate);

        if (oldList == null || oldList.isEmpty()) {

           break;

        }

 

        Logger.getLogger(this.getClass()).debug(

              "Processing ... Number(" + IDataTransferService.PageSize + "): " + i);

 

        processCount += getTransactionSaveService().transData(this, oldList, true);

      }

 

      long endTime = System.currentTimeMillis();

      Logger.getLogger(this.getClass()).debug(

           "End transform, total transform: " + processCount + " records, total cost: " + (endTime - beginTime)

                 + "ms");

   }

 

 

至此,数据迁移框架已经成形,我们只需要为每一个新系统实体编写对应的service类,newDao类和oldDao类。

  • 大小: 13.4 KB
  • 大小: 31.6 KB
  • 大小: 32.6 KB
  • 大小: 8.7 KB
分享到:
评论

相关推荐

    数据迁移服务V200R100C00----VMware虚拟机数据迁移方案.doc

    在数据迁移流程章节中,华为工程师和合作工程师对数据迁移的整个流程进行了详细的介绍,包括数据迁移的准备、执行和验证等多个步骤。 在数据迁移前准备章节中,华为工程师和合作工程师对数据迁移前的准备工作进行...

    数据迁移整合的方案的报告.pdf

    综上所述,数据迁移整合是一个涉及多个层面的复杂过程,包括技术、业务流程和管理策略的协调。成功的迁移整合不仅需要深入理解原有系统,还需要精确规划和执行,以及后期的持续监控,以保证系统的稳定运行和业务的...

    NC升级数据迁移工具手册

    综上所述,NC56/57至NC63数据迁移工具手册提供了全面的数据迁移指导,覆盖了从前期准备到后期验证的整个流程。通过遵循这些指南,企业能够更加高效、安全地完成系统升级,最大程度地减少业务中断,实现平稳过渡。

    数据迁移整合方案.pdf

    数据迁移整合方案 数据迁移整合是指在新旧系统之间进行数据迁移和整合,以确保业务的顺利开展。在本方案中,我们将讨论数据迁移整合的需求分析、系统迁移和整合目标、系统切换方案等方面的内容。 需求分析是数据...

    数据迁移工具LSMW的使用

    本篇文章将详细介绍LSMW的使用方法和操作步骤,帮助用户理解和掌握如何进行SAP数据迁移。 1. **介绍** 1.1 **目的** - 本介绍旨在为用户解释LSMW的作用,指导其在SAP数据迁移过程中如何有效利用该工具。 1.2 **...

    oracle数据迁移工具

    6. **导库工具**:这个文件可能是数据迁移工具的一部分,可能包含了用于导入或导出数据库对象和数据的实用程序。它可以是一个图形界面工具,也可以是命令行工具,用于执行实际的数据迁移操作。 7. **最佳实践**:在...

    大数据-数据迁移-hive、hbase、kudu迁移

    在大数据领域,数据迁移是一项关键任务,特别是在组织从自建数据中心向云平台迁移的过程中。本文档详细记录了一次从自建Hadoop集群到华为云MRS(Managed Service for Big Data)的大规模数据迁移项目,涉及到了Hive...

    数据库表数据迁移

    数据库表数据迁移是一个常见的任务,尤其在企业级应用中,可能因为系统升级、数据库更换或数据整合等原因需要进行。在这个场景下,我们看到的“数据库表数据迁移”是从MySQL数据库到Oracle数据库的迁移过程。下面将...

    数据迁移解决方案.docx

    PPME通过减少应用程序中断、降低迁移风险和简化操作流程,使得数据迁移更加无缝。 2. **SAN COPY**:这是VNX系列附带的免费工具,用于在VNX、Symmetrix和第三方阵列之间进行快速数据移动和迁移,对主机应用程序的...

    KISETL数据迁移程序.7z

    总结起来,"KISETL数据迁移程序"是一个用于数据迁移的源码级解决方案,它结合了7z压缩技术和ETL流程,旨在解决复杂的数据迁移挑战。通过分析和利用其源码,开发者可以定制自己的数据迁移策略,提升数据处理的效率和...

    Hadoop数据迁移--使用importtsv两步载入数据

    整个Hadoop数据迁移过程中,importtsv工具发挥了重要作用,它通过两步转化和加载机制,简化了从HDFS到HBase的数据迁移流程,提升了数据处理的效率,并且保证了数据导入的质量。对于大数据处理和数据库运维人员来说,...

    Oracle导Mysql适用于百、千万级别数据迁移

    Oracle导Mysql适用于百、千万级别数据迁移,速度是kettle的10倍以上数据库迁移 数据迁移 千万级 亿万级数据,MySQL oracle关系型 现需要开发一套程序用来快速迁移数据库,要求如下: 1.使用人员可以指定迁移数据库...

    数据库迁移 数据迁移 千万级 亿万级数据MySQL oracle关系型

    现需要开发一套程序用来快速迁移数据库,要求如下: 1.使用人员可以指定迁移数据库类型 如:(orcal,sqlServer,csv 迁移至mysql) 2.在迁移数据库时,可以只迁移指定字段. 3.开发多任务的平台,按权重去执行任务,如:...

    数据迁移服务虚拟机数据迁移方案.doc

    数据迁移流程包括迁移环境准备、配置目标存储、数据备份、迁移数据、同步备机、添加目标存储多路径等步骤。在实施数据迁移之前,需要先准备好迁移环境,包括准备参考文档、查询系统信息、获取所需的软件和工具、检查...

    历史数据迁移的测试,性能测试的

    其次,与开发团队沟通,明确数据迁移过程中的表关系、迁移工具或程序的使用,以及数据检查方法。这有助于确保数据迁移的准确性和完整性。 接下来是测试计划和测试用例的编写。测试用例应覆盖所有关键业务流程,确保...

    数据库数据迁移程序

    将数据库1的表A迁移到数据库2的表B里面,自己配置数据库,和表的数据库信息和字段信息就可以了!很简单

    datax数据迁移插件-db2reader

    《DataX数据迁移插件——DB2Reader深度解析》 在大数据处理领域,高效、稳定的数据迁移是一项至关重要的任务。DataX作为阿里巴巴开源的一款强大、通用的数据同步工具,广泛应用于各种数据库之间的数据迁移。其中,...

    es迁移工具,实现es数据的两个集群之间或者导出到本地进行迁移.zip

    这个压缩包文件提供了一个专门用于Elasticsearch数据迁移的工具,让我们来详细了解一下这个工具及其工作原理。 1. **Elasticsearch集群间迁移** 当你需要在两个不同的Elasticsearch集群之间迁移数据时,这个工具...

Global site tag (gtag.js) - Google Analytics