我有一个新的ES流,里面已经有50万个事件(还没有快照.我知道,我正在到达那里)和一个简单的客户端,atm只是附加(甚至更多)事件。
NEventStore.OpenStream(int.MinValue, int.MaxValue)最初打开流需要很长的时间;之后我存储最后的修订版,然后只在NEventStore.OpenStream(lastRevision, int.MaxValue)上追加。问题才刚刚开始。
在NEventStore中是否有一种机制可以简单地追加而不打开,或者在不打开整个流的情况下确定头修订,这样我就可以从最后一个版本打开并追加。当然,我也可以直接到数据库和查询,但这是一个依赖,我觉得我不应该需要。
发布于 2015-02-03 07:40:17
您已经提到了一个可能的解决方案:快照。
此示例从最新快照中打开流,并在事件发生后添加新快照。
// 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));
} 可能没有必要经常添加新的快照。这只是一个展示快照是如何工作的例子。
https://stackoverflow.com/questions/28264533
复制相似问题