首页 > 基础资料 博客日记
架构师必备:如何做业务数据的平滑迁移
2026-04-22 09:00:04基础资料围观1次
极客资料网推荐架构师必备:如何做业务数据的平滑迁移这篇文章给大家,欢迎收藏极客资料网享受知识的乐趣
大家好,我是Java烘焙师。本文结合笔者的经验和思考,对业务数据迁移做个总结。在业务系统迭代的过程中,难免会做数据迁移,可能是因为:
- 业务模型变更:实体关系变了
- 或者存储结构变更:字段从DB迁移到HBase等NoSQL存储、或做文本压缩、或修改数据聚合粒度等
业务数据迁移,需要改持久化层基础代码,还涉及到存量数据迁移,因此风险较高,容易出现新旧数据不一致。为了实现平滑迁移(不影响、不中断业务),各步骤都要做好灰度切换、数据/监控对比。注:本文讨论的是业务数据迁移,如果是分库分表迁移,可以借助类似Canel的中间件。
下面总结了一套标准流程SOP,步骤如下。
1. 增量双写
- DB迁移场景:写旧表+写新表,放在同一个事务内,即可保证一致性
- 跨DB、或从DB迁移到其它NoSQL存储场景:先写旧表,再写新表,在写失败时做好兜底重试

2. 刷存量数据
在增量双写灰度开全后,能确保新写入的数据在新表、旧表一致,但还需要补刷历史存量数据。
离线导出全量数据的业务id,查旧表、并写新表,确保所有存量数据的新表字段都写入值。

3. 数据全量比对,确保新旧一致
有两种比对方式:
- 复用上述刷数据任务,通过开关控制,仅做比对、不刷数据
- 离线对账,参考之前写的文章:[架构师必备:实时对账与离线对账](https://www.cnblogs.com/toplist/p/19009976 =360x)
sql示例:
-- (1)比较两个表的条数是否一致
select count(1) from table_a; -- 查出左表的条数
select count(1) from table_b; -- 查出右表的条数
-- (2)比较数据内容是否一致
-- (2.1)只存在于左表的数据:左连接查询,左表记录都会保留,右表字段为空则说明右表缺少数据:
select * from
table_a left outer join table_b
on table_a.biz_field=table_b.biz_field
where table_b.biz_field is null;
-- (2.2)只存在于右表的数据:右连接查询,右表记录都会保留,左表字段为空则说明左表缺少数据:
select * from
table_a right outer join table_b
on table_a.biz_field=table_b.biz_field
where table_a.biz_field is null;
-- (2.3)两个表存在差异的数据,内连接查询,比对各个字段是否一致:
select * from
table_a inner join table_b
on table_a.biz_field=table_b.biz_field
where
(table_a.field_1 <> table_b.field_1
or table_a.field_2 <> table_b.field_2
or table_a.field_3 <> table_b.field_3);
4. 增量双读比对
上述全量比对,只代表存量数据的一致性,还要确保增量数据也是一致的。
在所有查询场景中,同时读旧表、新表,并做比对。为了避免遗漏,可做到公共查询逻辑里。

5. 切新读
- 双读比对观察一致后,查询场景灰度切换到读新表
- 同时确保所有的离线依赖,都迁到新表数据源

6. 停旧写
- 在停写旧表之前,检查旧表已无在线业务方查询、无离线依赖
- 最终停写旧表

通过以上步骤,可以确保业务数据平滑迁移,做到风险可控。
文章来源:https://www.cnblogs.com/toplist/p/19828393
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:jacktools123@163.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:jacktools123@163.com进行投诉反馈,一经查实,立即删除!
标签:
相关文章
最新发布
- 分布式架构下配额设计:JuiceFS 的实现与典型案例
- 一份CLAUDE.md,为何能让GitHub榜首项目狂揽6万星?
- 设计圈真的要变天了:ChatGPT Image 2 不只是会生图了
- 我为何选择私有化客服系统作为独立开发的方向
- SpringAI入门指南
- 多租户系统框架的界面分析设计
- RAG 是什么?16 种 RAG 方案一次讲清!AI 应用开发必学 | 万字干货
- 使用 Java 提取 HTML 文件中的纯文本内容
- Python批量图片拼接脚本:支持行列布局、最后一行居中、自然排序
- HackTheBox Cap 靶机:从 IDOR 到 PCAP 凭据提取再到 Capabilities 提权

