Scala 如何在生产中发展akka持久性事件?

Scala 如何在生产中发展akka持久性事件?,scala,akka,akka-persistence,Scala,Akka,Akka Persistence,假设我们已经使用akka持久性设计了我们的系统。现在,我们在事件存储中存储了事件。当系统投入生产时,要求提供新功能。因此,我们发现最好的方法是在事件中添加或修改字段。比方说,通过更改字段名或类型 现在,我们有两个版本的事件,一个在生产中,另一个在新部署中,它们不兼容。如果试图从旧版本恢复数据,我们将失败 除了数据迁移之外,最好的解决方法是什么?这无疑是在生产中使用akka持久性的一个更大问题。关于这一点,网上有很多讨论 我想说的是,只要新功能只需要额外的信息,使用允许有限模式演化的序列化格式(如

假设我们已经使用akka持久性设计了我们的系统。现在,我们在事件存储中存储了事件。当系统投入生产时,要求提供新功能。因此,我们发现最好的方法是在事件中添加或修改字段。比方说,通过更改字段名或类型

现在,我们有两个版本的事件,一个在生产中,另一个在新部署中,它们不兼容。如果试图从旧版本恢复数据,我们将失败


除了数据迁移之外,最好的解决方法是什么?

这无疑是在生产中使用akka持久性的一个更大问题。关于这一点,网上有很多讨论

我想说的是,只要新功能只需要额外的信息,使用允许有限模式演化的序列化格式(如google protocol buffers或json)将是一个解决方案


如果新功能需要更改现有数据,那么除了进行数据迁移,您别无选择。

谢谢你,Rüdiger,我们实际上使用了协议缓冲区,但它有点“不干净”和混乱!我希望有一个更干净的版本。。。另外,据我所知,使用json将导致性能的提升……protobuf将比json更快、更紧凑。对于模式迁移的基本问题,我真的看不到一个好的解决方案。要么对事件进行版本设置,让代码读取每个旧版本并以最新版本写入(糟糕!),要么添加可选的数据protobuf样式,希望您已经涵盖了所有可能的选项组合。