我有一个新的ES流已经有50万个事件(没有快照......我知道,我到了那里)和一个简单的客户端,atm只是附加(甚至更多)事件.
NEventStore.OpenStream(int.MinValue, int.MaxValue)最初打开流需要很长时间; 之后我存储了最后一个版本,从那时起NEventStore.OpenStream(lastRevision, int.MaxValue)再次追加.这个问题仅在初次启动时才会出现.
是否有一种机制NEventStore可以简单地在没有打开的情况下附加,或者在不打开整个流的情况下确定头部修订版,这样我就可以从最后一个版本打开并追加.当然我也可以直接进入数据库和查询,但这是我认为我不应该需要的依赖.
您已经提到了一个可能的解决方案:快照。
此示例从最新快照打开一个流,并在提交事件后添加新快照。
// Get the latest snapshot
var latestSnapshot = _eventStore.Advanced.GetSnapshot(streamId, int.MaxValue);
// Open the stream from the snapshot if there is one, otherwise open the stream as normal
using (var stream = latestSnapshot == null ?
_eventStore.OpenStream(streamId) :
_eventStore.OpenStream(latestSnapshot, int.MaxValue))
{
// Add events and commit
stream.Add(new EventMessage());
stream.CommitChanges(Guid.NewGuid());
// Add a new snapshot (with no payload)
_eventStore.Advanced.AddSnapshot(
new Snapshot(streamId, stream.StreamRevision, string.Empty));
}
Run Code Online (Sandbox Code Playgroud)
可能没有必要如此频繁地添加新快照。这只是一个展示快照如何工作的示例。
| 归档时间: |
|
| 查看次数: |
487 次 |
| 最近记录: |