知识卡片

应用演化后重新处理数据:渐进式演化优于突然切换迁移

普通读书笔记卡

内容

流处理让输入变化能以低延迟反映到衍生视图,批处理则能重新处理大量累积的历史数据、把新视图导出到既有数据集上——没有重新处理,模式演化就只能局限于简单变化(如加新可选字段),无论[[读时模式与写时模式的权衡及适用场景]]用的是哪种;有了重新处理,数据集则可以被重组为一个完全不同的模型来满足新需求。19世纪英国铁路轨距统一是一个跨越计算机领域的类比:各条铁路轨距标准不一,1846年确定标准轨距后,为了不停运火车,办法是先给轨道加第三条轨、变成能同时容纳两种轨距的”双轨距”,让新旧列车逐渐并存过渡,等所有列车都换成标准轨距后再拆掉多余的轨道——这个转换代价高昂,也是为什么今天仍有非标准轨距残留(如旧金山湾区BART系统)。衍生视图正是这种渐进演化的软件版本:不需要突然切换式的迁移,而是把旧架构和新架构并排维护为同一份基础数据上的两个独立衍生视图,先让少量用户转到新视图测试性能、发现错误,再逐渐扩大比例,最终删除旧视图。这种渐进迁移的美妙之处在于每个阶段都容易逆转——你始终有一个可回滚的可用系统,降低了不可逆损害的风险,反而能让你对继续前进更有信心,从而更快地改善系统。

参考来源

- 位置:《数据密集型应用系统设计》第十二章《数据系统的未来》"应用演化后重新处理数据""铁路上的模式迁移"(源文件:_epub-src/ch12_split_000.html) - 结论依据:原文用19世纪英国铁路轨距标准化时先建双轨距过渡、再逐渐淘汰旧轨的历史案例,类比衍生视图允许新旧架构并排维护、逐步迁移用户、且每个阶段都可回滚的渐进演化优势,直接支撑本卡片结论。 - 原始内容:以这种方式"再加工"现有的轨道,让新旧版本并存,可以在几年的时间内逐渐改变轨距……你可以将旧架构和新架构并排维护为相同基础数据上的两个独立衍生视图……每个阶段的过程都很容易逆转。