2012-02-09 5 views
1

CQRS 및 Event-Sourcing (Event-Store)을 계층 적 트리와 함께 사용하는 문제를 해결 한 사람이 있는지 궁금합니다.CQRS/EventStore - 계층 적 트리 모델링 및 저장

우리는 1000s의 노드와 하위 노드를 나무에 갖고 싶습니다. 이벤트 소싱을 통한 CQRS가이 문제와 잘 맞지 않을지 걱정됩니다. 이벤트 저장소 측에서 사용할 수있는 스냅 샷을 아직 보지 않았습니다.

또한 DDD 관점에서 볼 때 모델에서 복합 디자인 패턴으로 모델링하거나 데이터가 내 읽기 모델 (이 경우 SQL 서버)에 저장되는 방식을보다 잘 반영해야합니다.

+0

이러한 노드 간에는 어떤 불변 변수/일관성 규칙이 있습니까? 노드는 무엇을 나타 냅니까? 이진 나무의 영역에서 일하십니까? –

+0

가장 좋은 방법은 사용자가 동영상을 업로드 할 수있게 해주는 itunes 유형의 트리 구조입니다. 많은 하위 폴더 (아티스트 이름/앨범 등)가있을 수 있습니다. 확실히 이진 트리의 영역에 없습니다. 우리는 사용자가 폴더를 삭제 (비디오 삭제), 폴더 간 비디오 이동, 비디오 삭제 및 한 폴더에서 다른 폴더로 비디오 복사를 허용 할 수 있습니다. –

+0

나는 트리를 내려 가서 각 하위 트리를 게으른로드해야하고 사용자가 하위 트리를 선택하면 그 자식을 게으른로드합니다. 예를 들어 구조와 같은 Windows 탐색기 트리를 사용하여 수행 할 수있는 것 이외의 다른 요구 사항은 볼 수 없습니다. –

답변

1

저는 여러분의 어플리케이션에 CQRS가 실제로 도움이되지 않는다는 의견에 동의하는 경향이 있습니다. 그것은 적합하지 않습니다.

다른 사람의 이익을 위해 원래 질문에 대답하기 위해 기본적으로 계층 적 트리가있는 CQRS & EventSourcing을 사용하는 프로비저닝을위한 응용 프로그램을 작성했습니다. 나는 계층 구조를 처리하기 위해 그래프 데이터베이스 [Neo4J]를 사용하고 있습니다 ... [6 - 8 개의 다른 레벨의 많은 그룹].

도메인은 관계를 아래쪽으로 반영하고 Neo4J는 두 방향을 모두 처리합니다. 그렇게하면 eventStore가 매우 신속하게 업데이트 될 수 있으며, 접근 가능한 노드 목록을 만들기 위해 트리/그래프를 탐색해야하는 핸들러는 Graphing Database를 사용할 수 있습니다.

CQRS는 실제로이 응용 프로그램에 매우 잘 어울립니다. 실제로이 접근 방식에 전혀 뒤떨어지지 않았다는 사실에 놀랐습니다. 모두는 이것이 더 전통적인 CRUD 접근법에 대한 훨씬 더 나은 대안이라는 것에 동의하는 것처럼 보였습니다.

교체 할 시스템이 SQL에서 이러한 관계를 저장하므로, 성능 문제가 심각합니다. 이것은 극적으로 나아질 것입니다.

+0

다니엘, 당신의 사건은 어떻게 생겼습니까? –

+0

여기에는 그 중 상당수가 도메인 특유의 것입니다. "StudentAdded", "StudentEnrolled", "UserChangedSchools"등의 항목이 있습니다. 확실하게 당신이 무엇을 찾고 있는지 확실하지 않습니다. –

+0

그래, 내 질문에 대한 답변. 감사. –