mysql数据迁移双写_数据迁移类测试策略

二、迁移类测试策略

1、概述

随着业务需求或数据量增长到一定程度,往往需要进行数据库切换,这里就伴随这数据迁移。

关键字: 全量数据迁移,增量数据迁移,分库分表,数据双写,oracle、mysql、hbase…,新老数据兼容,数据订正

2、发布方案(迁移方案)

两大类:正常发布、停机发布

正常发布:可以实现线上业务无缝切换,不影响用户使用,需要保证新老数据兼容,发布过程中的数据写入等。

停机发布 : 优点在于可以避免发布过程中的新数据写入,缺点是发布过程中,不能正常提供服务。

发布方案的制定是根据具体业务情况制定发布方案,对业务无影响的情况下较常采用停机发布,方便简单。

介绍一种无缝对接的正常发布方案

A库历史库 mysql分库分表 到 B库新库hbase

步骤1、全量dump1:A库数据全量迁移至B库

步骤2、打开双写:同时写入到A库历史库和B库新库

步骤3、全量dump2:开启双写前的所有差集,将差集灌回B数据库,这里是补充全量dump1期间和开启双写前只写入到A的数据。保证了A、B数据库数据的完全一致,同时已经开启了双写。

步骤3’、测试介入,可对A、B库取某一时间段前所有数据进行数据验证。

步骤4、停止对A库的写入,发布前端应用,切换至B库新库

e525580445fcbe64cf68bb0178920726.png

注意点:

1、双写时,B库不存在被写源数据或B库数据状态异常等情况,需要从业务上考虑,是否直接从A库中获取数据并覆盖至B库

2、以上步骤中的多次dump和双写有多个写入B库的场景,需要以保证B库和A库一致为原则,如B库的重复写入等情况的处理。

3、测试策略

在进行数据迁移测试前,需确认的CheckList

CheckList

1、 哪些表需要迁、哪些表不需要迁;需要迁移的表老库和新库的对应关系是怎样的

2、 明确表的关联关系,关联表是否需要迁移,不迁移怎么处理

3、 迁移的表中,哪些字段要迁移,哪些不迁移,对应关系是怎样的

4、 新表中的字段,老表是不是一定有,如果不一定,怎么处理可能为空的情况,尤其是必填字段的处理

5、 迁移前,新表是否为空,不为空是否可能存在数据重复的情况,怎么处理

6、 新老表中的字段类型、长度的定义是否一致,可否正确转换

7、 需迁移的表数据量为多少

8、 开发做了哪些数据迁移正确性的保障

针对不同的业务场景需要测试人员设计不同的测试方案,主要都是两个层面的验证,数据层面的数据验证和功能层面的功能验证

1、数据验证:使用工具或设计对账程序全量验证

a、全量数据验证

b、增量数据验证

c、抽样数据验证

根据业务情况判断需要进行哪一项或几项数据验证

工具使用:可以选用目前较成熟的迁移工具:愚公移山, 兼全量数据验证和增量数据验证功能

验证方式:若迁移场景不在愚公的适用范围内,全量验证和增量数据验证需要另外设计适用于该场景下的数据验证方案

可采用的一些验证方式:考虑根据不同数据的存储方式,数据量的大小

a、关系数据库,直接新老数据库中jdbc方式获取数据,一条条进行对比,新老数据存在规则转换的情况需要在对账程序中同时进行规则判断。

b、全量或抽样dump历史库和新库两份文件进行对比,数据库非常大的时候推荐使用hadoop

32/3<123>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/550628.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python创建追加_Python文件的创建与追加

(转载)https://www.xshell.net/python/python_open.htmlPosted by 破冰 on 2013-9-17 17:29 Tuesday一、用Python创建一个新文件&#xff0c;内容是从0到9的整数, 每个数字占一行&#xff1a;#python>>>fopen(f.txt,w) # r只读&#xff0c;w可写&#xff0c;a追加&…

medoo update mysql_Medoo Update的使用:修改更新数据

update方法&#xff1a;update($table, $data,$where)&#xff0c;接受三个参数的传入&#xff0c;第三个可默认不传第一个需要传入的参数类型为字符串&#xff1a;String&#xff0c;即为要修改更新数据的数据表名第二个需要传入的参数类型为数组&#xff1a;array()&#xff…

vue限制只能输入数字_vue的input中,如何限制只能输入number

本来想用watch观察v-model的值&#xff0c;一旦不是数字&#xff0c;就让新值等于旧值&#xff0c;后来发现不行。h5的type”number”属性在手机上无效。有什么比较好的方法吗<input v-model"num">type”tel”的作用是直接弹出数字键盘吧&#xff0c;这样好像也…

where is null mysql_SQL中WHERE变量IS NULL条件导致全表扫描问题的解决方法

SET SQL SELECT * FROM Comment with(nolock) WHERE 11And (ProjectIds Is Null or ProjectId ProjectIds)And (Scores is null or Score Scores)印象中记得&#xff0c;以前在做Oracle开发时&#xff0c;这种写法是会导致全表扫描的&#xff0c;用不上索引&#xff0c;不知道…

lambda的java_一分钟搞明白java8中的lambda

项目结构是这样的User是一个普通的pojo类UserCompare是一个实现了Comprator的类现在我们有一个需求&#xff1a;给一个user组成的list 按照user的年龄排序。实现不难&#xff0c;代码如下&#xff1a;这种方法由于sort方法的第二个参数是Comparator 所以你要写一个实现类(我这里…

hash的算法 java_Java常用HASH算法总结【经典实例】

本文实例讲述了Java常用HASH算法。分享给大家供大家参考&#xff0c;具体如下&#xff1a;/*** Hash算法大全* 推荐使用FNV1算法* algorithm None* author Goodzzp 2006-11-20* lastEdit Goodzzp 2006-11-20* editDetail Create*/public class HashAlgorithms{/**//*** 加法has…

读芯术python教程答案_攻略Python的免费书单:走进编程,从这五本书开始

全文共1245字&#xff0c;预计学习时长5分钟图源&#xff1a;unsplashPython一向是数据科学家最青睐的编程语言&#xff0c;它的语法相对简单、易于学习。除了机器学习数据库之外&#xff0c;还有非常活跃的开发人员社区&#xff0c;维护着各种库&#xff0c;用于数据分析、操作…

java的math类_Java之Math类使用小结

public classMain {public static voidmain(String[] args) {//TODO Auto-generated method stubSystem.out.println(Math.E);//比任何其他值都更接近 e(即自然对数的底数)的 double 值。System.out.println(Math.PI);//比任何其他值都更接近 pi(即圆的周长与直径之比)的 doubl…

java的复制构造函数_什么是Java中的复制构造函数?

通常&#xff0c;复制构造函数是通过使用先前已创建的相同类的对象初始化对象来创建对象的构造函数。Java支持复制构造函数&#xff0c;但与C语言不同&#xff0c;Java没有提供您需要自己定义的显式复制构造函数。写一个拷贝构造函数通常&#xff0c;为了初始化类的实例变量的值…

java对jsonarray去重复_java 去除jsonarray里面jsonarray的重复和合并数据

原来数据如下&#xff1a;[{"index_id":"19557485","itemid":"70575","time":"1467619020","value":"1"},{"index_id":"19557442","itemid":"113795&quo…

JAVA minaio模型_分布式系统之Java IO模型

1.正确理解IO定义IO涉及两个系统对象&#xff0c;一个是用户进程&#xff0c;一个是系统内核阻塞IO和非阻塞IO 针对是对用户进程来讲的调用函数。同步IO和异步IO针对的是系统内核。select,poll,epoll是Linux系统使用最多的IO多路复用机制&#xff0c;采用的都是同步IO。IO读取过…

算法导论 java版_《算法导论》第二章demo代码实现(Java版)

《算法导论》第二章demo代码实现(Java版)前言表示晚上心里有些不宁静&#xff0c;所以就写一篇博客&#xff0c;来缓缓。囧拜读《算法导论》这样的神作&#xff0c;当然要做一些练习啦。除了练习题与思考题那样的理论思考&#xff0c;也离不开编码的实践。所以&#xff0c;后面…

java js websocket_js+java websocket记录

首先websocket后台需要在web服务器运行&#xff0c;所以先搭建一个web项目。websocket需要依赖其他的jar包&#xff0c;引入依赖javaxjavaee-api7.0provided新建一个类&#xff0c;该类建立一个服务端点 ServerEndpointimportjavax.websocket.*;importjavax.websocket.server.P…

java 写一个计算器_java编写一个计算器类

展开全部import java.awt.BorderLayout;import java.awt.Color;import java.awt.GridLayout;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import javax.swing.ImageIcon;import javax.swing.JButton;import javax.swing.JFrame;import javax.swin…

java 移位运算效率_java 简单认识移位运算符和位运算符

移位运算符和位运算符本质上都是操作二进制位&#xff0c;因为计算机存储的是二进制数据&#xff0c;运算效率相对较高。移位运算符:把整数的二进制位进行左移或右移 .左移一位,相当于这个数乘以2, 右移一位,相当于这个数除以2/*移位运算符把整数的二进制位进行左移或右移按位左…

java文本框背景_用Java编写小程序(包含组合框下拉和文本框)变换背景颜色

展开全部代码如下&#xff1a;import java.awt.Color;import java.awt.Dimension;import java.awt.FlowLayout;import java.util.HashMap;import java.util.Map;import javax.swing.JComboBox;import javax.swing.JFrame;import javax.swing.JTextField;public class App exten…

mysql call procedure into_mysql存储过程之创建(CREATE PROCEDURE)和调用(CALL)及变量...

本文实例讲述了mysql存储过程之创建(CREATE PROCEDURE)和调用(CALL)及变量创建(DECLARE)和赋值(SET)操作方法。分享给大家供大家参考&#xff0c;具体如下&#xff1a;存储过程创建(CREATE PROCEDURE)和调用(CALL)这个咱就不说什么定义啦术语啦啥的&#xff0c;直接看着实例来慢…

关于java_关于Java基础

一、方法的重载与重写方法重载(overload)是让类以统一的方式处理不同类型数据的一种手段。调用方法时通过传递给它们的不同个数和类型的参数来决定具体使用哪个方法&#xff0c;这就是多态性。所谓方法重载是指在一个类中&#xff0c;多个方法的方法名相同&#xff0c;但是参数…

java map 转string_java-将Map String,Object转换为Map String,String

java-将Map 转换为Map 如何将Map转换为Map&#xff1f;这不起作用&#xff1a;Map map new HashMap(); //Object is containing StringMap newMap new HashMap(map);11个解决方案37 votes现在我们有了Java 8 / streams&#xff0c;我们可以在列表中添加一个可能的答案&#xf…

java gui 线程_如何在java中将消息从工作线程传递给GUI

您必须使用SwingUtilities.invokeLater&#xff0c;因为只能从事件派发线程访问Swing组件。这个方法的javadoc有一个关于线程的Swing教程的链接。点击此链接。这是一个例子&#xff1a;public class SwingWithThread {private JLabel label;// ...public void startBackgroundT…