哪些演员应该持久化?
Which actors should be made Persistent?
让我们想象一个典型的 Akka 应用程序,它具有树状结构的 Actors,即少量(2-3)个顶层 actor,它们管理着可能位于层次结构底部的数千个小 actor。似乎有两种持久化方法:
- 仅使顶级参与者持久化。 child 演员依靠他们的 parent 进行任何状态恢复等
- 使所有 children actor 持久化。我们最终可能有数千个持久性 ID,每个参与者都可以恢复自己的状态。
在这些方法之间进行选择时有哪些注意事项?是否有任何典型的用例示例适合一个而不适合另一个?
这个问题应该是抽象的,但这里有一个例子。假设我们为应用程序的每个用户都有一个演员,并且这些演员共享同一个 parent 演员。如果我们想要保留每个用户的电子邮件地址及其任何更新,我们可以让每个用户参与者持久化,或者我们可以只让顶级参与者持久化。
在那种情况下,我可能会采用第二种方法。您只会在 "selected" 时恢复用户参与者的事件。使这种方法更加方便的是用户参与者的行为可以根据其状态改变这一事实。例如。如果用户注册,您当然不希望多次保持相同的 "registered" 事件。或者,如果用户停用其帐户,您当然不希望让他更新他的电子邮件等。此外,所有更改都保存为一系列事件。所以没有数据丢失。
另一方面,如果您使用第一种方法,则必须在父 actor 恢复时重新创建所有子 actor 以设置它们的状态,从而避免前面提到的不良行为。
让我们想象一个典型的 Akka 应用程序,它具有树状结构的 Actors,即少量(2-3)个顶层 actor,它们管理着可能位于层次结构底部的数千个小 actor。似乎有两种持久化方法:
- 仅使顶级参与者持久化。 child 演员依靠他们的 parent 进行任何状态恢复等
- 使所有 children actor 持久化。我们最终可能有数千个持久性 ID,每个参与者都可以恢复自己的状态。
在这些方法之间进行选择时有哪些注意事项?是否有任何典型的用例示例适合一个而不适合另一个?
这个问题应该是抽象的,但这里有一个例子。假设我们为应用程序的每个用户都有一个演员,并且这些演员共享同一个 parent 演员。如果我们想要保留每个用户的电子邮件地址及其任何更新,我们可以让每个用户参与者持久化,或者我们可以只让顶级参与者持久化。
在那种情况下,我可能会采用第二种方法。您只会在 "selected" 时恢复用户参与者的事件。使这种方法更加方便的是用户参与者的行为可以根据其状态改变这一事实。例如。如果用户注册,您当然不希望多次保持相同的 "registered" 事件。或者,如果用户停用其帐户,您当然不希望让他更新他的电子邮件等。此外,所有更改都保存为一系列事件。所以没有数据丢失。
另一方面,如果您使用第一种方法,则必须在父 actor 恢复时重新创建所有子 actor 以设置它们的状态,从而避免前面提到的不良行为。