Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/42.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在iPhone应用程序中同步数据的最佳策略_Iphone_Data Synchronization - Fatal编程技术网

在iPhone应用程序中同步数据的最佳策略

在iPhone应用程序中同步数据的最佳策略,iphone,data-synchronization,Iphone,Data Synchronization,我正在开发一个普通的iPhone应用程序,它从服务器(XML、JSON等)提取数据,我想知道实现数据同步的最佳方法是什么。标准是速度(更少的网络数据交换)、健壮性(更新失败时的数据恢复)、脱机访问和灵活性(当数据库结构发生轻微变化时,如新列时,可进行调整)。我知道不同的应用程序会有所不同,但你们能分享一些你们的策略/经验吗 对我来说,我在想这样的事情: 1) 在iPhone中存储上次修改的日期 2) 启动时,发送一条类似getNewData.php?lastModifiedDate= 3) 服务

我正在开发一个普通的iPhone应用程序,它从服务器(XML、JSON等)提取数据,我想知道实现数据同步的最佳方法是什么。标准是速度(更少的网络数据交换)、健壮性(更新失败时的数据恢复)、脱机访问和灵活性(当数据库结构发生轻微变化时,如新列时,可进行调整)。我知道不同的应用程序会有所不同,但你们能分享一些你们的策略/经验吗

对我来说,我在想这样的事情:

1) 在iPhone中存储上次修改的日期

2) 启动时,发送一条类似getNewData.php?lastModifiedDate=

3) 服务器将只处理并发回上次修改的数据

4) 此数据的格式如下所示:

//将其添加到SQLite/CoreData

//删除此

newValue//新修改的值

我不想。。。对于每个属性也是如此,因为它太复杂了,所以可能在接收字段时,我会删除具有指定id的数据,然后再次添加它(假设这里的id不是自动递增的字段)

5) 下载并更新所有内容后,我将更新上次修改的日期字段


此策略的主要问题是:如果在我更新某个内容时网络出现故障=>上次修改的日期尚未更新=>下次重新启动应用程序时,我将不得不再次执行相同的操作。更不用说潜在的不一致数据了。如果我使用一个临时表进行更新,并使整个事情原子化,它会工作,但是,如果更新太长(大量数据更改),用户必须等待很长时间,直到新数据可用。我应该为每个数据字段使用上次修改的日期并逐步更新数据吗?

我将从使更新例程原子化开始,因为您将有足够的时间来弄清楚如何使客户机-服务器通信正常工作

这是一个很好的时间来考虑调整它是渐进的,但是只有在你做了一些测试之后才知道它是否真的是必要的。如果您正在将更新协议调整为尽可能低的带宽,您可能会发现即使是一个“大”的更新下载速度也足够快

另一种看待它的方式是问问你自己,当一个普通用户正在进行同步时,多久会出现一次网络故障?您可能不想针对不太可能出现的情况进行调整


<> P>如果你试图优化(最小化)数据传输,你可能需要考虑一种不同于XML的格式,因为XML是相当冗长的。或者,至少您可能希望通过使每个元素名称和属性尽可能小,并消除所有不必要的空白,以XML可读性换取空间。

您的基本方案很好。您需要做的事情是以某种方式使您的更新幂等,这样您就可以重新启动部分完成的传输,而不会有风险。这是一种比尝试实现某种真正的原子提交更好的方法(尽管您也可以使用SQLite数据库来实现)

根据我们的经验,如果服务器速度足够快的话,可以非常快速地下载相当大的更新(10KB)。无需将更新分解成小块。但是,通过在“上次更新”中保留更细粒度的信息来尽量减少传输的数据量肯定不会有什么坏处


(当然,您应该使用JSON而不是XML作为传输的数据表示。)

不知道您是否考虑过使用同步框架来管理同步。如果你对此感兴趣,可以看看开源项目OpenMobster的同步服务。您可以执行以下同步操作

  • 双向
  • 单向客户端
  • 单向装置
  • 启动
除此之外,所有修改都会自动跟踪并与云同步。当网络连接断开时,您可以使应用程序脱机。它将跟踪任何更改,并在连接返回时在后台自动将其与云同步。它还可以像iCloud一样跨多个设备提供同步

此外,云中的修改使用推送通知进行同步,因此即使数据存储在本地,数据也始终是最新的

就你而言

Criteria are speed (less network data exchange), robustness (data recovery in case update fails), offline access
  • 速度:只有更改通过网络向两个方向发送

  • 健壮性:它将数据存储在像sqlite这样的事务存储中,任何失败的更新都在SyncML负载中进行通信。在下一次同步期间,仅处理成功的操作,而重试失败的操作

以下是指向开源项目的链接:

以下是指向iPhone应用程序同步的链接: