我一直在研究一种在多台设备(如iPad或Mac)之间同步iPhone应用程序中存储的核心数据的方法.iOS上用于核心数据的同步框架并不多(如果有的话).然而,我一直在思考以下概念:
- 对本地核心数据存储进行更改,并保存更改.(a) 如果设备处于联机状态,它会try 将变更集发送到服务器,包括发送变更集的设备的设备ID.(b) 如果更改集未到达服务器,或者设备未联机,应用程序会将更改集添加到队列中,以便在更改集联机时发送.
- 位于云中的服务器将其接收到的特定更改集与其主数据库合并.
- 在云服务器上合并变更集(或变更集队列)之后,服务器使用某种轮询系统将所有这些变更集推送到向服务器注册的其他设备.(我想使用苹果的推送服务,但根据 comments ,显然这不是一个可行的系统.)
我需要考虑什么新奇的东西吗?我已经研究了REST框架,比如ObjectiveResource、Core Resource和RestfulCoreData.当然,这些都是与Ruby on Rails一起工作的,我不喜欢Ruby on Rails,但这是一个开始.我对解决方案的主要要求是:
- 任何更改都应该在后台发送,而不暂停主线程.
- 它应该使用尽可能少的带宽.
我已经考虑了一些挑战:
- 确保不同设备上不同数据存储的对象ID已连接到服务器上.也就是说,我将有一个对象ID和设备ID的表,它们通过对数据库中存储的对象的引用进行绑定.我将有一条记录(DatabaseId[此表唯一]、ObjectId[整个数据库中的项唯一]、Datafield1、Datafield2),ObjectId字段将引用另一个表AllObjects:(ObjectId、DeviceId、DeviceObjectId).然后,当设备向上推一个变更集时,它将从本地数据存储中的核心数据对象传递设备Id和objectId.然后,我的云服务器将对照AllObjects表中的objectId和设备Id进行判断,并在初始表中找到要更改的记录.
- 所有更改都应该加上时间戳,以便可以合并.
- 该设备将不得不轮询服务器,而不会消耗太多电池.
- 如果/当从服务器接收到更改时,本地设备还需要更新保存在存储器中的任何内容.
我还遗漏了什么吗?要实现这一点,我应该考虑哪些类型的框架?