posts

一个人的数据搬家:导入、去重、迁移与退出(10 篇)

用户想换到你的产品,第一道门槛不是功能,而是数据怎么搬过来。本组从 48 次迁移咨询、23 次完成与 17 个付费用户出发:导入契约、字段映射、去重合并、可重跑、人工代导入、迁移窗口与回滚、附件限额、导出退出,最后用十项检查做季度验收。

留住用户的不只是功能,还有「随时能走」和「进来不费劲」。

这个系列解决什么问题

一个人做产品,最容易被低估的一段是数据搬家。用户想从别处搬进来,你要读懂他导出的 14 列 CSV;用户想走,你要在几分钟内给出一个完整的导出包。两件事都不是核心功能,却直接决定转化与口碑。

这个系列把「数据怎么进来、怎么不重、怎么切换、怎么出去」拆成十篇:先算迁移这条线的账,再把导入做成一份契约;然后处理字段映射、去重合并与可重跑;接着比较人工代导入与自动化,安排迁移窗口与回滚;最后处理附件、导出与十项验收。

它服务的是一个没有数据工程团队、每周只能拿出半天的人。 你能投入的不是一套 ETL 平台,而是一份列映射表、一个幂等键和一份可下载的失败清单。

核心主张:五条口径

10 篇速览

#文章核心内容阶段
01迁移是一本账:四十八次咨询、二十三次完成与四笔成本48→31→23→17 漏斗、四笔成本、103.5 h记账
02导入契约:十四列到十一个字段的验收表14 列、11 字段、五条契约、17,360 格契约
03字段映射与类型:七种状态、四种日期与十二行失败7→4 状态、4 种日期、12 行解析失败映射
04去重与合并:八十六行重复、两种判据与一次误合并86 重复、两种判据、误合并 3 行去重
05可重跑:五个批次、三次重跑与零新增5 批 × 248、幂等键、重跑 3 次 0 新增幂等
06人工代导入:四小时半、六步与自动化的门槛6 步 SOP、270 分钟、40 h 回本决策
07迁移窗口与回滚:两小时只读与一次四分钟撤销三种切换、只读 2 h、撤销 4 分钟切换
08附件与限额:四十六个文件、三百一十二兆与五个跳过46 文件 312 MB、5 个跳过、62.4% 配额附件
09导出与退出:九十六秒、四件套与「走得掉」的承诺4 件套、96 秒、4.45 MB、3.5 h/年退出
10迁移验收:十项检查、四维评分与一次季度复盘10 项检查、四维加权、3.48→4.10验收

三条阅读路径

路径 A:刚有人问「能不能把数据搬过来」。 先读 01 把漏斗与工时算出来,再读 02 写一份导入契约,最后用 06 的六步 SOP 手工跑通第一单。这条路径的重点是「先接住第一单,再谈自动化」。

路径 B:迁移请求变多,手工快撑不住。 先读 05 补上幂等键与断点续跑,再读 03 与 04 处理映射和去重,最后用 06 的阈值判断该不该投入 40 小时做导入器。这条路径的重点是「让第十次和第一次一样省力」。

路径 C:要接企业客户或准备退出通道。 先读 07 把只读窗口、回滚与沟通模板定下来,再读 08 与 09 把附件与导出补齐,最后用 10 做一次四维评分。这条路径的重点是「切换可控、数据可带走」。

与其它专题的边界

站内已有架构、隐私、资产、多租户与自助支持内容,但都不处理「数据在产品和用户之间来回搬」这条线。下表说明本组不重复什么。

既有内容它讲什么本组边界
一个人的架构:技术选型、模块边界与演进34 张表、schema 迁移三步、依赖升级它迁移的是自己的表结构;本组迁移的是用户带来的外部数据
一个人的隐私工程:数据地图与删除权数据主体请求、法定导出、删除与保留期它做合规义务;本组做产品体验与迁移工程,导出包与它共用同一份清单
独立开发者的资产韧性:备份与恢复3-2-1 备份、恢复演练与账号找回它保证灾难后找得回;本组保证用户主动搬得进、走得掉
一个人的多租户:组织、角色与数据隔离三层模型、一次组织结构迁移、越权防线它搬的是成员与组织关系;本组搬的是任务、评论与附件
一个人把用户留住:空状态与激活激活时刻、示例数据、留存曲线它让新用户 60 秒看到成品;本组让真实数据安全落地
一个人的前 100 天:主路径 MVP 的范围上线清单与「导入可以后置」的判断它决定先做什么;本组把那条后置项做成可交付的流程
一个人的自助支持:帮助中心与教程任务型帮助中心、排查树与截图它解释怎么用;本组解释搬不动时看哪一行错误
一个人的平台寄生:平台风险与迁移渠道依赖、平台迁移与退出结构它迁的是你的分发渠道;本组迁的是客户的数据
一个人的服务生意:交付里程碑与验收里程碑、周报与验收它交付项目;本组交付一次数据搬迁
一个人的产品度量:埋点实现事件字典、埋点三处校验它记行为;本组记导入批次与失败行
一个人把 API 做成产品:契约与错误模型OpenAPI、统一错误与分页它设计对外接口;本组设计文件导入契约
一个人的质量守门:验证预算、回归清单与发布门禁(10 篇)47 缺陷与三条红线、12 条关键路径、三层配比、38→26 回归、六项门禁、四级缺陷、测试数据、不可逆保护、测试债、十项验收那组讲导入路径的验证与门禁;本组讲导入契约、去重、迁移与导出
一个人的安全基线:十四个入口、十七个密钥与一次 72 小时响应14 个攻击面、认证与枚举、会话撤销、17 个密钥三档、四条边界、41 个依赖与 186 条告警、四类限流、9 类审计日志、72 小时三段响应、20 项验收那组讲上传与导入的边界规则;本组讲导入契约、去重、迁移与导出
一个人的性能与账单:4.2 秒的首屏、一千二百次查询与每月 210 美元4 项预算与 20 格、RUM 与慢查询、412→168 KB、1,200→3 次查询、0→86% 缓存、34 秒导出、7→4 个第三方、210→118 美元、3 次回归告警、10 项验收那组讲导出任务与附件传输;本组讲导入契约、去重、迁移与导出
一个人的企业客户:九家询价、一百四十八道问卷与 134 天的第一单9 家询价与 130 h、96 天采购、148 题问卷、7 个子处理者、SLA 43.2/216 分钟、26 h SSO、4 周试点、38 天到账、8 h 实施、10 项验收那组讲企业上线与数据交接;本组讲导入契约、去重、迁移与导出
一个人的开源产品:4,200 个 star、一百八十个付费与一年 612 小时的维护4,200 star 与 1,949 美元、612 h 维护、214 依赖、48,600 行 78/22、1,180 个 issue、214 条告警、23 个赞助者、9 家双许可、17 位贡献者、10 项验收那组讲开源项目的维护账;本组讲导入契约、去重、迁移与导出

这十篇不承诺「任何格式都能一键导入」,也不提供通用 ETL 方案。可复算的部分全部用四则运算给出算式;不可复算的部分(厂商导出格式、平台限制)明确指向官方文档。所有数字都是教学假设,代入前请换成自己的行数、列数与请求量。

本组统一口径

全组共用一组教学假设,各篇引用时不换分母:

产品:一人 SaaS 任务板,与既有组同一产品;账号 344,付费 120
迁移漏斗:咨询 48 → 取样 31(64.6%)→ 完成 23(74.2%)→ 付费 17(73.9%)
来源:CSV 12 + 竞品 A 6 + 竞品 B 3 + 手工整理 2 = 23
人工单次 270 分钟 = 沟通 30 + 清洗 90 + 执行 120 + 复核 30 = 4.5 h
年人工 23 × 4.5 = 103.5 h;按 60 美元/时 = 6,210 美元
自动化单次 72 分钟 = 准备 20 + 执行 20 + 校验 20 + 沟通 12 = 1.2 h
年自动化 23 × 1.2 = 27.6 h;省 75.9 h = 73.3%
导入器 40 h 一次性 + 24 h/年维护 → 首年 64 h,净省 39.5 h = 2,370 美元
源 14 列 = 直接 9 + 合并 2 + 丢弃 3;目标 11 字段 = 直接 9 + 合并 1 + 生成 1
矩阵 1,240 行 × 14 列 = 17,360 格;空值 2,914 = 16.8%
状态 7 → 4;改写 72 + 88 + 54 = 214 行 = 17.3%
日期 4 种:ISO 901 + DD/MM 214 + Excel 113 + Unix 12 = 1,240;失败 12 = 0.97%
负责人匹配 51 ÷ 58 = 87.9%
去重 52 + 34 = 86 = 6.9%;合并后 1,154;误合并 3 ÷ 34 = 8.8%
批次 5 × 248 = 1,240;重跑 3 次新增 0;失败 12 → 重试 9 + 人工 3
窗口只读 2 h × 23 = 46 h/年;切换 17 + 4 + 2;撤销 4 分钟
附件 46 个 312 MB:成功 41 个 287 MB、跳过 5 个 25 MB = 10.9%;配额 62.4%
导出 96 秒、4.45 MB、18 文件;请求 7 × 0.5 = 3.5 h;留下 2 人 = 360 美元/年
迁移后 90 天留存 18/23 = 78.3%;自然注册 145/321 = 45.2%
迁移用户收入 17 × 15 × 12 = 3,060 美元/年
验收四维权重 0.35/0.25/0.20/0.20;现状 3.48、修后 4.10;季度 12 × 2.5 = 30 h

344 是账号总数,120 是付费数。 迁移比例按 48/31/23/17 这条漏斗算;只有涉及全站用户时才用 344。

4.5 h 与 1.2 h 不是同一个流程的两档估计,而是两条路线。 4.5 h 是人工代导入的全流程,1.2 h 是自动化后的全流程;混用会让回本账失真。

导出包与隐私组共用一份。 4.45 MB = 主数据 58 KB + 18 个附件 4.32 MB + 90 天事件 68 KB;本组讲怎么把它做得可用,隐私组讲它作为法定义务怎么交付。

所有平台格式与限制都是教学引用。 Notion、Trello、Jira 的导入行为以官方文档为准;本组只借用它们的公开格式说明来设计契约。

使用说明

先把第一单手工跑完,再决定要不要写导入器。 没跑过五单就写自动化,通常会把错误的假设固化进代码。

契约写在用户看得到的地方。 列名、编码、必填字段、类型与大小限制,做成一张表放在上传页旁边,比写在文档深处有用。

失败清单必须可下载。 用户拿到「第 37 行日期无法解析」才能自己修;只给一句「导入失败」,等于把工作退回给你。

合并要有撤销。 去重的模糊判据一定出错,区别只在错多少;保留批次号与快照,才有第二次机会。

本组的证据与使用方法

证据类型。 本组用的是「48 次迁移咨询记录 + 23 份导入批次日志 + 86 行重复清单 + 5 批执行记录 + 3 次重跑日志 + 1 次撤销记录 + 7 次导出请求」。没有「最佳实践」式的断言。

如何使用。 先用 01 的漏斗核对自己的转化,再用 02 的十四列映射表改一版契约,用 05 的幂等键跑一次重跑,最后用 09 的四件套做一次真实导出。

如何复核。 取最近一次迁移:看批次号是否连续、重跑是否零新增、失败清单是否可下载、导出包能否在另一台机器打开。四项都能对上,这套基线才适用。

系列导航

全部文章 game Indie golang 客户端开发 Minigame Saas rust Python Java cg