事件溯源 - 如何在事件存储中删除数据?

19

如何解决在事件存储中删除数据的问题?

我需要永久且完全地删除某些数据以符合隐私法规。

我找到了以下这些替代方案:

  1. 加密需要删除的数据,并将其加密密钥存储在单独的表中。当需要删除数据时,只需删除加密密钥。

  2. 对于不需要删除的数据,使用事件溯源,同时参考一个用于存储需要删除的机密数据的CRUD数据库。

还有其他方法吗?


2
面对同样的问题,我们决定修改包含待删除数据的原始事件,并用占位符值替换所有待删除数据的出现。然而,如果您选择第二个选项更加优雅且容错性更高,尽管您无法保留更改历史记录(在这种情况下可能是可以接受的,因为它是个人数据)。 - Alexander Langer
2
选项1是最合适的,因为你可以做到两件事情。1. 保护数据,2. 当需要“忘记”时,你只需删除私钥即可。我能添加到你的列表中的唯一另一个选择就是将敏感数据保留在自己的流中。然后你只需删除该流即可。 - Sarmaad
ddd-cqrs 邮件列表在过去的两个月中已经涵盖了这个问题(以及之前每三个月可能都会出现 :))。 - Ruben Bartelink
@RubenBartelink,你知道结论是什么吗?邮件列表讨论有没有摘要? - Jan-Terje Sørensen
@arcone groups.google.com有这个。这是一个很长的帖子,有很多选择和很棒的见解,还有很好的例子。我没必要浪费时间做一个糟糕的摘要。你有搜索过邮件列表吗?这个列表对于ES系统来说是必读的,快去看看吧! - Ruben Bartelink
嗨,Ruben,你能把来自邮件列表的那篇文章发给我一份副本吗?谢谢。 - user8280126
3个回答

6

一个月前我曾这样做过。尽可能地简化,我只是重新播放了整个事件存储,修改了事件数据,并最终将事件存储到新的事件存储中。换句话说,进行了迁移。当一切完成后,我删除/备份了旧的存储。之后,因为更改,我对新的事件存储进行了再次播放以更新投影。

如果你没有实现加密,你必须找到一种方法来添加它。比如重新播放整个事件存储。

PS:我想提醒其他读者,更改事件存储的原因真的很有限。除非遵守隐私法规或存在严重的错误,否则不要使用它。如果您需要删除用户数据,可以采取以下两种方法之一:

  • 加密所有用户数据,当您需要删除时,只需摆脱私钥即可。
  • 将所有用户数据放在单独的存储/数据库中,需要时可以轻松删除,而不会影响系统的其他部分。

你是在几个月前做的?是选择1还是2? - user8280126
我正在回答这个问题 -> 如何在事件存储中删除数据? - mynkow

5

首先,更改您的事件处理程序,以使其不需要数据,这样在删除数据时不会出现问题。

然后创建一个小应用程序来读取所有事件,并将新事件写入一个新的事件存储库,删除所需的数据。

测试使用新事件存储库仍能够运行系统;可以重新生成所有聚合体,并生成所有投影/视图/读取模型/等等。

删除旧的事件存储库。


3

来自Event Store的EventStoreDB允许您清除过期TTL事件。通常,这些是临时事件,例如统计信息或必须在一段时间后删除的其他内容。

为了不破坏模型,通常会使用快照将实体状态修复到某个时间点,然后可以删除先前的事件而不会破坏系统。


geteventstore.net现在已经关闭。这和eventstore.com是同一个吗? - Chris Jensen
1
是的,这是同一款产品。我更新了我的回答。 - Alexey Zimarev

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接