CQRS에 대한 자습서를 몇 개 읽었지만 모두 실제 사례를 사용하지 않았습니다. 쉬운 일들)은 메모리 이벤트 저장소 만 가지고 있습니다. 그리고이 예제에서는 이벤트의 "재생"에서 객체의 현재 상태를 쉽고 빠르게 얻을 수 있습니다.CQRS는 아직 완성되지 않았으며 DB에 저장된 내용이 없습니다 (
그러나이 방법은 실제 단어로 어떻게 작동합니까? SQL 데이터베이스와 예. .이 전 사용자와 시스템을 가지고 있다고
하자 그리고 내가 추가하고 편집 사용자뿐만 아니라 모든 사용자의 목록을 얻을 수있는 UI가 있습니다.
자습서의 내용에 따라 DB에 내 이벤트가 저장되어 있다고 가정 해 봅시다. 각 사용자의 프로필에 3 가지 변경 사항이 있고 100.000 명의 사용자가 있다고 가정 해 봅시다.
이제 GetById가 포함 된 레포가 있습니다. 정상적인 비 CQRS 시스템에서는 ID를 기반으로 정확하게 하나의 레코드를 얻습니다. 빠르고 작은 리소스 사용.
이제 CQRS 시스템에서 DB로부터 3 개의 레코드를로드하고 새로운 사용자 개체에 적용하고 이것을 반환해야합니다 ... 그다지 성능이 좋지는 않지만 내가 말할 수있는 것입니다. " 어쩌면 로깅 혜택 등으로 인해 그럴 수 있습니다. "
그러나 한 페이지에 50 명의 사용자를 표시하는 목록 사용자 시나리오는 어떻게합니까? 50 번 x 3 개의 레코드 및 각 페이지 클릭 그리고 이것은 고객, 어쩌면 청구서, 예약 등에 대해서뿐만 아니라 자원 낭비가 무엇입니까?
CQRS/EventSourcing에 대한 잘못된 점이 있습니까? 아니면이 무승부로 평생을 보내고 있습니까?
종류는
나는 CQRS가 읽기와 쓰기를 분리한다는 것을 알고 있으며, 이것에 관해서는 큰 부분이다. 그러나 이것 이후의 모든 것은 나에게 불분명하다. 아주 작은 현실 세계의 예가 훌륭합니다. UserAggregat의 UpdateUserCommand는 이벤트 SQL 테이블에 일련 번호로 저장되는 이벤트 UserUpdatedEvent를 발생시킵니다. 이 부분도 있습니다. 이것은 쓰기 측입니다. 그러나 읽기면을 처리하는 방법, 사용자 테이블이 있는지 여부 (이벤트 테이블 만 있음) (있는 경우)는 이벤트 테이블에 삽입하지 않고 사용자 테이블의 사용자도 업데이트합니다 ? 그리고 읽기는 사용자 테이블에서만 작동합니다. – SharpNoiZy
MS의 샘플을 보면이 모든 것을 다룰 수 있습니다. 필요한 정보를 표시하도록 설계된 하나 이상의 사용자 테이블이있을 수 있습니다. 다른 뷰를 업데이트하는 하나 이상의 프로세서에서 이벤트를 처리 할 수 있습니다. 이러한 뷰는 일반적으로 매우 단순하며 데이터를 버리고 프로세서를 통해 다시 이벤트를 실행하여 다시 볼 수 있습니다. – GraemeMiller