NEventStore에서 mongo 지속성을 사용하는 동안 데이터를 압축할 수 있는 방법이 있습니까?

저는 C#, Dotnet 코어 및 NeventStore(버전 9.0.1)를 사용하여 기본적으로 지원하는 다양한 지속성 옵션을 평가하려고 합니다.

더 구체적으로 말하자면, mongo 지속성을 사용하려고 할 때 압축이 적용되지 않은 상태에서 페이로드가 저장됩니다.

참고: NEventStore의 SQL 지속성을 사용할 때는 페이로드 압축이 완벽하게 발생하지만 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()); 
         }
} 


해결 방법은 다음과 같습니다. IPipelineHook에서 PreCommit(CommitAttempt 시도) 및 Select 메서드를 구현하고 gzip 압축 논리를 사용하여 MongoDB에서 이벤트 압축을 달성했습니다.

SQL 및 mongo 지속성의 데이터 저장소 이미지 첨부:



따라서 질문은 다음과 같습니다.
  • 저장하는 동안 이벤트가 압축되도록 누락된 다른 옵션이나 설정이 있습니까(압축 메서드를 호출하는 유창한 방법)?
  • 위에서 언급한 해결 방법이 합리적입니까, 아니면 성능 오버헤드입니까?
  • 좋은 웹페이지 즐겨찾기