题干与适用场景
题目考察数据工程师能否把一次删除请求变成跨系统、可重试、可审计的生命周期流程。删除不仅是主库 DELETE,还涉及派生表、缓存、搜索索引、事件流、备份和第三方处理者。回答应同时处理数据发现、身份关联、法律保留、幂等、失败恢复和完成证明。
面试官考察点
强回答会先定义删除范围与例外,再建立数据目录和 owner 映射;请求进入工作流后,按依赖关系发出删除或匿名化命令,等待每个系统回执。它会区分“已请求”“处理中”“已验证”和“因保留而冻结”,并用不可变审计日志证明每一步。不能声称物理备份能立即擦除时,应说明加密擦除、到期覆盖和访问隔离。
回答前需要澄清的问题
- 识别用户的键是什么?是否存在邮箱、设备、订单和匿名标识的关联表?
- 哪些数据必须删除,哪些因发票、欺诈调查或法律保留暂时不能删?
- 是否包含搜索索引、缓存、分析聚合、事件日志、对象存储、备份和第三方 SaaS?
- 目标是物理删除、不可逆匿名化,还是在期限内停止使用?
- 如何定义完成、超时、人工复核和对用户的回执?
30 秒回答框架
“我先用数据目录登记系统、字段、owner、保留策略和删除能力,接收请求后生成不可变 deletion case 和幂等任务。编排器按依赖发出删除、匿名化或加密擦除命令,每个消费者返回版本、范围和校验摘要;失败任务可重试并进入人工队列。对法律保留数据只冻结访问并记录例外,到期后再删除。最终用目录覆盖率、任务回执、抽样查询和审计日志证明完成,向用户返回状态而不泄露内部拓扑。”
分步骤深入解答
第一步:建立数据地图与身份图
目录记录系统、表/桶/索引、字段分类、owner、下游依赖、备份周期和处理者。身份图把稳定用户 id 映射到订单、设备、邮箱和匿名 token;没有可靠映射就不能声称删除完整。
第二步:定义删除策略
把记录分成直接删除、匿名化、聚合保留和法律冻结。财务凭证或欺诈证据可能必须保留,但应最小化字段、限制访问并记录法律依据。策略版本化,避免政策变化后无法解释旧请求。
第三步:创建幂等删除案件
请求生成 caseid、主体 id、策略版本、截止时间和请求来源。每个系统收到带 caseid 的命令,重复执行返回同一结果;状态机至少包括 requested、running、verified、blocked、failed 和 expired。
第四步:按依赖传播
先删除源记录或发出 tombstone,再触发 CDC、搜索索引、缓存和派生仓库的消费者。对无法实时删除的批处理系统写入抑制表,确保后续作业不会重新生成已删除主体。第三方处理者通过有回执的 API 或合同流程确认。
第五步:处理备份与加密擦除
备份通常按周期过期,无法逐条修改时应隔离恢复权限、标记删除名单,并在恢复流程中重新应用删除。对高敏感对象可使用每主体数据密钥,删除密钥使密文不可恢复;这不应被描述为适用于所有法规的万能方案。
第六步:验证而非只看成功码
消费者回传删除计数、版本、分区和校验摘要。编排器随机抽样主库、索引、仓库和对象存储查询,检查缓存失效与 CDC 下游水位;验证失败进入补偿任务,不直接关闭案件。
第七步:隔离保留例外
法律冻结记录单独存储,字段最小化并禁止产品查询。案件报告列出冻结范围、法源、owner 和复审日期;冻结解除后自动生成新的删除任务。不能让“有例外”变成永久不删的黑名单。
第八步:审计、告警与用户回执
审计日志只记录主体引用的不可逆摘要、操作者、时间、策略版本和结果,不复制敏感原文。监控未完成案件年龄、失败率、目录覆盖率、第三方回执和恢复演练。用户看到已完成、处理中或受法律保留影响的状态,并可获得合规解释。
删除工作流伪代码
case = create_case(subject, policy_version)
for target in catalog.targets(subject, policy_version):
enqueue_idempotent(case.id, target, action_for(target))
while pending(case):
retry_or_escalate(case)
verify_samples(case)
if all_verified(case):
close(case, "verified")
else:
close(case, "blocked")设计取舍与边界
| 场景 | 策略 | 代价 |
|---|---|---|
| 主库与索引 | tombstone + 异步删除 | 存在传播延迟 |
| 分析聚合 | 删除可识别明细,重算聚合 | 计算成本高 |
| 长期备份 | 到期覆盖或恢复时重放删除 | 不能即时逐条擦除 |
| 法律保留 | 最小化字段并冻结访问 | 需要复审和额外治理 |
删除证明应覆盖“哪些地方查过、哪些地方收到回执、哪些地方暂时例外”,不承诺无法验证的绝对物理消失。Google Cloud 的删除说明也将删除过程拆成多个阶段,并强调在流程完成前安全保留数据。
落地计划与证据
先选一个用户数据集,完成目录、身份映射和三类消费者(主库、索引、仓库)接入。用故障注入测试重复消息、消费者离线、恢复备份和策略变更。欧盟委员会说明删除权存在法定例外;Google Cloud 文档说明删除流水线的阶段性;TechInterview 的公开题目要求覆盖微服务、对象存储、分析系统、备份和审计轨迹。
试点的退出条件
目录覆盖率可计算;每个目标有 owner 与删除能力;重复请求幂等;失败可重试或升级;抽样验证能发现残留;保留例外有依据和到期日;用户回执与内部状态一致。
怎样证明收益不是巧合
比较接入前后的未登记数据集数、案件完成时间、验证发现的残留率、重试率和人工介入量。用演练覆盖消费者离线、备份恢复和第三方超时,而不是只统计正常路径。
常见误区与追问
只删除主库行
索引、缓存、仓库和对象存储可能继续返回数据。目录和下游回执必须成为完成条件。
用一个全局 DELETE 事件解决所有系统
不同消费者需要不同动作和版本;没有幂等、回执和水位,事件可能丢失或重复。应使用带 case id 的工作流。
声称备份能立即物理删除
许多备份按周期过期。应说明访问隔离、删除名单、恢复重放和最终覆盖时间。
法律保留如何不阻塞全部删除?
把保留范围缩到必要字段与记录,冻结访问并记录法源、owner 和复审日期;其余数据继续删除。
如何防止删除后又被回填?
源端写入 tombstone 或抑制表,CDC 和批处理在生成派生数据前检查删除状态,重放时再次应用策略。
用户要求立即完成怎么办?
诚实区分已验证目标与有期限的备份/第三方步骤,返回处理中状态和截止时间;不编造已经完成的物理删除。