我一直在研究一种在多个设备(例如iPad或Mac)之间同步iPhone应用程序中存储的核心数据的方法。没有太多(如果有的话)同步框架可用于iOS上的Core Data。但是,我一直在思考以下概念:
- 对本地核心数据存储进行更改,并保存更改。(a)如果设备在线,它将尝试将更改集发送到服务器,包括发送更改集的设备的设备ID。(b)如果变更集未到达服务器,或者设备不在线,则应用会将变更集添加到队列中,以便在其联机时发送。
- 位于云中的服务器将接收到的特定更改集与其主数据库合并。
- 在云服务器上合并变更集(或变更集队列)后,服务器会使用某种轮询系统将所有这些变更集推送到在服务器上注册的其他设备。(我曾考虑使用Apple的Push服务,但显然根据评论,这不是一个可行的系统。)
我有什么想想的吗?我研究了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,并在初始表中找到要更改的记录。
- 所有更改都应加上时间戳,以便可以合并。
- 设备将必须轮询服务器,而又不会消耗过多的电池。
- 如果/从服务器收到更改,则本地设备还需要更新内存中保存的所有内容。
我还有其他想念的地方吗?我应该考虑采用哪种框架来实现这一目标?