Couchbase Mobile 기능 설명: 데이터 동기화에서의 충돌 해결 ③ (Sync Gateway의 충돌 해결)

개시하다
본문은 상술한 보도의 속편이다.여기서 Sync Gateway의 경쟁을 해결하는 데 중점을 두겠습니다.
Sync Gateway(2.0 이상)는 Couhbase Lite와 동기화할 때 무충돌(무충돌) 모드로 실행(REST API 클라이언트를 사용할 때 충돌하지 않음, 즉 경쟁 문서를 저장하는 모드를 선택할 수 있으나 본문은 생략됨)
Couchbase Lite와 Sync Gateway를 동기화하는 방법은 두 가지 방향이 있는데 그것이 바로 Couchbase Lite의 변경 사항을 Couchbase 서버의'밀기'와 Couchbase 서버의 변경 사항을 Couchbase Lite의'당기기'에 반영하는 것이다.다음은 각자의 상황에 대해 설명한다.
푸시 응용
다음 그림은 두 클라이언트가 문서를 같은 개정으로 수정하도록 추진하는 방안을 보여 줍니다.

이 모드에서 Sync Gateway는 충돌을 일으키는 수정을 거부하고 HTTP 409 오류를 반환합니다.이것은 데이터베이스에 충돌하는 수정판이 없도록 확보한다.충돌은 제출 응용 과정에서 고객이 처리한다.
  • 고객은 수정 버전의 수정 사항을 Sync Gateway로 밀어 넣습니다.
  • Sync Gateway에서 수신된 개정이 서버에 현재 저장된 개정과 충돌하는 것을 감지하였습니다(즉, 수신된 개정이 서버의 최신 개정이 아님)
  • Sync Gateway가 409 오류로 수정을 거부했습니다.Couchbase Lite는 로그에 오류를 기록하는 것 외에는 아무것도 하지 않습니다.이후 복제 과정에서 충돌을 해결한다.
  • 복제하다
    합병 응용 과정에서 고객이 충돌을 감지하면 충돌은 다음과 같은 기준을 사용하여 결정적으로 해결된다
  • 삭제는 항상 승리합니다.
  • 최신 수정판(즉 가장 큰'revID') 또는 최신 수정(즉 가장 큰'generation ID')이 우선입니다.

  • 서버 spoke가 승자가 되는 경우
  • 고객이 Sync Gateway에서 수정 버전 변경을 종료
  • 클라이언트가 수신된 개정이 현재 저장된 개정과 충돌하는 것을 감지했다(즉, 수신된 개정과 저장된 개정이 공유된 부모)
  • 클라이언트 호출은 현재 저장된 수정판과 서버 수정판 사이의 승리자의 충돌 해결 함수를 확인하는 데 사용됩니다.
  • 서버로부터 온 편지 수정판(Rev2-B)이 로컬 수정판(Rev2-A)보다 새롭기 때문에 서버 수정판을 승리자로 선택한다.이 또한 서버의 개정판이 도안석 개정판(문서 삭제)인 경우에도 적용된다.
  • 서버 브랜치가 로컬 수정 트리에 접목되고 로컬 브랜치가 통공됨
  • 이후 변경이 서버로 미뤄지면 충돌이 발생하지 않고 서버와 클라이언트가 동기화됩니다.
  • 현지 지점이 승자가 되는 경우
  • 고객이 Sync Gateway에서 수정 버전 변경을 종료
  • 클라이언트가 수신된 개정이 현재 저장된 개정과 충돌하는 것을 감지했다(즉, 수신된 개정과 저장된 개정이 공유된 부모)
  • 클라이언트 호출은 현재 저장된 수정판과 서버 수정판 사이의 승리자의 충돌 해결 함수를 확인하는 데 사용됩니다.
  • 로컬 버전(Rev2-B)이 수신 서버 버전(Rev2-A)보다 새롭기 때문에 로컬 버전이 승리자로 선정되었다.이 옵션은 로컬 분기의 개정 버전이 삭제된 경우에도 적용됩니다.
  • 서버 브랜치(Rev2-B)가 로컬 개정 트리에 이식되면서 승리의 개정 내용에 대응하는 새 개정(Rev3)이 추가됐다.
  • 이후 변경이 서버로 미뤄지면 충돌이 발생하지 않고 서버와 클라이언트가 동기화됩니다.
  • 동기화 모드 선택 시 고려 사항
    위에서 설명한 대로 복제 과정에서 충돌은 Couchbase Lite를 통해 해결됩니다.복제품이 추진체로만 구성될 경우 Couchbase Lite의 데이터 뷰는 Sync Gateway의 뷰와 다르다는 뜻이다.따라서 충돌이 예상되어 충돌을 해결해야 할 경우 충돌 없음 모드에서 사용할 경우 쿠키베이스 리플리케이터를 밀착 모드로 구성해야 합니다.
    Sync Gateway 구성
    Sync Gateway의 충돌 없음 모드는 Sync Gateway로 구성된 파일allow_conflicts 속성으로 구성됩니다.충돌 없음 모드를 활성화하려면 이 속성을 "false"로 설정합니다.
    그러나 이 속성 구성과 관계없이 Couchbase Lite 2입니다.0은(는) 고객과 동기화할 때 Sync Gateway와 충돌하는 수정 버전을 추가하지 않도록 주의하십시오."allow_conflicts"구성은 REST API 클라이언트(2.0 이외의 고객에게만 적용됩니다.다음 표는 그 관계를 정리한 표입니다.
    allow_conflicts_configuration

    충돌 해결 모델이 데이터베이스 크기에 미치는 영향
    충돌 해결이 데이터베이스 크기에 미치는 영향에 대해서는 소개된 데이터베이스 크기 관리에 관한 블로그를 참고하십시오.
    충돌 허용 모드
    충돌을 허용하는 시스템에서 충돌하는 개정이 커지면 개정 트리의 크기가 커지고 데이터베이스의 크기에 영향을 줍니다.따라서 분쟁을 제때에 해결하는 것이 중요하다.
    Sync Gateway에는 개정 트리 크기를 결정하는 속성revs_limit이 있습니다.revs_limit 속성의 기본값은 1000이며 Sync Gateway에 마지막 1000 개정에 해당하는 메타데이터를 저장할 수 있음을 의미합니다.설정revs_limit에서 큰 값으로 설정하면 데이터베이스 크기에 불리한 영향을 미칠 수 있습니다.다른 한편, 충돌 해결을 처리하기 위해서는 낡은 수정판에 대응하는 메타데이터를 유지하는 것이 중요하다.따라서 revs_limit를 너무 낮게 설정하지 않는 것이 중요하다.따라서 revs_limit의 최소 허용치는 20이다.
    비충돌 모드
    충돌 없음 모드에서는 이전 버전에 해당하는 메타데이터를 실제로 저장할 필요가 없습니다.이것은 revs_limit의 값이 사실상 1일 수도 있다는 것을 의미한다.즉, 최신 활동의 개정만 저장됩니다.이것은 데이터베이스 크기를 크게 절약할 것이다.
    참조 정보

    좋은 웹페이지 즐겨찾기