假设我们使用 akka-persistence 设计了我们的系统。现在,我们将事件存储在事件存储中。同时,系统在生产中,需要一个新功能。因此,我们发现最好的方法是在事件中添加或修改字段。假设通过更改字段名称或类型。
现在,我们有两个版本的事件,一个在生产中,一个在新部署中,它们不兼容。如果我们尝试从旧版本恢复数据,我们将失败。
除了数据迁移之外,最好的方法是什么?
假设我们使用 akka-persistence 设计了我们的系统。现在,我们将事件存储在事件存储中。同时,系统在生产中,需要一个新功能。因此,我们发现最好的方法是在事件中添加或修改字段。假设通过更改字段名称或类型。
现在,我们有两个版本的事件,一个在生产中,一个在新部署中,它们不兼容。如果我们尝试从旧版本恢复数据,我们将失败。
除了数据迁移之外,最好的方法是什么?
这绝对是在生产中使用 akka 持久性的更大问题之一。在akka-user 邮件列表上有很多关于这个的讨论。
我想说,只要新功能只需要额外的信息,使用允许有限模式演变的序列化格式(例如 google 协议缓冲区或 json)将是一种解决方案。
如果新功能需要更改现有数据,您只能进行数据迁移。