数据迁移的套路

stonefang stonefang     2023-03-20     789

关键词:

数据迁移的类型

随着业务的发展,存储也会经常性的需要迁移。以下场景是我们开发过程中经常遇到的

  1. 业务、团队在快速扩张,需要适当时机进行微服务的拆分,需要独立的数据库,将数据从源数据库迁移到新的数据库
  2. 单表的记录数比较大,需要进行分库分表。需要将老表的数据迁移到新的分表中。
  3. 存储选型不对,比如关系型数据库的相互迁移, PG, MySQL,Oracle的相互迁移。NoSQL的Mongo,Cassandra,Hbase的相互迁移。
  4. 机房的迁移,自建机房到云的相互迁移

这些场景都需要进行数据迁移,虽然细节的方案有不同之处,但是也会有一些共同之处。

数据迁移的方案

数据迁移简单来说就是将数据从一个地方挪到另外一个地方。
技术图片
因为我们的数据不是静态的,所以我们不能随便写个job迁移就好了。需要确保一些迁移上的标准

标准

数据一致性
迁移完数据不能丢记录,单条记录的数据不能缺字段。

不停机
数据在不断的写入,不能为了阻止写入,而不允许数据写入,需要保证业务写入的可用性。

迁移过程可中断、可回滚
这点要求很高,是确保数据万无一失的策略。在迁移数据的各个阶段发现有问题,都可以回滚到原来的库,保证业务正常运行。

迁移方案

技术图片

为了达到上述要求,一般采用双写策略。也就是写两份,既往老的写,也往新的写。

  1. 收敛读写
    读写的入口越多,后续需要进行开关切换的地方就越多,就越容易出错,所以要尽可能的先将所有的读写入口都收敛到一个地方
  2. 双写
    将增量的数据同时写入到两个存储系统。确保新的写入代码没问题。双写以写入老的为准,老的写入成功代表操作成功了,写入新的失败了需要记录失败日志,分析为何失败,进行修正和补偿
  3. 将老的存量数据迁移过来
    老的存量数据迁移就是通过遍历id,写入新的存储。具体的方案有很多。可以使用同步工具,比如binlog +flink来处理。数据量比较少的就直接遍历就行。
  4. 数据校验
    数据的一致性校验是重中之重,确保两边数据的记录数,单条记录的数据完整性。如果数据量不多,一般是全量校验。数据量很多,可以抽样校验。
  5. 切换新的读
    数据校验通过后,就可以切换到新的读,万一还有问题,可以切换到老的读。排查问题,重新来过。
  6. 停止双写
    在新的存储中安全平稳的运行了N天后,就可以停掉老的读了,整个迁移过程完成了。

注意事项

  1. 对于后端服务,存储是基石,是重中之重。稳定性要求是最高的。一定要确保数据是平滑迁移的,对业务无感知。
  2. 同时存储是有状态的,迁移难度比较大,开发者需要具备前瞻性,尽量在选型的时候慎重,选择合适的数据库,避免进行数据库迁移。发现数据库选型有潜在的问题时,需要当机立断,尽早迁移。不要以为出现问题的概率不大,就拖延了。否则一旦出现问题,就是重大故障,造成的损失难以估量。

数据迁移-如何快速迁移

摘要在上一篇中我们介绍了数据迁移的套路,但是没有介绍具体的方案,这篇着重介绍下具体的数据迁移方案一.设计目标设计一个数据迁移的方案,需要实现以下目标迁移速度qps需要达到1k,这样能保证1亿的数据能够在1~2天内... 查看详情

数据分析思路的套路攻略

...价值而且能够进一步使用的成果。废话结束,进入正题。数据分析中抱有目的性很重要,但是使用工具也很重要,不要停留在什么都需要自己动手的时代,要记住我们已经步入了人工智能的时代了。确 查看详情

数据分析思路的套路攻略

...价值而且能够进一步使用的成果。废话结束,进入正题。数据分析中抱有目的性很重要,但是使用工具也很重要,不要停留在什么都需要自己动手的时代,要记住我们已经步入了人工智能的时代了。确 查看详情

四步详解数据分析套路

...价值而且能够进一步使用的成果。废话结束,进入正题。数据分析中抱有目的性很重要,但是使用工具也很重要,不要停留在什么都需要自己动手的时代,要记住我 查看详情

四步详解数据分析套路

...价值而且能够进一步使用的成果。废话结束,进入正题。数据分析中抱有目的性很重要,但是使用工具也很重要,不要停留在什么都需要自己动手的时代,要记住我 查看详情

缓存更新的套路

...的pattern了,其具体逻辑如下:失效:应用程序先从cache取数据,没有得到,则从数据库中取数据,成功后,放到缓存中命中:应用程序从cache中取数据,取到后返回更新:先把数据存到 查看详情

其实,数据分析就一个套路!

经常看数据分析类的文章的同学都知道,我们往往能通过种种数据去揭露一个事实,而不是泛泛而谈,因为数据是不会说谎的。一直有同学反馈:每每看到各类数据分析的文章,又是用Python,又是用R,还有其他好用的工具,心... 查看详情

缓存更新的套路

看到好些人在写更新缓存数据代码时,先删除缓存,然后再更新数据库,而后续的操作会把数据再装载的缓存中。然而,这个是逻辑是错误的。试想,两个并发操作,一个是更新操作,另一个是查询操作,更新操作删除缓存后,... 查看详情

缓存更新的套路

看到好些人在写更新缓存数据代码时,先删除缓存,然后再更新数据库,而后续的操作会把数据再装载的缓存中。然而,这个是逻辑是错误的。试想,两个并发操作,一个是更新操作,另一个是查询操作,更新操作删除缓存后,... 查看详情

javajdbc编程套路

...nbsp;  学习Java开发,一个必须掌握的知识点,就是数据库操作。当程序需要用到的数据达到一定程度时,就不能简单地用本地文件来储存了,而是借助数据库。 目前,用的最多的数据库有MySql,Oracle等,Java编程中连接... 查看详情

1个数据可视化的「百搭套路」,从此打开新思路(代码片段)

引言针对不同的数据类型和数据任务,我们应该如何选择合适的数据可视化?本文整理了数据可视化的经典套路,希望对你有所启发。数据分类首先,我们对数据类型进行分析。基于任务分类学的数据类型(Da... 查看详情

搞懂分布式技术15:缓存更新的套路

...缓存更新的套路缓存更新的套路看到好些人在写更新缓存数据代码时,先删除缓存,然后再更新数据库,而后续的操作会把数据再装载的缓存中。然而,这个是逻辑是错误的。试想,两个并发操作,一个是更新操作,另一个是查... 查看详情

数据割接效率提升常用套路

1:归档与非归档在割接前将数据改为非归档模式,在割接后再改回来。同时做全备。改为非归档模式会大大减少写日志的开销。 2:主外键、索引在割接前,需要先失效主外键/索引或者直接drop掉。割接后再恢复,回复索引... 查看详情

mariadb复合语句和优化套路

...下面文章的具体套路.  C中级MariaDBConnector/CAPI编程教程数据库环境搭建好了,我们需要导入一个mysql中一个测试的sakila数据库进行实验. 通过下面步骤进 查看详情

什么是数据库迁移

所谓数据库迁移就是这个数据库到另一个数据库之间的任意形式的数据移动。数据库迁移主要分为热迁移和冷迁移:热迁移是将内存数据和硬盘数据同步进行迁移。热迁移的优势在于其对用户业务的影响是非常小的;热迁移对内... 查看详情

oracle历史数据迁移

参考技术AOracle数据库的数据迁移方法有哪些呢Windows中oracle服务启动关闭脚本oracle控制文件的管理随着数据库管理系统和操作系统平台的更新换代的速度的加快,数据库管理员经常需要在两个不同的数据库之间或在两种不同的系... 查看详情

架构套路总结

...缓存穿透:把空对象保存在内存缓存里2)缓存与数据库的数据一致性:Cac 查看详情

redis数据迁移

参考技术A前期准备在进行数据迁移之前,一定要做好迁移前的准备。检查平滑迁移-双写法方案总结针对互联网很多“数据量较大,并发量较大,业务复杂度较高”的业务场景,在的众多需求下,需要进行数据迁移,完成“平滑... 查看详情