当前位置: 首页 > 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’这些字段这个还是得结合具体业务来分析。

 

 

相关文章:

数据库迁移测试

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

ASP .Net Core ILogger日志服务

🐳简介 ILogger日志服务是.NET平台中的一个内置服务,主要用于应用程序的日志记录。它提供了灵活的日志记录机制,允许开发者在应用程序中轻松地添加日志功能。以下是其主要特点和组件: ILogger接口:这是ILogger日志服…...

LeetCode 2657.找到两个数组的前缀公共数组

给你两个下标从 0 开始长度为 n 的整数排列 A 和 B 。 A 和 B 的 前缀公共数组 定义为数组 C ,其中 C[i] 是数组 A 和 B 到下标为 i 之前公共元素的数目。 请你返回 A 和 B 的 前缀公共数组 。 如果一个长度为 n 的数组包含 1 到 n 的元素恰好一次,我…...

【jvm】jinfo使用

jinfo介绍 jinfo 是一个命令行工具,用于查看和修改 Java 虚拟机(JVM)的配置参数。它通常用于调试和性能调优。 使用 jinfo 命令,你可以查看当前 JVM 的配置参数,包括堆大小、线程数、垃圾回收器类型等。此外&#xf…...

C++ Thread 源码 观后 自我感悟 整理

Thread的主要数据成员为_Thr 里面存储的是线程句柄和线程ID 先看看赋值运算符的移动构造 最开始判断线程的ID是否不为0 _STD就是使用std的域 如果线程ID不为0,那么就抛出异常 这里_New_val使用了完美转发,交换_Val和_New_val的值 _Thr _STD exchange(_…...

2024阿里云2核2G服务器租用价格99元和61元一年

阿里云2核2G服务器配置优惠价格61元一年和99元一年,61元是轻量应用服务器2核2G3M带宽、50G高效云盘;99元服务器是ECS云服务器经济型e实例ecs.e-c1m1.large,2核2G、3M固定带宽、40G ESSD entry系统盘,阿里云活动链接 aliyunfuwuqi.…...

刚刚!奥特曼剧透GPT-5,将在高级推理功能上实现重大进步

奥特曼:“GPT-5的能力提升幅度将超乎人们的想象…” 自 Claude 3 发布以来,外界对 GPT-5 的期待越来越强。毕竟Claude 3已经全面超越了 GPT-4,成为迄今为止最强大模型。 而且距离 GPT-4 发布已经过去了整整一年时间,2023年3月14…...

uniapp使用Canvas给图片加水印把临时文件上传到服务器

生成的临时路径是没有完整的路径没办法上传到服务器 16:37:40.993 添加水印后的路径, _doc/uniapp_temp_1710923708347/canvas/17109238597881.png 16:37:41.041 添加水印后的完整路径, file://storage/emulated/0/Android/data/com.jingruan.zjd/apps/__UNI__BE4B000/doc/…...

小希的迷宫

目录 描述 输入 输出 样例输入 样例~~输出~~ 思路 code 描述 Gardon的迷宫城堡小希玩了很久(见Problem B),现在她也想设计一个迷宫让Gardon来走。但是她设计迷宫的思路不一样,首先她认为所有的通道都应该是双向连通的&…...

MySQL索引剖析【了解背后的数据结构】

文章目录 常用索引概念聚簇索引 🎉非聚簇索引(二级索引) 数据结构选择Hash结构 ⭐️有序数组二叉搜索树AVL树(平衡二叉搜索树)B-Tree(多路平衡查找树)BTree ⭐️ MySQL中索引的实现InnoDB 索引实…...

004——内存映射(基于鸿蒙和I.MAX6ULL)

目录 一、 ARM架构内存映射模型 1.1 页表项 1.2 一级页表映射过程 1.3 二级页表映射过程 1.4 cache 和 buffer 二、 鸿蒙内存映射代码学习 三、 为板子编写内存映射代码 3.1 内存地址范围 3.2 设备地址范围 一、 ARM架构内存映射模型 (以前我以为页表机制…...

150 Linux C++ 通讯架构实战6 服务器程序目录规划,makefile编写

从无到有产生这套 通讯架构源代码【项目/工程】 一,服务器程序目录规划 一个完整的项目 肯定会有多个源文件,头文件,会分别存放到多个目录; 我们这里要规划项目的目录结构; 注意:不固安是目录还是文件&am…...

OpenCV支持哪些类型的文件格式读写?

OpenCV支持多种类型的文件格式读写,包括但不限于以下格式: Windows位图文件:包括BMP和DIB格式。JPEG文件:支持JPEG、JPG和JPE三种扩展名。便携式网络图片:即PNG格式。便携式图像格式:包括PBM、PGM和PPM三种…...

数据库中使用IN操作效率问题

1. IN操作的基本概念 IN操作符在SQL中用于指定某个字段的值是否匹配列表中的任何值。这是一个条件操作符,用于在WHERE子句中过滤记录。 SQL语法示例: SELECT * FROM table_name WHERE column_name IN (value1, value2, ...); 2. IN操作的效率问题 当…...

unity学习(67)——控制器Joystick Pack方向

1.轮盘直接复制一个拖到右边就ok了,轮盘上是有脚本的。(只复制) 2.上面的显示窗也可以复制,但是要绑定对应的轮盘(unity中修改变量),显示窗上是有脚本的。(复制改变量) 3…...

MATLAB的使用(一)

一,MATLAB的编程特点 a,语法高度简化; b,脚本式解释型语言; c,针对矩阵的高性能运算; d,丰富的函数工具箱支持; e,通过matlab本体构建跨平台; 二,MATLAB的界面 工具栏:提供快捷操作编辑器…...

JMeter并发工具的使用

视频地址:Jmeter安装教程01_Jmeter之安装以及环境变量配置_哔哩哔哩_bilibili 一、JMeter是什么 JMeter是一款免安装包,官网下载好后直接解压缩并配置好环境变量就可以使用。 环境变量配置可参考:https://www.cnblogs.com/liulinghua90/p/…...

基于springboot+vue的毕业就业信息管理系统

博主主页:猫头鹰源码 博主简介:Java领域优质创作者、CSDN博客专家、阿里云专家博主、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战,欢迎高校老师\讲师\同行交流合作 ​主要内容:毕业设计(Javaweb项目|小程序|Pyt…...

有什么小程序适合个人开发?

在这个信息爆炸的时代,小程序已经成为了我们生活中的一部分。无论是出行、购物还是娱乐,小程序都能为我们提供便捷的服务。对于个人开发者来说,开发一个小程序不仅可以锻炼自己的技术能力,还可以为他人提供便利,甚至有…...

【ARXIV2402】MambaIR

这个工作首次将 Mamba 引入到图像修复任务,关于为什么 Mamba 可以用于图像修复,作者有非常详细的解释:一路向北:性能超越SwinIR!MambaIR: 基于Mamba的图像复原基准模型 作者认为Mamba可以理解为RNN和CNN的结合&#xf…...

OpenLayers 可视化之热力图

注:当前使用的是 ol 5.3.0 版本,天地图使用的key请到天地图官网申请,并替换为自己的key 热力图(Heatmap)又叫热点图,是一种通过特殊高亮显示事物密度分布、变化趋势的数据可视化技术。采用颜色的深浅来显示…...

python/java环境配置

环境变量放一起 python: 1.首先下载Python Python下载地址:Download Python | Python.org downloads ---windows -- 64 2.安装Python 下面两个,然后自定义,全选 可以把前4个选上 3.环境配置 1)搜高级系统设置 2…...

【ROS】Nav2源码之nav2_behavior_tree-行为树节点列表

1、行为树节点分类 在 Nav2(Navigation2)的行为树框架中,行为树节点插件按照功能分为 Action(动作节点)、Condition(条件节点)、Control(控制节点) 和 Decorator(装饰节点) 四类。 1.1 动作节点 Action 执行具体的机器人操作或任务,直接与硬件、传感器或外部系统…...

unix/linux,sudo,其发展历程详细时间线、由来、历史背景

sudo 的诞生和演化,本身就是一部 Unix/Linux 系统管理哲学变迁的微缩史。来,让我们拨开时间的迷雾,一同探寻 sudo 那波澜壮阔(也颇为实用主义)的发展历程。 历史背景:su的时代与困境 ( 20 世纪 70 年代 - 80 年代初) 在 sudo 出现之前,Unix 系统管理员和需要特权操作的…...

【JavaSE】绘图与事件入门学习笔记

-Java绘图坐标体系 坐标体系-介绍 坐标原点位于左上角,以像素为单位。 在Java坐标系中,第一个是x坐标,表示当前位置为水平方向,距离坐标原点x个像素;第二个是y坐标,表示当前位置为垂直方向,距离坐标原点y个像素。 坐标体系-像素 …...

【HTTP三个基础问题】

面试官您好!HTTP是超文本传输协议,是互联网上客户端和服务器之间传输超文本数据(比如文字、图片、音频、视频等)的核心协议,当前互联网应用最广泛的版本是HTTP1.1,它基于经典的C/S模型,也就是客…...

docker 部署发现spring.profiles.active 问题

报错: org.springframework.boot.context.config.InvalidConfigDataPropertyException: Property spring.profiles.active imported from location class path resource [application-test.yml] is invalid in a profile specific resource [origin: class path re…...

Linux 内存管理实战精讲:核心原理与面试常考点全解析

Linux 内存管理实战精讲:核心原理与面试常考点全解析 Linux 内核内存管理是系统设计中最复杂但也最核心的模块之一。它不仅支撑着虚拟内存机制、物理内存分配、进程隔离与资源复用,还直接决定系统运行的性能与稳定性。无论你是嵌入式开发者、内核调试工…...

Go 语言并发编程基础:无缓冲与有缓冲通道

在上一章节中,我们了解了 Channel 的基本用法。本章将重点分析 Go 中通道的两种类型 —— 无缓冲通道与有缓冲通道,它们在并发编程中各具特点和应用场景。 一、通道的基本分类 类型定义形式特点无缓冲通道make(chan T)发送和接收都必须准备好&#xff0…...

基于IDIG-GAN的小样本电机轴承故障诊断

目录 🔍 核心问题 一、IDIG-GAN模型原理 1. 整体架构 2. 核心创新点 (1) ​梯度归一化(Gradient Normalization)​​ (2) ​判别器梯度间隙正则化(Discriminator Gradient Gap Regularization)​​ (3) ​自注意力机制(Self-Attention)​​ 3. 完整损失函数 二…...