昆仑弟子_面霸
07-08·后端开发·10年+
面试吊打面试官
面试官:给你10亿数据,怎么做数据迁移?先说思路我:我会先看迁移目标和约束,比如源库是什么、目标库是什么、能不能停机、数据一致性要求多高。整体上会拆成存量迁移、增量同步、数据校验、灰度切流和回滚这几步面试官:存量迁移你怎么做?我:一般按主键范围、时间分区或者业务分片来拆批。比如有递增id,就按id区间迁,每批几万到几十万条面试官:批量越大不是越快吗?为什么不一次多迁点?我:批量太大会占用连接、内存、网络和目标库写入资源,反而影响线上。这个要压测后定,线上还要限流。比如控制并发数、控制batch size,优先读从库,低峰期跑面试官:迁移期间业务还在写,新增和修改的数据怎么办?我:这里要做增量同步。常见方式是订阅binlog或CDC,把迁移期间的增、删、改同步到新库。存量迁移跑完后,再等增量延迟追平,才能考虑切流面试官:如果binlog消费重复了呢?我:目标端做幂等。比如insert和update都按主键做upsert,delete重复执行也能接受。同时记录消费位点,失败后从上次位点继续,不要靠人工猜进度面试官:如果乱序呢?比如先更新后删除,顺序错了数据就不对了我:这要保证同一个主键的事件有序。可以按主键hash到固定分区消费面试官:迁完以后你怎么确认数据没问题?我:先做总量校验,再做分片校验。比如每个id区间对count、sum、最大更新时间、关键字段hash。发现某个分片不一致,再继续缩小范围做明细对比面试官:如果发现不一致,怎么办?我:补偿呗。比如按分片重跑,或者按主键列表重新同步。还要看是存量漏了,还是增量同步延迟或失败面试官:切流你怎么切?我:先灰度读新库,对比新老结果。确认稳定后,再切写面试官:切过去出问题怎么回滚?我:如果只是读流量,可以快速切回老库。如果写已经进新库,就要提前准备反向同步或限制回滚窗口
发布于 广东
2
2
4
未登录
友善发言
评论
加载中
下载脉脉APP,成就职业梦想
违法不良信息&未成年人有害信息举报电话/客服电话:400 065 0808
违法不良信息&未成年人有害信息举报邮箱/客服邮箱:maimai@taou.com
清朗系列专项行动相关违规信息举报电话:400 065 0808,举报邮箱:maimai@taou.com
个人/企业等被诽谤侮辱、人身权或知识产权等被侵犯、网络谣言的举报地址:maimai.cn/tousu | 涉企虚假不实信息举报投诉专区
京ICP备12005786号-1copyright©maimai.cn