Core data 通过解析进行核心数据同步

Core data 通过解析进行核心数据同步,core-data,parse-platform,dropbox,sync,ensembles,Core Data,Parse Platform,Dropbox,Sync,Ensembles,我对开发一个库感兴趣,该库将通过Parse mobile后端跨设备同步核心数据模型。我想镜像iCloud core data sync试图提供的功能 为什么不使用iCloud或iCloud? 我目前正在一个生产应用程序中使用iCloud core data sync,它是。我还想提供独立于苹果ID的认证,这也是我想离开iCloud的另一个原因。就合奏而言,我不确定这是否仍然适用于Dropbox。 我还没有开始开发图书馆。我正在寻找关于我的计划的反馈,该计划概述如下。这项设计是基于 图书馆的总体设

我对开发一个库感兴趣,该库将通过Parse mobile后端跨设备同步核心数据模型。我想镜像iCloud core data sync试图提供的功能

为什么不使用iCloud或iCloud? 我目前正在一个生产应用程序中使用iCloud core data sync,它是。我还想提供独立于苹果ID的认证,这也是我想离开iCloud的另一个原因。就合奏而言,我不确定这是否仍然适用于Dropbox。

我还没有开始开发图书馆。我正在寻找关于我的计划的反馈,该计划概述如下。这项设计是基于

图书馆的总体设计:

  • 该库将提供一个标准的核心数据堆栈,用于设置持久存储协调器和托管对象上下文。所有标准核心数据CRUD操作都将通过库提供的接口进行

  • 每次CUD操作发生时,都会保存一个同步操作对象,以便在后台进行解析,该对象包含重现操作所需的所有信息。这包括:发生的操作类型、操作对象的唯一标识符,以及在创建操作的情况下,将提供父对象和关系

  • 每个操作都会有一个与之关联的变更id号。每次设备下载并执行操作时,它都会存储与该操作相关的最新更改id
  • 在上传每个同步操作之前,设备将向服务器发送请求,以确保存储的更改id号与本地存储的一致。如果服务器上的更改id更高,它将首先下载所有同步操作并执行它们,然后上载自己的同步操作
  • 冲突(两台设备在脱机时编辑相同的值)将通过确定上次更改值的设备来解决

  • 我有什么遗漏吗?这种方法有哪些潜在缺陷?我听说同步很难,这类任务应该留给最有经验的开发人员吗?

    我不是最有偏见的响应者,因为我是集成框架的开发人员,但让我谈谈我的想法

    就集成本身而言,它是一个后端不可知框架。是的,它可以与iCloud和Dropbox Sync API一起使用,但也可以与CloudKit、Dropbox核心API(未弃用)和WebDAV一起使用。还有一个定制的Node.js服务器和一个包,它允许您自己使用Heroku和S3托管数据

    因此,即使你不想坚持使用苹果,也有其他选择。但更重要的是,您可以编写自己的后端适配器类。大多数代码大约有500行,您可以基于现有的一个类。这将允许您创建一个后端来存储数据并使用Parse进行身份验证,并将数据合并留给集成。这样做的另一个优点是,您可以在将来轻松地移动到其他后端,或者将其作为选项提供。(CloudKit绝对值得一看。)

    但是,假设您决定不使用其他人的框架,那么是的,您的方法听起来是全局正确的

    您只需观察
    nsmanagedobjectcontextdidsaveinnotification
    并从
    userInfo
    字典中提取更改,而不是通过接口执行CRUD操作

    我相信你会发现很多你没有想到的小事情,正是这些细节使得同步变得困难。一个这样的例子是,您需要构建足够健壮的东西来处理失败,例如在应用程序退出之前没有完成解析操作。您可能需要在每个对象上都有一个更改标记,以便可以检索自上次同步以来更改的对象

    如果你的应用程序只有少量数据,那么构建这个系统并不十分困难,但是随着你的数据开始变大,你需要开始使用批处理之类的方法来降低iOS上的内存数据。这类事情可能需要很多时间。例如,Ensemble2的API与Ensemble1几乎相同,但我花了大约4个月的时间重写了批处理之类的东西,以提高内存效率

    我使用您描述的方法构建了一个原型应用程序(应用程序是社交的,不是同步的,因此没有集成)。我使用了CloudKit,它与Parse非常相似。大约需要1000行Swift代码才能使整个数据上传/下载正常工作,并有一个本地核心数据缓存。这当然是可以做到的,特别是如果您已经很好地了解核心数据的话。否则可能会有一个学习曲线


    我提倡像Ensembles这样的框架,只是因为它已经解决了您需要解决的许多小细节,并且不会将您锁定到特定的后端。如果Parse决定提高他们的费用,你可以自由地搬到其他地方。

    我不是最有偏见的回应者,因为我是Ensembles框架的开发者,但让我谈谈我的想法

    就集成本身而言,它是一个后端不可知框架。是的,它可以与iCloud和Dropbox Sync API一起使用,但也可以与CloudKit、Dropbox核心API(未弃用)和WebDAV一起使用。还有一个定制的Node.js服务器和一个包,它允许您自己使用Heroku和S3托管数据

    因此,即使你不想坚持使用苹果,也有其他选择。但更重要的是,您可以编写自己的后端适配器类。大多数代码大约有500行,您可以基于现有的一个类。这将允许您创建一个后端来存储数据并使用Parse进行身份验证,并将数据合并留给集成。这样做的另一个优点是,您可以在将来轻松地移动到其他后端,或者将其作为选项提供。(克劳克)