- 对本地核心数据存储进行更改,并保存更改。(a) 如果设备联网,则尝试将更改集发送到服务器,包括发送更改集的设备 ID。(b) 如果更改集未能到达服务器,或者设备未联网,则应用程序将更改集添加到队列中,在设备联网时再发送。
- 位于云中的服务器将接收到的特定更改集与其主数据库合并。
- 在云端服务器上合并更改集(或更改集队列)后,服务器使用某种轮询系统将所有这些更改集推送到注册了该服务器的其他设备。(我考虑使用苹果的 Push 服务,但显然根据评论,这不是一个可行的系统。)
我需要考虑的重要问题是什么?我已经查看了 REST 框架,例如 ObjectiveResource、Core Resource 和 RestfulCoreData。当然,这些都是与 Ruby on Rails 一起工作的,我没有绑定在这上面,但这是一个开始的地方。我对我的解决方案有以下主要要求:
- 任何更改都应在后台发送,而不会暂停主线程。
- 它应尽可能少地使用带宽。
我已经考虑了许多挑战:
- 确保不同设备上不同数据存储的对象ID附加在服务器上。也就是说,我会有一个包含对象ID和设备ID的表格,这些通过引用与数据库中存储的对象相关联。我会有一条记录(DatabaseId [在此表格中唯一],ObjectId[整个数据库中该项唯一],Datafield1,Datafield2),其中ObjectId字段将引用另一个表格AllObjects:(ObjectId,DeviceId,DeviceObjectId)。然后,当设备上传变更集时,它将传递本地数据存储中核心数据对象中的设备ID和objectId。然后我的云服务器将根据AllObjects表中的objectId和device Id检查,并找到要更改的初始表格中的记录。
- 所有更改都应被时间戳记,以便可以合并。
- 设备将不得不轮询服务器,而不会耗尽太多电池。
- 本地设备还需要在从服务器接收到更改时更新任何保存在内存中的内容。
这里还有其他遗漏的部分吗? 我应该查看哪些框架才能实现这一点?
- 您需要使用一个框架来帮助处理数据存储和同步问题,例如Firebase或Realm。 - 另外,您可能需要考虑如何处理离线缓存和冲突解决方案。