【问题标题】:Event Sourcing - How to delete data in an eventstore?事件溯源 - 如何删除事件存储中的数据?
【发布时间】:2014-09-23 01:20:28
【问题描述】:

如何解决在 eventstore 中删除数据的问题?

为了遵守隐私法,我需要永久彻底删除一些数据。

我找到了这些替代方案:

  1. 对需要删除的数据进行加密,并将加密密钥存储在自己的表中。当需要删除数据时,您只需删除加密密钥即可。

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

还有其他方法吗?

【问题讨论】:

  • 面对同样的问题,我们决定修改包含要删除的数据的原始事件,并将所有出现的要删除的数据替换为占位符值。但是,如果您的选项 2. 更优雅且更容易出错,尽管您无法保留更改历史记录(在这种情况下可能没问题,因为它是个人数据)
  • 选项 1 是最合适的,因为您要实现两件事。 1. 保护数据和 2. 当“忘记它”时,您只需删除私钥即可。我可以添加到您的列表中的唯一其他选择是将敏感数据保留在自己的流中。然后你简单地删除流。
  • ddd-cqrs 邮件列表在过去 2 个月内涵盖了这一点(并且在此之前每 3 个月进行一次概率 :)
  • @RubenBartelink 你知道结论是什么吗?是否有邮件列表讨论的摘要?
  • @arcone groups.google.com 有。这是一个很长的话题,有很多选择和很好的见解,还有很好的例子。我不需要浪费时间做一个拙劣的概要。你搜索过邮件列表吗?该列表是 ES 系统的必读内容,所以去吧!

标签: events cqrs event-sourcing


【解决方案1】:

我一个月前做过。试图让它尽可能简单。我只是重放了整个事件存储,修改了事件数据,最后将事件存储在一个新的事件存储中。换句话说,迁移。当一切都完成后,我删除/备份了旧商店。之后,由于更改,我根据预测重播了新的事件存储。

如果您没有实施加密,则必须以某种方式添加它。就像重播整个事件存储一样。

PS:只是想为其他读者提一下,更改事件存储的原因确实有限。除非遵守隐私法非常讨厌的错误,否则不要使用它。如果您需要删除用户的数据,您可以执行以下两项操作之一:

  • 加密所有用户的数据,当你必须删除它时,你会得到 去掉私钥。
  • 将所有用户的数据放在单独的存储/数据库中,需要时您可以将其删除,而不会影响系统的其他部分。

【讨论】:

  • 一个月前做了什么?上面的选项 1 或 2?
  • 我在回答这个问题 -> 如何删除 eventstore 中的数据?
【解决方案2】:

首先,将您的事件处理程序更改为不需要数据,以便在删除数据时不会中断。

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

测试您的系统使用新的事件存储仍然可以运行;可以重新水化所有聚合,并生成所有投影/视图/读取模型/无论您如何称呼它们。

删除旧的事件存储。

【讨论】:

    【解决方案3】:

    Event Store 的 EventStoreDB 允许您清除 TTL 过期的事件。通常,这些是临时事件,例如统计数据,或者您拥有的东西,即必须在一段时间后删除。

    为了不破坏您的模型,通常会在某个时间使用快照来修复实体状态,然后可以在不破坏系统的情况下删除之前的事件。

    【讨论】:

    • geteventstore.net 现在已经死了。这和 eventstore.com 一样吗?
    • 是的,是同一个产品。我更新了我的答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-06
    相关资源
    最近更新 更多