我正在尝试实现同步/合并,这听起来像它会起作用吗?

时间:2012-01-13 14:33:17

标签: iphone core-data merge synchronization dropbox

我有一个应用程序,它需要同步一堆核心数据。我将使用Dropbox将一堆设备同步到一起,至少除非我能找到更好的解决方案。需要同步的主要内容有四个:医生,居民和两种不同类型的点(由用户放置在图表上)。我没有任何ID附加到这些实体,因为我认为它会使同步太难。我想这样同步他们:

  • 我制作了一个带有三个字典的plist,名为“add”和“delete”。两者(“添加”和“删除”)都有一个数组,我需要同步的每个实体(医生,居民,点等)。
  • 每次用户添加或删除其中一项内容时,我都会在适当的数组中添加一个新字典,其中包含已添加/删除的该对象的属性的所有属性和值。
  • 通过添加新的已编辑对象和删除旧对象,可以记录编辑(您只能编辑点,而不是居民或医生)。因此,新对象将添加到相应的“添加”列表中,旧对象将添加到相应的“删除”列表中
  • 在Dropbox中,我们尝试同步的每台设备都有一个文件夹。当它同步时,它会将plist文件上传到它自己的设备文件夹。它还通过将其上传到以日期和时间命名的备份文件夹来备份它自己的sql文件。
  • 然后检查所有其他设备的文件夹,并在这些文件夹中找到的plists中应用更改。
  • 将所有更改应用到自己的本地数据库并保存后,它会将其sql文件上传到dropbox中的“最新”文件夹。
  • 如果设备想要重置它的数据库,或者新设备加入,它只会从最新的文件夹下载sql文件。

有任何想法/想法/建议吗? 感谢

2 个答案:

答案 0 :(得分:0)

为此,您需要在整个网络中进行同步 - 这种方式实际上并不可行。这非常非常难以解决。 iOS 5中的iCloud支持解决了这个问题,但这不过是微不足道的。

您需要将对本地数据库的所有更改写入服务器上的日志文件,并使每个更改都有一个版本。您需要能够合并来自网络的所有更改(即播放然后再返回到本地数据库)并处理合并冲突(您可能会有与传入更改冲突的本地更改)。

我在服务器上高度拥有一个数据库并让应用程序与该数据库通信(例如通过REST)。不过,你需要一台服务器。

你的方法必将失败。遗憾。

答案 1 :(得分:0)

我最终或多或少地使用了这个模型,但它不是检查所有其他设备变更集的设备,而是检查自己的设备文件夹中的变更集,其他设备在进行更改时写入。这样,按时间顺序组织更改要容易得多。这种模式对任何想知道的人都有用。

*请注意我正在回答我自己的问题,以便人们知道我最终做了什么并且它有效。对不起,这不是一个直接回答的问题。