核心数据同步 - 跟踪已删除的对象

Nat*_*kin 6 mysql iphone core-data ipad ios

我正在为我正在开发的iPad应用程序设置基本同步服务.目标是在iPad应用程序的多个实例中保持数据一致,并在Web上拥有只读版本的数据,从而推出自定义解决方案.

目前的流程如下:

  • 每个实体都有一个"已创建","已修改"和"UUID"字段,这些字段由Core Data自动更新
  • 在同步时,在最后一个同步日期之后具有创建或修改日期的每个实体被序列化为JSON并发送到服务器
  • 服务器持续使用客户端生成的UUID作为的PK到MySQL数据库的任何更改(如果有冲突,它只是使用最近修改的实体为"真"版本,没有什么花哨存在),并发送回任何更新的实体的客户
  • 然后,客户端将这些更改合并回其Core Data DB

这一切似乎都很好.我的问题是如何使用此方法跟踪已删除的对象?我猜我可以为每个实体添加一个'已删除'标志,并在客户端删除某些内容时设置此标志,然后我可以将该更改推送到服务器并使用其余的同步数据.同步完成后,客户端实际上可以删除这些实体.我的问题是:

  • 我可以覆盖Core Data的删除方法来自动设置此标志吗?
  • 这是否需要在服务器上无限期地保留所有已删除的实体?我们无法知道每个客户端何时同步并实际删除了每个实体(我目前没有跟踪客户端实例)
  • 有没有更好的方法呢?

dze*_*kei 6

如何保存带有UUID和已创建/更新/删除字段的增量历史记录表,可能每个更新都有一个修订号?因此,您保留自上次成功同步以来的一小部分更改清单.

这样,如果删除对象,则可以在增量历史记录表中添加已删除的UUID的条目,并将其标记为已删除.与创建和更新的对象相同,您只需要检查增量表以查看服务器需要删除,更新,创建等的项目.您甚至可以在服务器上存储每个修订版本以支持回滚到以前的版本未来,如果你喜欢它.

我认为修订号比依赖客户端的时钟更好,可能会手动更改.

您可以使用NSManagedObjectContext的insertedObjects,updatedObjects,deletedObjects方法在每个保存过程之前创建delta对象:)

我的2美分