当前位置: 首页 > news >正文

数据库迁移测试

数据迁移测试

在进行项目重构或者更新的时候或多或少会对数据库进行变更,为了保证业务的稳定性对数据进行迁移测试是很有必要的,因为数据就是业务的基石,没有数据业务都是空中楼阁,形同虚设,小编结合近期的工作对数据迁移测试做一个小总结,看看数据库迁移主要需要注意的事项。

数据库

数据源变更:数据库名称、数据库类型等,一般情况下在同类型的数据库之间迁移比较常见,但是也存在不同类型的数据库之间的迁移,例如:oracle到MySQL等等,非关系型数据库到关系型,关系型到非关系型。

数据表:

表名称变更

这个比较常见。

例如原来名称为a,迁移后为a1

表结构变更

这个也很常见,常见的变更如下:

字段新增:例如随着业务拓展,原来的定义的字段不能满足新业务需求,需要新增字段

字段减少:有些过时的字段新业务不再需要,例如邮编,现在几乎用不到了;还有就是有的字段迁移到其他表去了。

字段名称变更:之前有些字段命名不规范或者不贴合业务需求等原因。

字段数据类型变更:比较多的是unix时间变成YYYY-MM-DD HH:mm:ss或者反之,字符串转数字,数字转字符串

字段映射关系变更:这种情况是表示某种事务的状态比较多。例如订单的状态:1、2、3,数据删除状态:0、1等,在迁移后可能有新的映射关系。映射值比较类型变更,例如之前等于某个值即可表示某种状态,后面迁移只后要对值进行位运算才能判断,或者进行集合运算才能判断,例如判断值是否在某个范围,或者包含某个值才表示某个状态;另外还有一种情况就是这个字段映射到那个字段去了不一定和之前的字段对应。

表数量变更:现在都流行分库分表,原来可能只一个表,迁移后可能存在三四个表;也可能存在多个表合并成一个表的情况。

表约束变更:比如之前有些字段不能为Null,后面迁移可以为NULL。

表索引变更:迁移后索引名称或者字段发生变更,索引变更后如果之前的一些关键字段没有索引可以通过中间表的索引进行转换,不然数据量大的情况下没索引寸步难行。

迁移关系:

一对一(或者单表分片)的数据迁移:

确定对比字段时一般以旧表字段为对比字段。

这种关系一般比较简单就是从一个表迁移到另外一个表,大部分字段也会保持一致,会有很少的字段发生变化,这个时候只需要根据相应的字段进行新旧表关联数据查询即可查询出旧表关联的新数据,进而进行数据对比。当然还有种情况是虽然是单表一对一迁移,但是迁移后可能进行了分表操作,这时候就需要将新表都联合起来进行查询,假设A为旧表,B为新表如:

SELECT

A.对比字段1,

A.对比字段2

FROM oppo_cn.order_receipts AS A

JOIN   (

        SELECT * FROM a.t _0

        UNION ALL

        SELECT * FROM a.t __1

        UNION ALL

        SELECT * FROM a.t __2

        UNION ALL

        SELECT * FROM a.t __3

    ) AS  B ON A. id = B.id

 

B表以此类推。

这种情况一般都是以旧表字段为对比字段,因此如果B表字段有差异的话需要进行转换,例如时间格式不一致等。

 

一对多的数据迁移:

确定对比字段时大部分字段以旧表字段为准,有的会以新表字段为准。

有些时候也会存在旧表一张业务表在新表对应多个业务表,旧表中不同的字段分布在不同的表中。这种情况旧稍微复杂一点,需要从新表中分别查出旧表对应的字段。有的字段需要以旧表为对比标准,有的需要以新表字段为对比标准,这个要具体业务具体分析。这种情况下一般会存在数据拆分或者数据合并的问题。例如旧表中的一个字段之前是一个数组,在新表中对应多个分散的值,这个时候就需要巧妙的运用CASE WHEN 条件语句、子查询、聚合函数了。

 

多对多

这种关系一般极少几乎不存在这样的对应关系,确定对比字段要结合具体业务分析。

 

确定测试方案:

知道上述差异后我们就可以拟定测试方案了,因为一般在数据迁移的过程中表结构多多少少有些变更,我们再迁移关系中确定对比关系后就知道怎么展开测试了,当然一般数据库中的数据都不会少,所以如果肉眼去对比的话既耗时也不准确,很容易看错,所以最好的办法还是设计脚本进行数据对比。一般情况是将SQL单独分离出来,然后结合脚本来进行数据对比,可以用pandas的compare方法实现数据对比,小编是将查询出来的数据存进Excel然后使用pandas进行对比,不得不说pandas在处理批量数据时还是有一定优势的。

 

注意事项:

数据对比过程中有些缺省值需要做转换,如NULL,0,‘’,‘0’这些字段这个还是得结合具体业务来分析。

 

 

相关文章:

  • 电商平台客户反馈的数据分析与应用
  • Window全网解析网站下载视频
  • macOS访问samba文件夹的正确姿势,在哪里更改“macOS的连接身份“?还真不好找!
  • 24. UE5 RPG制作属性面板(二)
  • Fire Smoke - Dynamic Nature
  • HTTPS:原理、使用方法及安全威胁
  • DNS服务器的分布式架构和集中式架构的区别
  • 上位机图像处理和嵌入式模块部署(qmacvisual之ROI设定)
  • 手撕算法-接雨水
  • C语言字符教组占⽤内存怎样算?
  • 海外媒体宣发:十大国外中文网站-大舍传媒
  • 【短接笔记本或者台式机的CMOS针脚解决电脑开机无法启动BIOS无法进入问题】
  • 【几何】平面方程
  • vue3,ref和reactive声明变量有什么区别,分别怎么用
  • Linux虚拟机的安装部署--尚硅谷笔记
  • 桥接模式简介
  • CentOS7 防火墙(firewalld)常规操作
  • 【自然语言处理】统计中文分词技术(一):1、分词与频度统计
  • 语言模型transformers调用部分 (To be continue...
  • 数据库中冗余字段
  • 人民日报整版聚焦:铭记二战历史,传承深厚友谊
  • 泽连斯基称与特朗普通话讨论停火事宜
  • 以总理内塔尼亚胡称决心彻底击败哈马斯
  • 复旦大学文科杰出教授裘锡圭逝世,享年90岁
  • 太空摄影的发展
  • 暴雨蓝色预警:南方开启较强降雨过程