数据迁移说白了就是把数据从一个数据仓库搬到另一个数据仓库。但是如果数据仓库之间的结构不一样的话,就会大大增加迁移的难度。一般的迁移工具只能处理表与表之间、字段之间的简单转换,如果遇上了表结构大不相同的数据迁移,那编写合适的迁移程序就相当必要了。
对于一个重构系统而言,由于业务流程改进和代码结构优化,所用及的数据结构也会有很大程度的改变。新系统有些字段可能需要查询旧系统多个表多个字段,经过复杂的逻辑运算后才能确定。如果新旧系统要并行使用一段时间有增量迁移的需求,则更增加了迁移程序的复杂度。不同的系统会有不同的迁移算法,至今也不会有哪一种迁移程序可以涵盖所有的数据迁移需求。本文所列方法只限于新旧系统都是采用hibernate框架进行数据持久化,且新旧系统数据结构有很大不同的情况下使用为佳。
采用hibernate进行数据持久化后,数据仓库之间的数据迁移就转换成了对象之间的迁移,我们所要做的无非就是产生新系统的对象然后把它保存,用对象来处理复杂逻辑一向比用单纯的表字段来得更简洁容易。我们就是要架构这样的一个框架,使开发人员只需关注新旧系统对象间的转化,其它的都交由框架去处理。
因此我们定义了这样一个接口IDataTransferService,该接口提供两个方法,add和update,add只对老系统进行新增操作,update除了新增操作外还会对同一对象进行修改操作。相对对象的确认可以通过编程来判断,默认的是根据id值判断。继承IdataTransferService后就是一个对象转换逻辑类。
IdataTransferService和一个基本实现类BaseServiceImpl,该类实现add和update方法,在这里要注意的是要做分页和transaction处理。4个protected方法,isNeedTransform指示是否要执行transform操作,在特殊情况下,系统只需要执行afterTransform的操作;afterTransform是指执行完transform操作后需要同时进行的一些后续处理;getOldDao指示对旧系统进行数据操作的DAO;getNewDao提示对新系统进行数据操作的DAO;transform是最主要的业务方法,处理新旧系统的对象转换。
HibernateDaoImpl提供了基本的数据库操作,OldDaoImpl和NewDaoImpl都继承自它。OldDaoImpl是对旧系统的数据操作DAO,通过setBaseDaoSessionFactory方法指定数据源;getEntityClass指定旧系统的对象类;getAll从start开始取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;
}
|
BaseServiceImpl的add和update方法,以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
分享到:
相关推荐
在数据迁移流程章节中,华为工程师和合作工程师对数据迁移的整个流程进行了详细的介绍,包括数据迁移的准备、执行和验证等多个步骤。 在数据迁移前准备章节中,华为工程师和合作工程师对数据迁移前的准备工作进行...
综上所述,数据迁移整合是一个涉及多个层面的复杂过程,包括技术、业务流程和管理策略的协调。成功的迁移整合不仅需要深入理解原有系统,还需要精确规划和执行,以及后期的持续监控,以保证系统的稳定运行和业务的...
综上所述,NC56/57至NC63数据迁移工具手册提供了全面的数据迁移指导,覆盖了从前期准备到后期验证的整个流程。通过遵循这些指南,企业能够更加高效、安全地完成系统升级,最大程度地减少业务中断,实现平稳过渡。
数据迁移整合方案 数据迁移整合是指在新旧系统之间进行数据迁移和整合,以确保业务的顺利开展。在本方案中,我们将讨论数据迁移整合的需求分析、系统迁移和整合目标、系统切换方案等方面的内容。 需求分析是数据...
本篇文章将详细介绍LSMW的使用方法和操作步骤,帮助用户理解和掌握如何进行SAP数据迁移。 1. **介绍** 1.1 **目的** - 本介绍旨在为用户解释LSMW的作用,指导其在SAP数据迁移过程中如何有效利用该工具。 1.2 **...
6. **导库工具**:这个文件可能是数据迁移工具的一部分,可能包含了用于导入或导出数据库对象和数据的实用程序。它可以是一个图形界面工具,也可以是命令行工具,用于执行实际的数据迁移操作。 7. **最佳实践**:在...
在大数据领域,数据迁移是一项关键任务,特别是在组织从自建数据中心向云平台迁移的过程中。本文档详细记录了一次从自建Hadoop集群到华为云MRS(Managed Service for Big Data)的大规模数据迁移项目,涉及到了Hive...
数据库表数据迁移是一个常见的任务,尤其在企业级应用中,可能因为系统升级、数据库更换或数据整合等原因需要进行。在这个场景下,我们看到的“数据库表数据迁移”是从MySQL数据库到Oracle数据库的迁移过程。下面将...
PPME通过减少应用程序中断、降低迁移风险和简化操作流程,使得数据迁移更加无缝。 2. **SAN COPY**:这是VNX系列附带的免费工具,用于在VNX、Symmetrix和第三方阵列之间进行快速数据移动和迁移,对主机应用程序的...
总结起来,"KISETL数据迁移程序"是一个用于数据迁移的源码级解决方案,它结合了7z压缩技术和ETL流程,旨在解决复杂的数据迁移挑战。通过分析和利用其源码,开发者可以定制自己的数据迁移策略,提升数据处理的效率和...
整个Hadoop数据迁移过程中,importtsv工具发挥了重要作用,它通过两步转化和加载机制,简化了从HDFS到HBase的数据迁移流程,提升了数据处理的效率,并且保证了数据导入的质量。对于大数据处理和数据库运维人员来说,...
Oracle导Mysql适用于百、千万级别数据迁移,速度是kettle的10倍以上数据库迁移 数据迁移 千万级 亿万级数据,MySQL oracle关系型 现需要开发一套程序用来快速迁移数据库,要求如下: 1.使用人员可以指定迁移数据库...
现需要开发一套程序用来快速迁移数据库,要求如下: 1.使用人员可以指定迁移数据库类型 如:(orcal,sqlServer,csv 迁移至mysql) 2.在迁移数据库时,可以只迁移指定字段. 3.开发多任务的平台,按权重去执行任务,如:...
数据迁移流程包括迁移环境准备、配置目标存储、数据备份、迁移数据、同步备机、添加目标存储多路径等步骤。在实施数据迁移之前,需要先准备好迁移环境,包括准备参考文档、查询系统信息、获取所需的软件和工具、检查...
其次,与开发团队沟通,明确数据迁移过程中的表关系、迁移工具或程序的使用,以及数据检查方法。这有助于确保数据迁移的准确性和完整性。 接下来是测试计划和测试用例的编写。测试用例应覆盖所有关键业务流程,确保...
将数据库1的表A迁移到数据库2的表B里面,自己配置数据库,和表的数据库信息和字段信息就可以了!很简单
《DataX数据迁移插件——DB2Reader深度解析》 在大数据处理领域,高效、稳定的数据迁移是一项至关重要的任务。DataX作为阿里巴巴开源的一款强大、通用的数据同步工具,广泛应用于各种数据库之间的数据迁移。其中,...
这个压缩包文件提供了一个专门用于Elasticsearch数据迁移的工具,让我们来详细了解一下这个工具及其工作原理。 1. **Elasticsearch集群间迁移** 当你需要在两个不同的Elasticsearch集群之间迁移数据时,这个工具...