事件溯源——删除事件相关文件
Event sourcing - delete event related files
我想将我的一些数据存储在相对大的文件中(每个文件几 GB)。我想使用事件源并保存与这些文件相关的事件,例如FileCreated:标题、描述、时间戳、作者、个人、encryptionkey 等。过段时间有些文件就不再需要了,占用了很多space。所以为了释放 space,我需要删除它们。这样做是有问题的,因为我将在事件存储中拥有历史记录,而不是文件系统中的文件。有没有办法保持完整性并以某种方式删除两者?或者这个问题有最佳实践吗?
由于没有得到答案,我尝试自己回答。
可以从历史记录中删除一个事件,您需要创建一个新的事件存储并针对要删除的相同聚合 ID 过滤事件。完成后,您可以切换到新的事件存储并删除旧的。可能您还需要重播预测。所以它非常类似于一个整体迁移,它需要很多时间。在目前的情况下,如果我每年大约只需要这样做一次就没有问题。将此数据存储在事件存储中的另一个问题是,我要么从那里流式传输它,要么我需要复制它才能提供服务。后一个并不总是一个好的解决方案,因为有时复制会花费太多时间,并且为了保存您需要流式传输的数据,否则您将很快耗尽内存。所以事件存储应该支持流式附件。
另一种解决方案是将相对大的数据保留在文件中并显示类似 404 未找到的内容,或者文件因为这个那个而被删除。我经常看到这个。在这种情况下,可以将事件保留在存储中,例如,您可以添加一个 ContentRemoved 事件,您可以在其中 select 原因。隐藏已删除文件的另一个选项,因此它不会被应用程序列出,我想这也是常见的。这个解决方案也有缺点。这种方法的迁移更加复杂,因为您需要同时移动事件存储和文件。如果您不小心删除了一个文件,除非您在备份中有该文件,否则您以后无法撤消它。这可以通过将实际文件删除延迟几天来解决,因此如果您改变主意,可以撤消它。另一种创建垃圾箱的选项,只有清空垃圾箱才会删除文件。
我认为这两种解决方案都值得考虑,可能取决于实际项目,哪一种更适合。
我想将我的一些数据存储在相对大的文件中(每个文件几 GB)。我想使用事件源并保存与这些文件相关的事件,例如FileCreated:标题、描述、时间戳、作者、个人、encryptionkey 等。过段时间有些文件就不再需要了,占用了很多space。所以为了释放 space,我需要删除它们。这样做是有问题的,因为我将在事件存储中拥有历史记录,而不是文件系统中的文件。有没有办法保持完整性并以某种方式删除两者?或者这个问题有最佳实践吗?
由于没有得到答案,我尝试自己回答。
可以从历史记录中删除一个事件,您需要创建一个新的事件存储并针对要删除的相同聚合 ID 过滤事件。完成后,您可以切换到新的事件存储并删除旧的。可能您还需要重播预测。所以它非常类似于一个整体迁移,它需要很多时间。在目前的情况下,如果我每年大约只需要这样做一次就没有问题。将此数据存储在事件存储中的另一个问题是,我要么从那里流式传输它,要么我需要复制它才能提供服务。后一个并不总是一个好的解决方案,因为有时复制会花费太多时间,并且为了保存您需要流式传输的数据,否则您将很快耗尽内存。所以事件存储应该支持流式附件。
另一种解决方案是将相对大的数据保留在文件中并显示类似 404 未找到的内容,或者文件因为这个那个而被删除。我经常看到这个。在这种情况下,可以将事件保留在存储中,例如,您可以添加一个 ContentRemoved 事件,您可以在其中 select 原因。隐藏已删除文件的另一个选项,因此它不会被应用程序列出,我想这也是常见的。这个解决方案也有缺点。这种方法的迁移更加复杂,因为您需要同时移动事件存储和文件。如果您不小心删除了一个文件,除非您在备份中有该文件,否则您以后无法撤消它。这可以通过将实际文件删除延迟几天来解决,因此如果您改变主意,可以撤消它。另一种创建垃圾箱的选项,只有清空垃圾箱才会删除文件。
我认为这两种解决方案都值得考虑,可能取决于实际项目,哪一种更适合。