[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"blog-post-legacy-data-migration-zh-CN":3,"blog-related-legacy-data-migration-zh-CN":29,"blog-adjacent-legacy-data-migration-zh-CN":65},{"id":4,"slug":5,"title":6,"excerpt":7,"content":8,"cover":9,"tone":10,"author":11,"publishedAt":12,"updatedAt":12,"readingMinutes":13,"featured":14,"tags":15,"category":19,"seoSettings":28},39,"legacy-data-migration","数据迁移：先把旧系统的账算清","迁移失败的原因通常不是技术，而是没人说得清旧数据里到底有什么。","\u003Cp>老系统替换项目里，数据迁移往往排在最后，工期却最容易被低估。我们做过几个迁移，共同的经验是：真正花时间的不是写脚本，而是搞清旧数据的历史遗留。\u003C\u002Fp>\n\u003Ch2>迁移前的三张表\u003C\u002Fh2>\n\u003Cp>字段对照表：旧字段到新字段的映射，包括类型转换规则和空值处理。\u003C\u002Fp>\n\u003Cp>数据质量表：统计缺失、重复、格式异常的比例，先估出清洗工作量。\u003C\u002Fp>\n\u003Cp>业务确认表：哪些数据必须保留，哪些可以归档，由业务方签字。\u003C\u002Fp>\n\u003Ch2>执行策略\u003C\u002Fh2>\n\u003Cp>先做全量脚本，再在测试库跑三遍。第一遍找报错，第二遍核对数量，第三遍核对金额等关键字段。\u003C\u002Fp>\n\u003Cp>正式切换前安排一次演练，包含回滚；上线当天只做增量同步，减少停机时间。\u003C\u002Fp>\n\u003Cp>迁移完成后保留旧库只读访问三个月，给业务方查历史留后路。\u003C\u002Fp>\n\u003Cp>迁移的本质是让旧数据在新系统里继续可信。只要有一条账对不上，用户就会对整个系统失去信心。\u003C\u002Fp>","","slate","佳益方圆团队","2026-07-01T10:57:00+08:00",1,false,[16,17,18],"数据迁移","老系统","项目实践",{"id":13,"parentId":20,"slug":21,"name":22,"description":23,"icon":24,"cover":9,"tone":25,"kind":26,"sortOrder":27,"count":20},0,"engineering","技术专栏","架构设计、性能优化、AI 集成与跨端方案等一线技术实践，由研发团队持续分享。","cpu","blue","article",60,{},[30,42,54],{"id":31,"slug":32,"title":33,"excerpt":34,"content":9,"cover":9,"tone":35,"author":11,"publishedAt":36,"updatedAt":36,"readingMinutes":13,"featured":14,"tags":37,"category":41},30,"integration-api-pitfalls","企业系统集成：接口对接最容易踩的五个坑","接口文档写得再全，真正对接时仍然会卡在字段约定、超时和重复推送这些细节上。","cyan","2026-10-17T09:00:00+08:00",[38,39,40],"系统集成","接口","工程实践",{"id":13,"parentId":20,"slug":21,"name":22,"description":23,"icon":24,"cover":9,"tone":25,"kind":26,"sortOrder":27,"count":20},{"id":13,"slug":43,"title":44,"excerpt":45,"content":9,"cover":9,"tone":35,"author":11,"publishedAt":46,"updatedAt":47,"readingMinutes":48,"featured":49,"tags":50,"category":53},"why-enterprise-systems-age","为什么企业系统会在三年后开始“老化”","系统上线时功能齐全，三年后却处处别扭。问题往往不在代码，而在交付时被忽略的那些变化。","2026-10-16T09:30:00+08:00","2026-10-18T15:58:14.648+08:00",2,true,[51,52],"系统演进","架构设计",{"id":13,"parentId":20,"slug":21,"name":22,"description":23,"icon":24,"cover":9,"tone":25,"kind":26,"sortOrder":27,"count":20},{"id":55,"slug":56,"title":57,"excerpt":58,"content":9,"cover":9,"tone":25,"author":11,"publishedAt":59,"updatedAt":59,"readingMinutes":13,"featured":14,"tags":60,"category":64},31,"idempotent-design-basics","幂等设计：重复提交不只是用户手抖","网络重试、消息重投、用户连点，都会让同一个请求到达多次。幂等应该设计在接口里。","2026-10-05T10:13:00+08:00",[61,62,63],"接口设计","幂等","可靠性",{"id":13,"parentId":20,"slug":21,"name":22,"description":23,"icon":24,"cover":9,"tone":25,"kind":26,"sortOrder":27,"count":20},{"previous":66,"next":84},{"id":67,"slug":68,"title":69,"excerpt":70,"content":9,"cover":9,"tone":71,"author":11,"publishedAt":72,"updatedAt":72,"readingMinutes":13,"featured":14,"tags":73,"category":77},18,"product-or-project-shop","产品化还是项目制","每个做项目的团队都会问这个问题。我们的答案不是二选一，而是先想清楚哪些能力可以复用。","indigo","2026-07-03T09:44:00+08:00",[74,75,76],"创业","产品化","战略",{"id":78,"parentId":20,"slug":79,"name":80,"description":81,"icon":82,"cover":9,"tone":25,"kind":26,"sortOrder":83,"count":20},6,"founder-notes","创业手记","创始团队在经营、管理与产品上的思考，记录一家软件公司的成长过程。","pen-tool",10,{"id":85,"slug":86,"title":87,"excerpt":88,"content":9,"cover":9,"tone":10,"author":11,"publishedAt":89,"updatedAt":89,"readingMinutes":13,"featured":14,"tags":90,"category":94},59,"ai-feature-positioning","AI 功能的产品定位","把大模型当成万能助手，通常会做出没人用的功能。定位应该从具体任务开始。","2026-06-29T10:57:00+08:00",[91,92,93],"AI","产品定位","落地",{"id":48,"parentId":20,"slug":95,"name":96,"description":97,"icon":98,"cover":9,"tone":25,"kind":26,"sortOrder":99,"count":20},"product-thinking","产品思维","需求分析、用户体验与产品设计方法论，以及从业务问题到产品方案的思考过程。","lightbulb",50]