Postgres 9.3 DB (마스터)의 미러 인 iOS SQLite db가 있습니다. 인보이스 발행 앱입니다.두 데이터베이스 소스를 동기화하는 알고리즘?
이 응용 프로그램에는 몇 가지 SQLite DB가 업데이트되어 결국 마스터 DB와 동기화됩니다 (몇 시간 후 가끔). 주요 액티비티는 송장 헤더 - 송장 행 - 지급 관계입니다. 송장 생성입니다. 가장 최근의 데이터가 가장 선호되는 데이터이며, 각 장치가 자체 송장 세트를 생성하기 때문에 충돌 해결에 신경 쓰지 않으며 두 클라이언트가 동일한 레코드를 동시에 편집하는 경우는 거의 없습니다.
나는 거의 효과가 있지만 가장자리의 경우 테스트하기가 어렵다. 또한이 문제는 이미 해결 된 것으로 판단됩니다. 또한, 나는 수십 명의 마스터들과 이야기하는 수백 명의 고객을 테스트 할 수있는 테스트 스위트를 만들고 싶다. 즉석에서 일하는 것이 좋은 생각이 아니다.
하면 GUID를하고 버전 필드 (자동 증가 (Autoinc), int)에 그 기록의 마지막 버전을 만듭니다
https://gist.github.com/mamcx/8958295
내 코드는 다음을 수행합니다
이
내가 지금 가지고있는 것입니다 표. 각 변경 사항은 버전을 증가시킵니다. 삭제는 모두 논리적입니다. 이것은 두 개의 DB에 :INSERT INTO "문서"( "버전" "CHANGEDATE" 가 "isDeleted를" "ID"
) VALUES ('2014- 02-11 16 : 16 : 49.775791-05 ' '0 ' '0771bc29-ac5e-49a1-b5d7-3e4f7dccd03a '
);
클라이언트의 각 테이블에 대한 버전을 저장하십시오. 클라이언트 버전이있는 테이블을 요청하면 서버는 레코드> 버전을 반환 한 다음 로컬 DB와 병합합니다.
변경 사항은 클라이언트에서 수행됩니다. 서버의 각 행에 대해 기록 된 마지막 버전과 함께 서버에 레코드를 보냅니다. 레코드를 업데이트하고 각각에 대한 버전을 반환하십시오.
그러나 서버에서 클라이언트보다 많은 행을 얻거나 두 개의 다른 장치가 프로세스의 마지막에 데이터를 교환 할 때 데이터가 동일하지 않은 경우가 있습니다. 프로세스는 사용자 개입없이 백그라운드에서 진행됩니다.
여기 실제 _question_은 어디에 있습니까? –
동기화하는 방법을 설명하는 알고리즘이있는 경우 – mamcx