状态快照 (State Snapshot)

当前查看的版本是由机器翻译自简体中文,并进行人工校对的结果。若文档中存在任何翻译不当的地方,欢迎点击此处提交您的翻译建议。

State Snapshot 加速状态还原速度

一个处于激活状态的 Claptrap ,它的 State 即是当前的最新数据状态。这是通过事件溯源的方式来从持久化层还原的。有时,事件的数量可能非常庞大。那么通过事件来还原 State 将会花费更多的时间。因此,在 Claptrap 框架中提供了状态快照来持久化特定 Claptrap 在一定条件之后的状态。这个条件通常来说是以下几种:

  1. 执行了若干个事件之后。
  2. 在 Claptrap Deactive 时。
  3. 在一定的时间周期内。

事件快照的存在,使得状态从持久层还原的速度得到了提升。如果持久层存在快照,则一个状态的还原通常是按照以下步骤进行的:

  1. 读取状态快照。
  2. 从状态快照对应的版本号开始,向后读取所有的事件进行状态的更新。
  3. 更新状态直到持久层已经没有剩余的事件。

但是,如果没有快照,则还原步骤则变为如下所示:

  1. 通过用户自定义方法来创建初始状态。
  2. 从事件库中读取所有事件来进行状态的更新。
  3. 更新状态直到持久层已经没有剩余的事件。

不过。快照的存在也会带来一些特殊性。结合上面的工作步骤,我们很容易就发现,一旦形成了快照:

  1. 将不会再执行用户的自定义方法。
  2. 小于快照版本号的事件将不会被再次执行。

目前,框架对于每个 Id 仅仅能够保存一个最后的快照。