数据迁移类测试策略

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 RDS MySQL,高可用系列 2核4GB
简介:

前言

  前段时间做了一次数据迁移,针对数据迁移类型的测试方法进行了一些了解和总结,以下工具愚公移山和精卫为淘宝开发的工具,已使用于多个产品、项目中,质量有保障。

  一、工具介绍

  1、愚公移山

  概述:

  数据的动态迁移,可完成数据全量、增量迁移,进行数据比对,保证数据的正确;目前较多运用在数据迁移中,已经被很多团队使用,是很成熟可靠的数据迁移工具

  适用范围:

  可支持:支持oracle和mysql,分库分表,实时同步,数据比对

  不支持:涉及到外部依赖,迁移规则非常复杂的数据

  性能情况:

  没有对愚公进行压测,性能情况参考以下的例子

  例子:迁移一个1000万的表。 16个线程,开启批量写入,半个小时以内完成。

  影响点:机器的负载,并行的任务数,配置的线程数

  愚公百科:(不知道可以可以贴!有需要可联系作者)

  2、精卫工具

  概述:

  精卫是一个基于MySQL数据库的数据复制组件,较多运用在数据双写的场景中,是比较成熟的一个数据复制组件

  解析数据库的binlog文件,A库的所有的数据变更传到B库。binlog:描述数据变更的文件

  适用范围:

  同库不同表数据复制、多库多表数据冗余、标准化去O支持、数据变化通知

  性能情况:

  性能压测,性能结果满足交易主库同步备库需求

  例子:主库1000tps,延迟在50sms以内

  【精卫+metaq性能测试结论.msg】

  精卫百科:(不知道可以可以贴!)

 二、迁移类测试策略

  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库新库

  注意点:

  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

2、功能验证:主要是抽样数据的功能测试

  a、功能测试:对历史数据常见的操作方式为,在历史库准备一批历史数据,准备什么样的历史数据依赖于具体业务的数据情况,通过迁移程序将历史数据迁移至新库后,验证这批数据的存储和功能展现。新数据的验证则以新增功能的方式进行测试。

  b、自动化测试:API自动化+页面自动化:只有数据迁移没有上层业务变更的情况下,如果已经存在自动化脚本,采用自动化脚本可以快速回归,重点在DAO层的方法。

  以下情况需要特别设计用例进行功能验证

  1、 老表字段进行类型或长度等转换迁移至新表

  2、 老表中可能为空的字段,新表中直接为空或默认一个初始值

  3、 老表数据通过特殊处理转换为新表中的值

  4、 需要进行数据订正的字段

  数据双写

  数据双写往往伴随着数据迁移进行,精卫工具能很好的支持数据复制,并进行数据比对。

  在精卫工具的试用范围外的数据双写,一般是应用中加入双写代码,这里也需要涉及数据比对程序,类似于数据迁移的比对程序;

  可采用的验证方式:

  1、根据数据双写的实时性的特性, 在不影响应用功能、性能的情况下,可以考虑在双写代码中加入验证程序,即每完成一次双写,即对插入的新老数据进行数据比对。

  2、枚举所有涉及双写的场景,逐个场景进行功能验证

  3、以全量的方式进行数据比对,数据双写进行到一定程度,能确保所有需要双写的场景都已经进行过,那么,对双写的两张表的数据截取gmt_modify时间为某一时间段以前的所有数据进行比对,约等于迁移的全量数据验证。

  其他关注点:

  1、 考虑id预留空间:+**,需要足够大,保证没有主键冲突

  2、 关注sql性能:分库分表,尤其是跨库查询时需要关注性能情况,数据量比较大的情况下,可以考虑走搜索   



最新内容请见作者的GitHub页:http://qaseven.github.io/

   

相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
1月前
|
人工智能 搜索推荐 数据管理
探索软件测试中的自动化测试框架选择与优化策略
本文深入探讨了在现代软件开发流程中,如何根据项目特性、团队技能和长期维护需求,精准选择合适的自动化测试框架。
113 8
|
2月前
|
测试技术 持续交付 UED
软件测试的艺术:确保质量的实战策略
在软件开发的舞台上,测试是那把确保每个功能如交响乐般和谐奏响的指挥棒。本文将深入探讨软件测试的重要性、基本类型以及如何设计高效的测试策略。我们将通过一个实际的代码示例,展示如何运用这些策略来提升软件质量和用户体验。
|
1月前
|
Java 测试技术 数据安全/隐私保护
软件测试中的自动化策略与工具应用
在软件开发的快速迭代中,自动化测试以其高效、稳定的特点成为了质量保证的重要手段。本文将深入探讨自动化测试的核心概念、常见工具的应用,以及如何设计有效的自动化测试策略,旨在为读者提供一套完整的自动化测试解决方案,帮助团队提升测试效率和软件质量。
|
1月前
|
测试技术 持续交付
探索软件测试中的自动化测试策略
随着软件开发周期的加速和市场需求的不断增长,传统的手动软件测试方法已难以满足现代软件开发的高效性和准确性要求。本文旨在探讨自动化测试在软件测试中的重要性、实施策略及其对提高软件质量的影响。通过分析自动化测试的优势与挑战,以及提供实用的自动化测试工具和框架选择指南,旨在帮助读者理解并应用自动化测试以提升软件开发效率和产品质量。
|
1月前
|
机器学习/深度学习 人工智能 监控
软件测试中的自动化测试策略与最佳实践##
在当今快速发展的软件行业中,自动化测试已成为确保软件质量和加速产品上市的关键工具。本文将探讨自动化测试的重要性,分析不同类型的自动化测试工具和框架,并深入讨论实施自动化测试的最佳实践。通过案例研究和数据分析,我们将揭示如何有效整合自动化测试到软件开发生命周期中,以及它如何帮助团队提高测试效率和覆盖率。 ##
66 1
|
2月前
|
敏捷开发 人工智能 Devops
探索自动化测试的高效策略与实践###
当今软件开发生命周期中,自动化测试已成为提升效率、保障质量的关键工具。本文深入剖析了自动化测试的核心价值,探讨了一系列高效策略,包括选择合适的自动化框架、设计可维护的测试脚本、集成持续集成/持续部署(CI/CD)流程,以及有效管理和维护测试用例库。通过具体案例分析,揭示了这些策略在实际应用中的成效,为软件测试人员提供了宝贵的经验分享和实践指导。 ###
|
2月前
|
人工智能 前端开发 测试技术
探索软件测试中的自动化框架选择与优化策略####
本文深入剖析了当前主流的自动化测试框架,通过对比分析各自的优势、局限性及适用场景,为读者提供了一套系统性的选择与优化指南。文章首先概述了自动化测试的重要性及其在软件开发生命周期中的位置,接着逐一探讨了Selenium、Appium、Cypress等热门框架的特点,并通过实际案例展示了如何根据项目需求灵活选用与配置框架,以提升测试效率和质量。最后,文章还分享了若干最佳实践和未来趋势预测,旨在帮助测试工程师更好地应对复杂多变的测试环境。 ####
63 4
|
2月前
|
机器学习/深度学习 前端开发 测试技术
探索软件测试中的自动化测试框架选择与优化策略####
本文深入探讨了在当前软件开发生命周期中,自动化测试框架的选择对于提升测试效率、保障产品质量的重要性。通过分析市场上主流的自动化测试工具,如Selenium、Appium、Jest等,结合具体项目需求,提出了一套系统化的选型与优化策略。文章首先概述了自动化测试的基本原理及其在现代软件开发中的角色变迁,随后详细对比了各主流框架的功能特点、适用场景及优缺点,最后基于实际案例,阐述了如何根据项目特性量身定制自动化测试解决方案,并给出了持续集成/持续部署(CI/CD)环境下的最佳实践建议。 --- ####
|
2月前
|
人工智能 监控 测试技术
探索软件测试中的自动化框架选择与优化策略####
【10月更文挑战第21天】 本文深入剖析了软件测试领域面临的挑战,聚焦于自动化测试框架的选择与优化这一核心议题。不同于传统摘要的概述方式,本文将以一个虚拟案例“X项目”为线索,通过该项目从手动测试困境到自动化转型的成功历程,生动展现如何根据项目特性精准匹配自动化工具(如Selenium、Appium等),并结合CI/CD流程进行深度集成与持续优化,最终实现测试效率与质量的双重飞跃。读者将跟随“X项目”团队的视角,直观感受自动化框架选型的策略性思考及实践中的优化技巧,获得可借鉴的实战经验。 ####
45 0
|
14天前
|
机器学习/深度学习 人工智能 自然语言处理
MarS:微软开源金融市场模拟预测引擎,支持策略测试、风险管理和市场分析
MarS 是微软亚洲研究院推出的金融市场模拟预测引擎,基于生成型基础模型 LMM,支持无风险环境下的交易策略测试、风险管理和市场分析。
45 8
MarS:微软开源金融市场模拟预测引擎,支持策略测试、风险管理和市场分析

热门文章

最新文章