Obecnie korzystamy z magazynu zdarzeń opartego na języku SQL (typowa implementacja 2-tabelowa), a niektórzy ludzie w zespole obawiają się, że mimo tego " ponowne używanie Event Store tylko do zapisywania, rzeczy mogą być nieco wolniejsze, więc została wprowadzona sugestia zamiast dodawać migawki tu i tam, aby faktycznie utrzymywać w pełni spójne (ze strumieniami zdarzeń) migawkę każdego agregatu w jego najnowszy stan (w formacie JSON). Wszystkie zapytania w systemie zostaną zakończone po stronie odczytu, z typową bazą danych SQL, która jest aktualizowana w ostatecznej formie spójności ze strony ES (zapis).Trzymanie migawki najnowszej wersji każdego agregatu w magazynie zdarzeń
Posiadanie takiego systemu pozwoli nam czerpać korzyści z posiadania Sklepu z Wydarzeniami, jednocześnie usuwając wszelkie możliwe problemy z wydajnością. W tej chwili nie korzystamy z żadnej funkcji "podróży w czasie", ale prędzej czy później tak się stanie.
Czy to dobre podejście? Jest w tym coś, co sprawia, że czuję się nieswojo. Na przykład, jeśli potrzebujemy jakiejś funkcji podróżowania w czasie, nie posiadanie migawek tu i tam w strumieniu zdarzeń każdego agregatu okaże się katastrofą wydajności. Oczywiście możemy mieć zarówno najbardziej aktualną migawkę na zagregowaną instancję, jak i migawki w strumieniach zdarzeń.
Jeśli zdecydujemy się na tę trasę, czy powinniśmy zrobić aktualizację snapshot dla danej zagregowanej transakcji do aktualizacji wydarzeń w tym samym agregacie, czy też powinniśmy po prostu zaktualizować zdarzenia i w konsekwentny sposób zaktualizować migawka?
Jakie są wady tego podejścia? Czy ktoś próbował czegoś takiego?
Świetna odpowiedź. Z mojego doświadczenia wynika również, że dobrze zaprojektowane, drobnoziarniste agregaty generują mniej zdarzeń i rzadziej wymagają migawki. – guillaume31