Я работаю с C#, Dotnet core и NeventStore (версия — 9.0.1), пытаясь оценить различные варианты персистентности, которые он поддерживает из коробки.
Более конкретно, при попытке использовать персистентность mongo полезная нагрузка сохраняется без какого-либо сжатия.
Примечание: сжатие полезной нагрузки происходит отлично при использовании SQL персистенции NEventStore, но не при использовании персистенции mongo.
Я использую приведенный ниже код для создания хранилища событий и инициализации:
private IStoreEvents CreateEventStore(string connectionString)
{
var store = Wireup.Init()
.UsingMongoPersistence(connectionString,
new NEventStore.Serialization
.DocumentObjectSerializer())
.InitializeStorageEngine()
.UsingBsonSerialization()
.Compress()
.HookIntoPipelineUsing()
.Build();
return store;
}
А для хранения событий я использую приведенный ниже код:
public async Task AddMessageTostore(Command command)
{
using (var stream = _eventStore.CreateStream(command.Id))
{
stream.Add(new EventMessage { Body = command });
stream.CommitChanges(Guid.NewGuid());
}
}
Обходной путь: Реализация методов PreCommit(CommitAttempt attempt) и Select в IPipelineHook и с помощью логики сжатия gzip было достигнуто сжатие событий в MongoDB.
Прикрепляю образ хранилища данных как SQL, так и mongo persistence:
Итак, вопросы:
- Есть ли какая-то другая опция или настройка, которую я упускаю, чтобы события сжимались при сохранении (простой способ вызова метода compress)?
- Является ли вышеупомянутое обходное решение разумным или же это накладные расходы на производительность?