知识卡片

不变性的局限:流失率与合规删除需求

普通读书笔记卡

内容

[[状态与流互为积分微分的关系及不可变事件的优点]]描绘的不变性理想并非无代价可行:能否永久保留所有变更历史,取决于数据集的”流失率”——以追加为主、很少更新删除的工作负载很容易一直不变;但在相对较小的数据集上有高更新/删除率的工作负载里,不可变历史会膨胀到难以接受的规模,碎片化和压缩/垃圾回收的表现会变成运维稳健性的核心痛点。除了性能考量,还存在必须删除数据的管理性理由——隐私法规可能要求用户注销账号后删除其个人信息,数据保护立法可能要求删除错误信息,或需要堵住敏感信息的意外泄露。这种情况下,仅仅在日志末尾追加一条”标记为删除”的事件是不够的,必须真正改写历史、假装数据从未被写入过(Datomic称之为”切除”、Fossil版本控制系统称之为”避免”)。但真正删除数据极其困难,因为副本可能散落在很多地方:存储引擎/文件系统/SSD通常写到新位置而非原地覆盖旧数据,备份也常常被特意做成不可变以防意外删除或损坏——所以”删除”更准确的含义是”让数据更难被取回”,而不是”让数据不可能被取回”,即便如此,有时候你还是必须去尝试。

参考来源

- 位置:《数据密集型应用系统设计》第十一章《流处理》"不变性的局限性"(源文件:_epub-src/ch11_split_001.html) - 结论依据:原文说明不变性历史的可行性取决于数据流失率,指出隐私/数据保护立法可能要求真正删除数据而非仅追加删除事件,并说明存储引擎/备份的特性使真正删除极其困难,直接支撑本卡片结论。 - 原始内容:一些工作负载主要是添加数据,很少更新或删除;它们很容易保持不变……隐私条例可能要求在用户关闭帐户后删除他们的个人信息……真正删除数据是非常非常困难的……删除操作更多的是指"使取回数据更困难",而不是指"使取回数据不可能"。