如何解决在事件存储中删除数据的问题?
我需要永久且完全地删除某些数据以符合隐私法规。
我找到了以下这些替代方案:
加密需要删除的数据,并将其加密密钥存储在单独的表中。当需要删除数据时,只需删除加密密钥。
对于不需要删除的数据,使用事件溯源,同时参考一个用于存储需要删除的机密数据的CRUD数据库。
还有其他方法吗?
如何解决在事件存储中删除数据的问题?
我需要永久且完全地删除某些数据以符合隐私法规。
我找到了以下这些替代方案:
加密需要删除的数据,并将其加密密钥存储在单独的表中。当需要删除数据时,只需删除加密密钥。
对于不需要删除的数据,使用事件溯源,同时参考一个用于存储需要删除的机密数据的CRUD数据库。
还有其他方法吗?
一个月前我曾这样做过。尽可能地简化,我只是重新播放了整个事件存储,修改了事件数据,并最终将事件存储到新的事件存储中。换句话说,进行了迁移。当一切完成后,我删除/备份了旧的存储。之后,因为更改,我对新的事件存储进行了再次播放以更新投影。
如果你没有实现加密,你必须找到一种方法来添加它。比如重新播放整个事件存储。
PS:我想提醒其他读者,更改事件存储的原因真的很有限。除非遵守隐私法规或存在严重的错误,否则不要使用它。如果您需要删除用户数据,可以采取以下两种方法之一:
首先,更改您的事件处理程序,以使其不需要数据,这样在删除数据时不会出现问题。
然后创建一个小应用程序来读取所有事件,并将新事件写入一个新的事件存储库,删除所需的数据。
测试使用新事件存储库仍能够运行系统;可以重新生成所有聚合体,并生成所有投影/视图/读取模型/等等。
删除旧的事件存储库。
来自Event Store的EventStoreDB允许您清除过期TTL事件。通常,这些是临时事件,例如统计信息或必须在一段时间后删除的其他内容。
为了不破坏模型,通常会使用快照将实体状态修复到某个时间点,然后可以删除先前的事件而不会破坏系统。