数据迁移

1、数据迁移分类:

  • 平迁:不需要调整表结构的数据迁移,即为了性能扩展需要从一台服务器迁移到另外一台服务器上,用数据库的导出导入或备份恢复工具处理即可,当然也要考虑迁移后的一些序列字段的初始值。
  • 拆表迁移:数据迁移的过程中发生了拆表行为
    • 垂直拆表:例如:1、增加附件管理以统一管理文件、图片、音频和视频的url地址等信息导致的拆表行为,
    • 水平拆表:单表数据量达到千万级别时为了提高查询效率而将数据以一定的规律分散不同的表存储
  • 合表迁移:数据迁移的过程中发生了合表行为,将不同维度的描述信息表统一为标签表
  • 增表迁移:数据迁移的过程中发生了新增表行为,为满足业务需求而增加的业务表
  • 字段转换:数据迁移的过程中发生了新增字段是由老字段转换过来的行为,外键由id改为name
  • 新增字段:默认值或值的填写规则
  • 库表模型重构:表结构及表关系发生变化,即由以上多种类型的数据迁移混合而成。
    • 了解新老系统各自数据库的表间关系
    • 了解新老系统旧表和新表的对应关系
    • 了解新老系统的字段含义
    • 了解新老系统的旧字段和新字段的对应关系
  • 异构数据迁移,即从一个数据库平台迁移到另外一个数据库平台,用ETL工具或SQL均可实现,不过要注意业务逻辑的迁移,即存储过程、函数、触发器之类的

2、系统分析:提高数据迁移的准确性和完整性,有利于分清主次数据(核心数据和非核心数据,一般越基础的数据越核心),有助于了解用户对历史数据的需求避免盲目地全部性的迁移,有助于确定工作量和工作进度。

  • 旧系统:理清功能模块,业务处理流程
  • 新系统:理清功能模块,业务处理流程

3、旧系统数据的处理规则

  • 基础数据,通常这一类不会发生结构性变化容易迁移,但是会影响所有的相关业务数据,关注点为数据的主键和唯一键的方式。
  • 业务数据
    • 库表结构未变化:这一类数据处理起来会比较容易,一次性导入即可,后续采用增量数据导入。
    • 流程性:这一类数据只有在记录完全关闭后才能结束,需要进行增量导入和数据更新,同时还要进行相关查询界面的开发,以保证旧有数据能够在新系统中查询的到。
    • 库表结构重构,这一类数据的工作量是最重的,就需要仔细去研究新老业务系统的数据结构了。
      • 尽量通过甲方单位来收集齐全相关原系统的相关设计文档,这一点对数据分析很有帮助,通过人的感觉和对数据的观察来分析毕竟不太靠谱。
      • 在原系统上进行相关数据的观察,了解数据的变化和数据表数据的关系(对于比较难以理解的相关字段很有帮助)
      • 比较新老系统数据的差异,如果实在很不靠谱的话,建议按流程数据去处理。

4、技术:数据迁移分为两个过程:导入和导出,平迁:数据量少的话选择navicat等客户端的导入导出方式,数据量多话选择mysql自带sql语句导入/导出,异构数据迁移:选择ETL工具(kittle等),库表模型重构:使用开发语言+sql控制

  • 导出:
    • 导出对于字段较少/字段内容较少的数据,通过客户端方式可以采用navicat等工具导出,我这里本次导出三个字段,都是11位数字以内的值,用navicat导出每分钟大约250万数据,
    • MySQL自带的导出语句:select into outfile语句;
    • 用MySQL自带导出/导入优点是速度极快,缺点是:只能导出文件是在服务器主机所在的本机地址,对于bi之类拿到不数据库主机权限的同事这个方式可能奢望了。
    • 不过好在对于字段/内容较少的报表第三方客户端工具导出速度也不算特别慢;
  • 导入:
    • 重点记录导入,导入主要是dba做数据迁移了,方式也分客户端和MySQL自带方式:
    • 这里极度推荐用MySQL导入方式load data infile语句,原因是我之前要迁移1.3亿数据,用navicat客户端导入数据要22小时,耗时太长且不确定太多,本身navicat等工具就会有假死风险的存在,
    • 所不建议超过1万以上的数据通过navicat导入;
    • 提高效率的方法:
      • 去除索引
      • 更改引擎:不同引擎load机制不一样,myisam更快,使用myisam可以调整session的参数扩大读取内存,导入前可以关闭唯一校验,导入后再打开。
      • 使用服务器本地读取
      • 查看服务器上mysql对cpu的占用率

5、注意事项:

  • 先迁移基础数据表,再迁移业务表及业务关系表
  • 不管哪种类型迁移都要关注字段的类型、大小、是否非空和默认值规则
  • 对业务数据的分析最为关键,需要不断的尝试在新系统上不断的测试

6、参考文档

https://blog.csdn.net/qq_21108311/article/details/82559119 mysql亿级数据导入导出

https://blog.csdn.net/qq_26334813/article/details/80503973 大批量数据如何快速的数据迁移

https://www.cnblogs.com/wayne-ivan/p/3821649.html 关于数据迁移的方法、步骤和心得

https://www.jianshu.com/p/9f6253e6fcc3?from=timeline

7、附加:我的数据迁移计划(流程及技术):

  1. 根据数据迁移类型确定迁移计划
  2. 理解业务逻辑保证业务的完整性和一致性
  3. 确定迁移范围:涉及的表、字段以及记录的数据量
  4. 确定表及字段的对应关系,
  5. 技术选型
  6. 原始数据的保存
  7. 确定迁移流程
  8. 新老数据对比:数据量的一致性
  9. 测试

你可能感兴趣的:(数据迁移)