나는 iPhone 응용 프로그램에 저장된 핵심 데이터를 iPad 또는 Mac과 같은 여러 장치간에 동기화하는 방법을 연구하고 있습니다. iOS의 Core Data와 함께 사용할 동기화 프레임 워크가 많지 않습니다 (있는 경우). 그러나 나는 다음 개념에 대해 생각하고있다.
- 로컬 코어 데이터 저장소가 변경되고 변경 사항이 저장됩니다. (a) 장치가 온라인 상태 인 경우 변경 세트를 보낸 장치의 장치 ID를 포함하여 변경 세트를 서버로 보내려고합니다. (b) 변경 세트가 서버에 도달하지 않거나 장치가 온라인이 아닌 경우 앱은 변경 세트를 대기열에 추가하여 온라인 상태가 될 때 전송합니다.
- 클라우드에있는 서버는 수신 한 특정 변경 세트를 마스터 데이터베이스와 병합합니다.
- 클라우드 서버에서 변경 세트 (또는 변경 세트 큐)를 병합 한 후 서버는 이러한 변경 세트를 모두 일종의 폴링 시스템을 사용하여 서버에 등록 된 다른 장치로 푸시합니다. (나는 Apple의 Push 서비스를 사용하려고 생각했지만 분명히 의견에 따르면 이것은 실행 가능한 시스템이 아닙니다.)
내가 생각해야 할 멋진 것이 있습니까? ObjectiveResource , Core Resource 및 RestfulCoreData 와 같은 REST 프레임 워크를 살펴 보았습니다 . 물론, 이것들은 모두 Ruby on Rails와 함께 작동하지만, 나는 묶이지 않았지만 시작해야 할 곳입니다. 내 솔루션에 필요한 주요 요구 사항은 다음과 같습니다.
- 메인 스레드를 일시 중지하지 않고 변경 사항을 백그라운드로 보내야합니다.
- 가능한 적은 대역폭을 사용해야합니다.
나는 많은 도전에 대해 생각했다 :
- 다른 장치의 다른 데이터 저장소에 대한 오브젝트 ID가 서버에 연결되어 있는지 확인하십시오. 즉, 데이터베이스에 저장된 개체에 대한 참조를 통해 연결된 개체 ID 및 장치 ID 테이블을 갖게됩니다. 레코드 (DatabaseId [이 테이블에 고유], ObjectId [전체 데이터베이스의 항목에 고유], Datafield1, Datafield2)를 가지며 ObjectId 필드는 다른 테이블 인 AllObjects : (ObjectId, DeviceId, DeviceObjectId)를 참조합니다. 그런 다음 장치가 변경 세트를 푸시하면 로컬 데이터 저장소의 핵심 데이터 개체에서 장치 ID와 objectId를 전달합니다. 그런 다음 내 클라우드 서버는 AllObjects 테이블에서 objectId 및 장치 ID를 확인하고 초기 테이블에서 변경할 레코드를 찾습니다.
- 모든 변경 사항은 타임 스탬프되어야 병합 할 수 있습니다.
- 장치는 너무 많은 배터리를 사용하지 않고 서버를 폴링해야합니다.
- 로컬 장치는 또한 서버에서 변경 사항을 수신 할 때 메모리에 보관 된 내용을 업데이트해야합니다.
여기서 누락 된 것이 있습니까? 이를 가능하게하기 위해 어떤 종류의 프레임 워크를 살펴 봐야합니까?