事件采购 - 删除与事件相关的文件

时间:2017-10-14 04:03:34

标签: event-sourcing

我想将一些数据存储在相对较大的文件中(每个文件几GB)。我想使用事件来源并保存与这些文件相关的事件,例如FileCreated:标题,描述,时间戳,作者,个人,加密密钥等。一段时间后,不再需要一些文件,它们占用了大量空间。所以为了释放空间,我需要删除它们。这样做是有问题的,因为我将在事件存储中具有历史记录,而不是文件系统中的文件。有没有办法保持诚信,并以某种方式删除两者?或者这个问题有最好的做法吗?

1 个答案:

答案 0 :(得分:0)

由于我没有得到答案,我试着自己回答。

可以从历史记录中删除事件,您需要创建一个新的事件存储并过滤您想要删除的相同聚合ID的事件。完成后,您可以切换到新的事件存储并删除旧的存储。可能你也需要重播预测。所以它与整个迁移非常相似,需要花费很多时间。在目前的情况下,如果我每年只需要这样做一次,那就没问题了。将此数据存储在事件存储中的另一个问题是我从那里传输它或者我需要复制它以便为它提供服务。后者并不总是一个好的解决方案,因为有时需要花费太多时间来复制并保存所需的数据,无论如何都要流式传输,否则你的内存将会非常快。因此,事件存储应支持流式附件。

另一个解决方案是保存文件中的相对大数据并显示404找不到的内容,或者因为这样而删除了文件。我经常看到这个。在这种情况下,可以将事件保留在存储中,例如,您可以添加ContentRemoved事件,您可以在其中选择原因。隐藏已删除文件的另一个选项,因此它不会被应用程序列出,这通常也是我猜的。该解决方案也有缺点。使用此方法迁移更复杂,因为您需要移动事件存储和文件。如果意外删除文件,除非备份中包含该文件,否则以后无法撤消该文件。这可以通过延迟几天的实际文件删除来修复,因此如果您改变主意,可以撤消它。只有清空垃圾箱才能删除制作垃圾箱和文件的另一个选项。

我认为这两个解决方案都值得考虑,可能取决于实际项目哪一个更适合。