CQRS에 대한 실제 경험이 없으며 이것이이 질문의 기초입니다.CQRS 및 이벤트 소싱과 관계형 데이터베이스 디자인
배경 : 새로운 핵심 요구 사항이 관리자를 허용하고 어디는 시스템을 구축하고이 "재생"사용자 작업 (관리자가 특정 시점에 시스템에 일어난 모든 행동을 단계별로 할 수있게하려면) . 이것에 대한주의 사항은 회사가 이미 변경되지 않은 현재 SQL db로부터 생성 된 보고서를 가지고 있기 (적어도이 새로운 요구 사항과 병행하지 않음) 레코드 저장소가 SQL이 될 것입니다. SQL의 변경 데이터 캡처에 액세스 할 수 없으므로 트리거가있는 많은 기록 테이블을 만들면 유지 관리가 매우 어려워 지므로 가능한 경우이를 피하고 싶습니다. 마지막으로 SQL (변경/추가 필드 변경)을 변경하는 버전 관리주기를 거치는 잠재적 인 (현재는 아닙니다) 많은 데이터 진입 점이 있으므로 SQL에서 변경 내용 추적을 구현하려고하면 이전 버전의 데이터 (악몽)를 처리하는 테이블을 유지 관리해야합니다.
잠재적 인 솔루션 내가되는 NoSQL이 (푸른 DocumentDB)는 데이터 저장을 처리 (기록) 다음 명령 핸들러 관련 데이터와 현재의 SQL (푸른 SQL)을 업데이트 처리하도록 사용하는 방법에 대해 생각하고 조회 할 (읽기) . 그렇게하면 감사 추적이 생성되고 "재생"이라는 아이디어가 제공되는 현재 백엔드 기능을 방해하지 않으면 서 처리 될 수 있습니다.
이 접근법은 요구 사항을 처리하고주의 사항을 만족시킵니다. 나는이 "재생"기능이 필요한 부분만을 위해 전체 앱에 CQRS를 사용하지 않을 것입니다. 나는 Client를 따라 실패 점을 완화해야 함을 안다. -> DocumentDB에 쓰기 -> 성공/실패로 사용자 응답 -> 성공시 SQL에 쓰기 - DocumentDB 경로에 쓰기. 초보자 CQRS 눈은 이유를 볼 수 없다. 왜 이것이 이것을 처리하는 좋은 방법이 아닌지.
모든 조언을 주시면 감사하겠습니다.
[변경 피드] (https://docs.microsoft.com/en-us/azure/documentdb/documentdb-change-feed)를 사용하여 변경 사항을 수신하고 SQL 데이터베이스에 적용 할 수 없습니까? –
변경 피드는 정확히 내가 실제로 찾고있는 것 같습니다. Dogu의 대답은 내 문제를 해결할 아키텍처를보다 철저하게 다룬다 고 생각합니다. ChangeFeed를 "메시지 대기열"로 사용하고 해당 대기열을 모니터링하고 그에 따라 트랜잭션을 처리하는 작업자 역할을 사용합니다. – JakeHova