Получите ревизию головы NEventStore

У меня есть новый поток ES, в котором уже есть полмиллиона событий (пока нет снимков... Я знаю, я получаю) и простой клиент, который atm только добавляет (даже больше) событий.

NEventStore.OpenStream(int.MinValue, int.MaxValue) Первоначально для открытия потока требуется очень много времени; после чего я сохраняю последнюю ревизию и с тех пор только NEventStore.OpenStream(lastRevision, int.MaxValue) добавить снова. Проблема только при первом запуске.

Есть ли механизм внутри NEventStore либо просто добавить, не открывая, либо определить версию заголовка, не открывая весь поток, чтобы я мог открыть из последней версии и добавить. Конечно, я мог бы также перейти непосредственно к базе данных и запросам, но это зависит от того, что мне не нужно.

1 ответ

Решение

Вы уже упомянули возможное решение: снимки.

В этом примере открывается поток из последнего снимка и добавляется новый снимок после принятия событий.

// 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));
}      

Вероятно, нет необходимости добавлять новые снимки так часто. Это просто пример, показывающий, как работают снимки.

Другие вопросы по тегам