2016-10-02 5 views
1

현재 Go Actor 액티비티 용 EventSourcing을 구현 중입니다. 지금 당장 가지고있는 문제는 액터가 다시 시작되어 이벤트 저널에서 모든 상태를 재생해야 할 때 쿼리가 일관성없는 데이터를 반환 할 수 있다는 것입니다. 이 문제를 해결할 수 있다는 것을 알고 있습니다. MutationTokenConsisntent N1QL Query Couchbase GOCB sdk

하지만 그렇게하면 모든 이벤트를 순차적으로 작성해야합니다. 즉, 마지막 이벤트를 마지막으로 작성해야합니다.

그런 식으로 마지막 이벤트에 대한 변이 토큰은 특정 액터에 대한 모든 데이터를 일관성있게 얻을 수 있습니다.

그러나 이것은 매우 느리며 약 10 000 개의 이벤트를 순서대로 기록합니다. 설정에 약 5 초가 걸립니다.

go 루틴을 사용하여 10 000 개의 비동기를 쓰면 모든 데이터를 1 초 이내에 쓸 수 있습니다. 하지만 쓰기는 비 결정적 순서로 이루어 지므로 신뢰할 수있는 변형 토큰을 알 수 있습니다. 예 : 일상적인 스케줄링 AFAIK로 인해 이벤트 999가 이벤트 843 전에 기록 될 수 있습니다.

내 옵션에는 어떤 것들이 있습니까?

답변

1

기술적으로 말하면 MutationToken과 비동기 작업은 상호 배타적이지 않습니다. 클라이언트에게 변경하지 않고 수행 할 수 있습니다 (확실하지 않습니다). 그러나 여기에서 중요한 것은 모든 MutationToken 응답을 취한 다음 모든 vbucket에 대해 가장 높은 수의 쿼리를 발행하는 것입니다.

키는 여기에 하나의 MutationToken이 있으면 다른 것들을 추가 할 수 있습니다. 나는 이것을 직접 할 수있는 방법을 직접적으로 보지 않지만, 내부적으로 그것은 단지지도 일 뿐이므로 상대적으로 직설적이어야하고 우리 (Couchbase)가이를 수행하는 데 기여할 것이라고 확신한다. 가장 낮은 레벨에서는 쿼리가 발행 될 때 쿼리에 제공되는 vbucket 시퀀스 맵입니다.