델타

11

응용
I 시스템의 사용자가 오프라인 문서를 작성해야하기 때문에 현재 오프라인 기능을 AppCache을 사용하는 웹 응용 프로그램이 설치된 클라이언트 서버 데이터 동기화 기능을 향상시킬 수 있습니다. 문서는 처음에 오프라인으로 만들어지며 인터넷에 액세스 할 수있는 경우 사용자는 "동기화"를 클릭하여 문서를 서버로 보내 개정으로 저장할 수 있습니다. 더 구체적으로 말하면 앱은 변경 델타를 수정 된 정확한 필드로 저장하지 않고 전체 문서 전체를 저장합니다. 즉, "스냅 샷"문서가 저장됩니다.델타

문제
사용자는 다른 브라우저 및 장치에서 로그인하여 해당 문서에서 작업 할 수 있습니다. 그들이 "동기화"를 클릭하면 서버의 문서가 더 새로운 경우 클라이언트 버전 전체가 서버에 의해 무시됩니다. 이것은 아래 이미지에 묘사 된 하나의 주요 문제로 이어진다.

enter image description here

시나리오는 위 때문에 델타 (작은 변화) 오히려 스냅 샷 개정에 의존에 의존하지 않는 현재 구현 발생합니다.

몇 가지 질문

1) 내 연구 내가 델타 표현 될 수있는 "동기화"메커니즘 (독립적으로 적용 할 수있는 작은 변화를) 업그레이드해야 함을 나타냅니다. 이것은 건전한 접근입니까?

2) 각 델타를 독립적으로 적용해야합니까?

2) 내 연구에 따르면 개정 델타에는 시간 소인이 아닌 숫자 값이 있습니다. 이것에 대한 가치는 정확히 무엇이되어야 하는가? 수정 번호가 무엇인지에 대해 서버와 클라이언트 모두 동의하는지 어떻게 확인합니까?

스택 정보가

  • 색인화 된 로컬 문서를 저장하는 프론트 엔드 (오프라인 모드)에 각도 백엔드에서 JSONB와
  • 포스트 그레스 DB
+1

관련 : http://stackoverflow.com/questions/28797992/best-practices-in-syncing-data –

+0

힘내 이미 사용자 문서의 차이를 보여주기 위해 사용 어쩌면 어떻게 든이 일을. –

+1

Jack Wade의 답변은 모든 것을 요약 해줍니다. diff 도구/스크립트를 사용하면 델타를 얻을 수 있습니다. 대부분 델타가 충돌하지 않아야하며 (예 : 동일한 행이 편집 됨) 충돌을 해결할 수있는 최선의 방법을 찾아야합니다 (예 : 우리, 자신, 수동 병합 , 최신 승리 등). –

답변

5

은 무엇 당신의 설명이다 this question과 같은 버전 관리 문제 선택 방법은 해결 방법이 있습니다. 다음은이 문제와 다른 제품의 몇 가지 예는 다음과 같습니다

  • Google 문서 도구 : A는, A가 온라인 상태, 편집 오프라인, B 온라인 편집을하게 동기화를 만들고, 구글 문서 도구는 A와 B의 편집
  • 애플 노트 결합 : 구글 문서 도구와 동일
  • 힘내/서브 : 충돌
  • 는 Wunderlist를 해결하기 위해 사용자에게 오류를 던져 : 마지막 편집 사건에 대한

이전이 간단한 해결책이는 Wunderlist의 접근 방식을 사용하는 것입니다 덮어 씁니다 만, 유용성 문제가 발생할 수 있습니다. 사용자는 무엇을 기대합니까?

직접 귀하의 질문에 대답 : 당신이 덮어 쓰기를 원하지 않는 경우

  1. 사용자 정의 동기화 구현이 필요하다.
  2. 이것은 사용성 결정이며 사용자가 무엇을 기대합니까?
  3. 사실 수정 버전은 숫자입니다 (예 : r1, r2). 서버 동의를 얻으려면 마지막 동기화 요청의 반환 값을 변경하십시오. 매번 모델 전체를 클라이언트에 반환 할 수 있습니다 (정상적인 동기화가 발생하면 200 OK 만). 모델이 클라이언트에 반환되면 최신 모델로 클라이언트를 업데이트하십시오.

어쨌든 서버는 항상 진실의 원천이어야합니다. This post 서버/모바일 참조 무결성에 대한 좋은 조언을 제공합니다 :

은 당신이 당신의 행에 LASTUPDATE 타임 스탬프를 추적하는 데 필요한 업데이트를 추적하기 위해 생성 된 타임 스탬프를 필요 ... 삽입을 추적하려면 ... 당신이 필요로하는 삭제 추적하려면 묘비 테이블.

동기화를 수행 할 때 서버와 모바일 장치 간의 시간 오프셋을 확인해야하며 충돌을 해결할 수있는 방법이 필요합니다. 삽입물은 큰 문제는 아니지만 (충돌하지 않아야 함) 업데이트가 충돌 할 수 있으며 삭제가 업데이트와 충돌 할 수 있습니다.

+0

자세한 내용을 포함하도록 원래 답변을 수정했습니다. 백본은 여기에 도움이되지 않을 것입니다. 왜냐하면 충분히 강조되지 않았으며 개정을 처리하는 오프라인 온라인 동기화 모델이 없기 때문입니다. –

+1

@dipole_moment 이것은 버전 관리에서 고전적인 문제입니다. 나는 갱신 할 것이다. –