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

数据迁移流程的优化

完整的的的这是学习笔记的第 2029 篇文章


  昨天做了一个数据迁移流程的优化,直到发生了一些严重的问题,才明显重视起来这个问题。 

整个流程图大体如下,应用层面的支撑能力很强,可以支持数据的双写,所以我们把重点放在数据迁移(物理迁移,逻辑迁移)层面,而是更多在流程控制方面。

640?wx_fmt=png

整个流程简单来说分为2个大的步骤,数据一次全量,后续始终是增量,全量考虑异构数据库的特点,也是采用了datax来做流转,假设全量同步的时间为T1,则在T2时间应用开始开通数据通道,使得数据能够同时写入SQL Server和MySQL,然后考虑到T1~T2之间的数据会丢失,则需要再做一次T1开始的增量数据同步。

640?wx_fmt=png

看起来流程是完整的,但是细想,在T3开始做数据增量同步的时候,T2时间已经开始应用层面的数据双写,这会导致有些数据写入被影响,因为T3开始的增量同步涉及的数据变更范围比较大。在同步的过程中同时又有大量的数据写入和在线稽核,很可能出现数据的问题,而直接的影响则是同步的过程没有做分片控制,导致一半的节点的主从复制都失败了。

  这个问题算是给我们敲响了警钟,我们树立了一个基本原则,不允许线上的数据操作引入数据同步(datax)。明确了这一点,我们把整个流程改进为如下的方式:

640?wx_fmt=png

T3这个时间点我们再次做数据增量同步,然后在T4这个时间点开始做数据的离线稽核,数据是写入Staging的离线库中的,稽核的逻辑相对简单:线上库中已存在,则跳过,如果不存在则写入。这个稽核过程不要求实时性,即只要完成即可。而重要的部分则是后续的在线稽核,即程序会对写入的数据和源SQL Server做比对,如果两边数据不一致,则以SQL Server的为准,这样数据经过一段时间的修复之后会逐步追平,而在业务逻辑层面在逐步稳定之后,会切断SQL Server的数据通道,数据只写入MySQL,则完成了整个数据的阶段性迁移。 

这个过程也确实牵涉了不少外部的细节,有些数据同步逻辑,事务模型的简化等,有些过程就没有详细展开。

总体来说,我们对于线上环境要存在敬畏之心。

640?

相关文章:

  • MySQL复制问题的分析
  • 秦皇岛旅游归来
  • 《MySQL DBA工作笔记》前言
  • MySQL复制的奇怪问题跟进
  • MySQL高可用方案升级规划
  • 选择和努力
  • 无论是否“去O”,这些数据库选型与运维技巧你都该知道
  • MySQL周期表管理的设计
  • 推荐一些近期看过的电影和电视剧
  • 一个数据需求的讨论和分析
  • MySQL机房多活的初步设想
  • 《大江大河》观后感1
  • 基于中间件的负载均衡方案
  • 我的女儿二三事(十三)
  • 最近的一些计划
  • [译] 理解数组在 PHP 内部的实现(给PHP开发者的PHP源码-第四部分)
  • 2017年终总结、随想
  • Angular 响应式表单之下拉框
  • ES6--对象的扩展
  • Java比较器对数组,集合排序
  • Laravel 实践之路: 数据库迁移与数据填充
  • PHP 7 修改了什么呢 -- 2
  • Service Worker
  • spring-boot List转Page
  • Spring-boot 启动时碰到的错误
  • 极限编程 (Extreme Programming) - 发布计划 (Release Planning)
  • 爬虫进阶 -- 神级程序员:让你的爬虫就像人类的用户行为!
  • 使用Tinker来调试Laravel应用程序的数据以及使用Tinker一些总结
  • ​secrets --- 生成管理密码的安全随机数​
  • ​插件化DPI在商用WIFI中的价值
  • #QT(智能家居界面-界面切换)
  • #我与Java虚拟机的故事#连载04:一本让自己没面子的书
  • (+3)1.3敏捷宣言与敏捷过程的特点
  • (4)logging(日志模块)
  • (Matalb时序预测)WOA-BP鲸鱼算法优化BP神经网络的多维时序回归预测
  • (附源码)springboot美食分享系统 毕业设计 612231
  • (黑客游戏)HackTheGame1.21 过关攻略
  • (九)One-Wire总线-DS18B20
  • (九十四)函数和二维数组
  • (三)mysql_MYSQL(三)
  • (十七)Flask之大型项目目录结构示例【二扣蓝图】
  • (一)SpringBoot3---尚硅谷总结
  • (一)使用IDEA创建Maven项目和Maven使用入门(配图详解)
  • (转)Sql Server 保留几位小数的两种做法
  • .NET/C# 将一个命令行参数字符串转换为命令行参数数组 args
  • .Net6支持的操作系统版本(.net8已来,你还在用.netframework4.5吗)
  • .net打印*三角形
  • .net开发时的诡异问题,button的onclick事件无效
  • .NET开源快速、强大、免费的电子表格组件
  • .NET性能优化(文摘)
  • /bin/bash^M: bad interpreter: No such file or directory
  • ;号自动换行
  • @transaction 提交事务_【读源码】剖析TCCTransaction事务提交实现细节
  • [Android]使用Git将项目提交到GitHub
  • [AutoSar NVM] 存储架构