我有一个新的ES流,其中已经有500万个事件(尚无快照...我知道,我到了那里),还有一个简单的客户端,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));
}
可能不必经常添加新快照。这只是说明快照如何工作的一个示例。
关于c# - 获取NEventStore头部修订,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28264533/