狀態快照 (State Snapshot)
State Snapshot 加速狀態還原速度
一個處於啟動狀態的 Claptrap ,它的 State 即是當前的最新數據狀態。這是通過事件溯源的方式來從持久化層還原的。有時,事件的數量可能非常龐大。那麼通過事件來還原 State 將會花費更多的時間。因此,在 Claptrap 框架中提供了狀態快照來持久化特定 Claptrap 在一定條件之後的狀態。這個條件通常來說是以下幾種:
- 執行了若干個事件之後
- 在 Claptrap Deactive 時
- 在一定的時間週期內
事件快照的存在,使得狀態從持久層還原的速度得到了提升。如果持久層存在快照,則一個狀態的還原通常是按照以下步驟進行的:
- 讀取狀態快照
- 從狀態快照對應的版本號開始,向後讀取所有的事件進行狀態的更新
- 更新狀態直到持久層已經沒有剩餘的事件
但是,如果沒有快照,則還原步驟則變為如下所示:
- 通過使用者自定義方法來創建初始狀態
- 從事件庫中讀取所有事件來進行狀態的更新
- 更新狀態直到持久層已經沒有剩餘的事件
不過,快照的存在也會帶來一些特殊性。結合上面的工作步驟,我們很容易就發現,一旦形成了快照:
- 將不會再執行使用者的自定義方法
- 小於快照版本號的事件將不會被再次執行
目前,框架對於每個 Id 僅僅能夠保存一個最後的快照。