2017-09-08 2 views
0

CQRS 및 이벤트 소싱을 사용할 때 내역 데이터를 쿼리하는 방법. 예를 들어, 매출 보고서를 가지고있는 출퇴근 시간 기록 시스템을 구축하는 경우 각 직원의 시간, 지불 비율 및 청구 비율에 대해 쿼리해야합니다. EmployeeID, PayRate 및 EffectiveDate가있는 EMPLOYEE_PAY_RATE 테이블과 ClientID, EmployeeID, Rate 및 EffectiveDate가있는 BILL_RATE 테이블이 있습니다. 이 테이블의 유효 날짜는 기본적으로 실행 기록을 유지하므로 정확하게보고 할 수 있습니다.CQRS 및 이벤트 소싱 쿼리 내역 데이터

우리가 DDD, CQRS 및 Event Sourcing Route를 취하는 경우 어떻게 그러한 보고서를 생성합니까? 같은 방식으로 이벤트 저장소를 쿼리 할 수있는 것과는 다릅니다. Axon과 같은 프레임 워크를 살펴 보았지만보고 관점에서해야 할 일을 수행 할 수 있는지 확실하지 않습니다.

답변

2

CQRS 및 이벤트 소싱을 사용할 때 어떻게 기록 데이터를 쿼리하나요?

라이브 데이터를 쿼리하는 것과 거의 같습니다. 이벤트 기록에서 원하는보기를 만든 다음 원하는 데이터에 대한보기를 쿼리합니다.

예제를 빌리려면 EMPLOYEE_PAY_RATE 테이블과 BILL_RATE 테이블에서 뷰를 지원해야합니다. 흥미로운 일이 발생하면 적절한 테이블을 업데이트하십시오. 태다.

히스토리 보고서와 같은 대기 시간이 짧아서 중요한 이념이 아니라면 집계 자에 대한 버스 푸시 이벤트가 아닌 히스토리 집계자가 이벤트 저장소에서 이벤트를 가져 오기를 원할 수 있습니다 . 끌어 오기 방식을 사용하면 현재 위치를 추적하는 것이 훨씬 쉬워 지므로 많은 작업을 반복하지 않아도되고, 필요한 모든 이벤트를 받았는지, 주문하는지 등에 대해 걱정할 필요가 없습니다.

1

보고서는 이벤트의 또 다른 읽기 모델/투사입니다 (예 : 관련 이벤트를 수신하여 채워지는 SQL 테이블).

테이블이 크기가 클 경우 (즉, 많은 직원이있는 경우) 데이터가 비정규 화 된 상태로 유지하여 joins을 사용하지 않아야합니다. 따라서 모든 직원 및 요일 (또는 원하는 세분성)에 대해 직원 ID 및 이름을 포함하는 테이블에 행이 있고 해당 날짜의 시작 날짜와 종료 날짜 및 관련 데이터가 포함 된 다른 열, 즉 임금 비율. joins을 피하기 위해 직원 이름을 입력하고 관련 직원 이벤트 (예 : EmployeeChangedName)를 청취하여 최신 상태로 유지하십시오.

+0

그러나 여러 이벤트가 예상됩니다. 한 해 동안 직원의 청구액은 2 ~ 3 회 변경 될 수 있으며 직원은 1 ~ 2 회 급여 인상을받을 수 있습니다. 또한 보고서 계산은 작업 표 엔터티에서 시간과 날짜를 취하여 모든 데이터를 교차하여 올바르게 계산해야합니다. 여전히 가능합니까? 과거에 나는 SQL로 해왔지만 복잡하지만 빠른 쿼리 였고 메모리에있는 모든 것을 리소스 관점에서 보면 문제가있는 것 같습니다. – jkratz55

+0

@ jkratz55 여러 투영이 왜 필요합니까? 하나는 충분 해 보입니다. –

+0

CQRS와 Event Sourcing을 한번도 해 본 적이없는 개념을 이해하지 못했지만 현재의 구식 시스템에서는 EMPLOYEE, TIMESHEET, EMPLOYEE_PAY_RATE, CLIENT_BILL_RATE 및 PROJECT_ASSIGNMENT 테이블을 함께 결합하여 보고서를 생성합니다. 작업 표에는 주어진 날짜와 프로젝트에 대한 특정 직원의 근무 시간이 있습니다. Bill Rate 및 Pay Rate 테이블에는 유효한 시작 날짜 열이 있으므로 모든 기록 데이터가 있습니다. 이벤트 저장소를 사용하고 이벤트를 재생하는 방법을 시각화 할 수 없다고 생각합니다. – jkratz55