2017-09-11 1 views
0

저는 SQL Server 2016을 사용하여 조세 처리 회사에서 근무합니다. 우리는 수백만 세금 정보 반환을 처리하고 동시 멀티 스레딩 병렬 처리 시스템을 설정합니다.이벤트 소싱/CQRS 클러스터 된 인덱스 및 분할

  1. 병렬 처리 작성 이벤트 저장소의 경우, 클러스터 된 색인은 어떤 값이어야합니까? UniqueIdentifier Guid 또는 (Uniqueidentifier guid에서 Ncx와 Identity (1,1)의 클러스터 된 인덱스) 또는 클러스터 된 인덱스가 없습니까 (힙 사용)?

  2. 일반적으로 이벤트 저장소 테이블 쓰기를 파티션 할 것을 권장합니까?

  3. 우리는 쿼리 모델을 업데이트 할 때 병렬 처리를 사용하여 읽기 모델을 업데이트해야합니까? 아니면 단일 스트림 업데이트를 수행해야합니까?

  4. 또한 클러스터 된 인덱스를 UniqueIdentifierGuid 또는 (UniqueIDifier GUID에서 Ncx를 사용하는 Identity (1,1)의 클러스터 된 인덱스) 읽기 이벤트 모델에 적용해야합니까?

  5. 우리는 읽기 모델 테이블이나 다른 방법을 파티션해야합니까?

uniqueidentifierguids의 인덱스 나쁜 클러스터 된 인덱스가있는 일반적인 규칙이있다, 대규모 페이지 분열, 느린 IO 쓰기, 대형 디스크 공간을 발생합니다. https://blogs.msdn.microsoft.com/sqlserverfaq/2010/05/27/guid-vs-int-debate/

그러나 식별 (1,1) 정수 열에 대한 색인은 래치 경합을 야기하며 마지막 페이지는 병렬 처리에서 "핫 스폿"을 삽입합니다. http://www.sqlpassion.at/archive/2014/04/15/an-ever-increasing-clustered-key-value-doesnt-scale/

답변

0

개별적인 요구 사항은 고유 시스템의 아키텍처에 따라 달라집니다. 일반적으로 테스트, 측정 및 프로파일 링을 통해 병목 현상이 무엇인지 결정할 수 있어야합니다.

예를 들어, 한 번에 병렬로 작성하는 노드의 수와 원하는 순간에 필요한 처리량이 있습니다.

  • 당신은 아마 GUID 아이디 (색인) 및 클러스터 된 인덱스에 대한 두 번째 열을 원하는 :

    다음은 시작하는 두 가지 도움말입니다. ID (연속 번호) 열을 내 Clusered Index로 사용합니다. 데이터베이스에 생성 되었기 때문입니다. 일반적으로 병렬로 디스크에 물리적으로 쓰는 일이 없으므로 (병렬로 시도하더라도) 빠르고 간단하게 작성하고 프로파일 링하십시오.

  • "모델 읽기"의 경우 일반적으로 일련의 이벤트를 처리해야합니다. 여러 개의 "모델 읽기"가 가능하며 데이터가 분리되어 있다면 병렬로 작성할 수 있습니다.

저는 EventSourcing에 얼마나 익숙한 지 잘 모르지만이 두 리소스를 충분히 추천 할 수는 없습니다.

http://docs.geteventstore.com/introduction/4.0.2/event-sourcing-basics/ https://leanpub.com/esversioning

+0

안녕 다니엘, 대부분의 대답은 한 부분에서, 좋아 보인다 , 나는 테이블에 병렬로 삽입, 멀티 스레딩을 작성합니다 prob는, 그래서 '병렬로 디스크에 기록'될 것이다 – AppleBook89

+0

@BlueCar 파일에 많은 쓰레드를 쓸 수는 있지만, 드라이브가 동시 쓰기를 지원하지 않는다면, 나는 그걸 알지 못한다. 병렬로 삽입하는 것은 직렬 쓰기보다 빠르지 않을 것이다. –

관련 문제