大规模数据迁移,先跑通可回退的最小批次
大规模数据迁移先跑通可回退的最小批次大规模数据迁移不必从复杂的平台开始。先做一个能分片、限速、重试、记录进度并校验结果的最小管道把边界和失败语义跑通再逐步补并发和自动化。规模越大越不能依赖进程内状态或一次性全量校验。最小管道的组成先选稳定分片键并约定边界例如使用半开区间。每个分片有任务 ID、可重放输入和明确状态。目标端写入需要可识别重复投递检查点只能在写入结果及必要校验完成后推进。不要用 sleep 代替背压固定休眠不能反映目标库是否拥堵。根据连接池等待、写入超时、延迟或错误类别调整并发并设置上限。只重试确认可恢复的错误超时后先确认目标端结果再决定是否重放。type Chunk struct { Start, End string; ID string } func nextChunk(c Chunk) error { if c.Start c.End { return errors.New(invalid range) } return nil }字符串比较仅适用于有序编码一致的键实际实现应使用对应主键类型和数据库比较规则。小范围演练比宏大承诺更重要先在可回收数据集上测试暂停、重启、重复执行、源端变更和目标端慢写。通过后再扩大范围。记录每个分片的输入范围、版本、校验摘要和失败原因出现不一致就停在该分片不继续把问题扩散到后续范围。