2012-05-31 2 views
0

CQRS 패턴을 구현하려고했습니다. 읽기 데이터베이스를 업데이트하는 프로세스의 경우 Windows 서비스를 사용하거나 업데이트 데이터베이스에서 새 레코드를 만들 때보기를 업데이트하는 것이 가장 좋습니다. 트리거 또는 일부 다른 프로세스를 사용하는 것이 가장 좋습니다. 나는 몇 가지 접근법을 보았고 이것을 달성하기위한 최선의 접근 방식이 무엇인지 내 마음을 다지지 못했습니다.CQRS 디자인 패턴 업데이트

감사합니다.

+0

시스템에서 CQRS의 목적은 무엇입니까? –

답변

1

개인적으로 나는 이러한 종류의 문제를 해결하기 위해 메시징을 사용하는 것을 좋아합니다. 가 처리 될 때

당신이 명령은 이벤트 발생하고 이벤트를 게시 할 메시징을 사용하는 경우 하나 개 이상의 다운 스트림 읽기 서비스는 이벤트를 구독하고 읽기 모델을 업데이트를 처리 할 수 ​​있습니다.

메시징이 경우에 좋은 이유는 당신이 쓰기를 분리하고 서로면을 읽을 수 있다는 것입니다. 또한 필요에 따라 여러 구독자를 쉽게 가질 수 있습니다. 또한 MSMQ와 같은 영구 대기열 시스템을 사용하여 메시징을 사용하면 실패한 메시지를 다시 시도 할 수 있습니다. 또한 읽은 모델을 오프라인으로 가져올 수 있다는 것을 의미합니다 (업데이트 등). 그러면 다시 올라와서 큐에있는 모든 이벤트를 처리 할 수 ​​있습니다.

나는 관계형 데이터베이스에서 트리거의 어떤 친구는 아니지만, 나는 테스트 꽤 열심히해야합니다 상상한다. 그리고 트리거는 속하지 않는 라우팅 논리를 도입합니다. 트리거 동작이 실패하면 전체 쓰기 트랜잭션이 롤백 될 수도 있습니까? 방아쇠는 아마 가장 유익한 해결책 일 것입니다.

0

최종 일관성과 관련하여 응용 프로그램이 얼마나 관대해야하는지에 따라 다릅니다. 앱이 읽기 데이터를 5 분 오래된되고 아무 문제가없는 경우

, 모든 쓰기 데이터 변경에 따라 비정규 할 필요가 없습니다. 이 경우, n 분마다 실행되거나 CPU 소비가 특정 임계 값 이하인 경우에만 실행되는 백그라운드 서비스가 좋은 해결책이 될 수 있습니다.

상태가 자주 바뀌는 경우, 기기 모니터링, 증권 거래 데이터 등 앱이 시간에 민감한 경우 가능한 한 지연을 줄이고 즉, 진행 중이거나 적어도 실시간으로 비정규 화합니다. 따라서이 경우 비정규 화기를 끊임없이 실행되는 프로세스에서 실행하거나 코드에서 이벤트 핸들러 체인에 직접 추가 할 수 있습니다.

전화.