가장 먼저 결정해야 할 것은 변경 사항이 충돌하는 경우 어느 쪽이 "권한"으로 간주되는지에 대한 일반적인 정책입니다.
즉, 레코드 # 125가 1 월 5 일 오후 10시에 서버에서 변경되고 동일한 레코드가 1 월 5 일 오후 11시에 전화기 중 하나 (클라이언트 A라고 부르겠습니다)에서 변경되었다고 가정합니다. 마지막 동기화는 1 월 3 일이었습니다. 그런 다음 사용자는 1 월 8 일에 다시 연결합니다.
변경해야 할 사항을 식별하는 것은 클라이언트와 서버 모두 마지막 동기화 날짜를 알고 있으므로 마지막 동기화 이후에 생성되거나 업데이트 된 모든 항목 (아래 참조)을 조정해야 한다는 점에서 "쉽습니다" .
따라서 변경된 유일한 레코드가 # 125라고 가정합니다. 둘 중 하나가 자동으로 "승리"하고 다른 버전을 덮어 쓰도록 결정하거나 사용자가 올바른 버전 (서버 또는 클라이언트)을 결정하고 다른 버전을 덮어 쓸 수있는 조정 단계를 지원해야합니다.
이 결정은 매우 중요하며 클라이언트의 "역할"에 가중치를 부여해야합니다. 특히 클라이언트와 서버 사이에 잠재적 충돌이있을 때뿐만 아니라 다른 클라이언트가 동일한 레코드를 변경할 수있는 경우에 더욱 그렇습니다.
[# 125가 두 번째 클라이언트 (클라이언트 B)에 의해 수정 될 수 있다고 가정하면 아직 동기화되지 않은 클라이언트 B가 동일한 레코드의 또 다른 버전을 제공하여 이전 충돌 해결에 대한 의구심을 갖게 될 가능성이 있습니다.]
위의 " 생성 또는 업데이트 된 "요점 과 관련하여 ... 레코드가 클라이언트 중 하나에서 생성 된 경우 레코드를 올바르게 식별 할 수있는 방법은 무엇입니까 (문제 도메인에서 의미가 있다고 가정)? 앱이 비즈니스 연락처 목록을 관리한다고 가정 해 보겠습니다. 클라이언트 A가 새로 생성 된 John Smith를 추가해야한다고 말하고 서버에 클라이언트 D가 어제 생성 한 John Smith가있는 경우 ... 두 레코드가 서로 다른 사람이 아님을 확신 할 수 없기 때문에 생성합니까? 사용자에게이 충돌도 조정하도록 요청 하시겠습니까?
클라이언트가 데이터 하위 집합의 "소유권"을 가지고 있습니까? 즉, 클라이언트 B가 영역 # 5의 데이터에 대한 "권한"으로 설정된 경우 클라이언트 A가 영역 # 5의 레코드를 수정 / 생성 할 수 있습니까? (이렇게하면 갈등 해결이 더 쉬워 지지만 상황에 따라 실행 불가능할 수 있습니다).
요약하면 주요 문제는 다음과 같습니다.
- 분리 된 클라이언트가 새 레코드를 만들기 전에 서버에 액세스하지 않았을 수 있음을 고려하여 "ID"를 정의하는 방법입니다.
- 이전 상황은 솔루션이 아무리 정교하더라도 데이터 중복을 초래할 수 있으므로 이러한 문제를 정기적으로 해결하는 방법과 고객에게 "레코드 # 675"로 간주 한 내용이 실제로 병합 / 대체되었음을 클라이언트에게 알리는 방법을 예측해야합니다. 기록 # 543
- 충돌을 법정 화폐 로 해결할지 (예 : "마지막 동기화 이후에 전자가 업데이트 된 경우 서버 버전이 항상 클라이언트보다 우선합니다") 또는 수동 개입 으로 해결할지 결정합니다.
- fiat의 경우 , 특히 클라이언트가 우선권을 갖는다 고 결정하는 경우, 더 많은 변경 사항이있을 수있는 아직 동기화되지 않은 다른 클라이언트를 처리하는 방법도주의해야합니다.
- 이전 항목은 데이터의 세분성을 고려하지 않았습니다 (설명을 더 간단하게 만들기 위해). 내 예에서와 같이 "기록"수준에서 추론하는 대신 필드 수준에서 변경 내용을 기록하는 것이 더 적절할 수 있습니다. 또는 한 번에 일련의 레코드 (예 : 개인 레코드 + 주소 레코드 + 연락처 레코드)를 작업하여 집계를 일종의 "메타 레코드"로 취급합니다.
서지:
물론 이에 대한 자세한 내용은 Wikipedia에서 확인하십시오 .
Vdirsyncer 작성자의 간단한 동기화 알고리즘
데이터 동기화에 대한 OBJC 기사
SyncML® : 모바일 데이터 동기화 및 관리 (Book on O'Reilly Safari)
충돌없는 복제 데이터 유형
낙관적 복제 YASUSHI SAITO (HP Laboratories) 및 MARC SHAPIRO (Microsoft Research Ltd.)- ACM Computing Surveys, Vol. V, No. N, 3 2005.
Alexander Traud, Juergen Nagler-Ihlein, Frank Kargl 및 Michael Weber. 2008. SyncML 재사용을 통한 주기적 데이터 동기화. The Ninth International Conference on Mobile Data Management (MDM '08)에서. IEEE Computer Society, 미국 워싱턴 DC, 165-172. DOI = 10.1109 / MDM.2008.10 http://dx.doi.org/10.1109/MDM.2008.10
Lam, F., Lam, N. 및 Wong, R. 2002. 모바일 XML 데이터를위한 효율적인 동기화. 정보 및 지식 관리에 관한 제 11 차 국제 회의 회보 (미국 버지니아 주 맥린, 2002 년 11 월 4 일-9 일). CIKM '02. ACM, 뉴욕, NY, 153-160. DOI = http://doi.acm.org/10.1145/584792.584820
Cunha, PR 및 Maibaum, TS 1981. Resource & equil; 추상 데이터 유형 + 동기화-메시지 지향 프로그래밍 방법론-. 소프트웨어 엔지니어링에 관한 제 5 회 국제 컨퍼런스 (미국 캘리포니아 샌디에고, 1981 년 3 월 9 일-12 일)에서. 소프트웨어 공학에 관한 국제 회의. IEEE Press, Piscataway, NJ, 263-272.
(마지막 세 개는 ACM 디지털 라이브러리에서 가져온 것으로 회원인지 또는 다른 채널을 통해 얻을 수 있는지 알 수 없습니다.)
로부터 Dr.Dobbs의 사이트 :
- SQL Server CE 및 SQL RDA로 앱 만들기 by Bill Wagner 2004 년 5 월 19 일 (데스크톱 및 모바일 PC 용 애플리케이션 설계 모범 사례-Windows / .NET)
arxiv.org에서 :
- 충돌없는 복제 된 JSON 데이터 유형 -이 문서는 JSON CRDT 구현을 설명합니다 (충돌없는 복제 된 데이터 유형-CRDT는 동시 수정을 지원하고 이러한 동시 업데이트의 수렴을 보장하는 데이터 구조 제품군입니다).