iOS – 核心数据和服务器数据库同步最佳实践

我开始为大规模应用程序设置核心数据模型,并希望在涉及到服务器数据库和脱机function方面对正确的同步方法/技术有所反馈。

我使用PHP和MySQL作为我的Web服务器/数据库。

我已经知道如何连接,接收数据,存储到核心数据等。我正在寻找更多的方法和跟踪数据变化的具体情况的帮助:

A)确保应用程序和服务器在线和离线使用期间保持同步(即,离线活动一旦恢复在线状态将被推高)。 B)优化保存数据到应用程序的速度。

我的主要问题是:

什么是最好的方法来检查应用程序中的新的/更新的数据仍然需要同步(离线使用后)?

(即在我的所有核心数据实体中,我放置了一个“isSynchronized”属性BOOLtypes,然后更新到“YES”,一旦成功提交,响应从服务器发回)。 这是最好的方法吗?

优化将数据从服务器保存到核心数据的速度的最佳方法是什么?

(即如何更新数据的核心数据比在服务器数据库上的东西没有迭代通过每个实体,只更新每一次)? 是否可以不添加服务器数据库列来跟踪每个表的更新时间戳?

再次,我已经知道如何下载数据并将其存储到Core Data中,我只是寻求一些帮助确保跨应用程序和服务器数据库同步的最佳实践,同时确保优化的处理时间。

我将最后修改的时间戳存储在数据库中的电话核心数据logging和服务器上的mysql表中。

手机会search自上次同步以来发生变化的所有内容,并将其连同上次同步的时间戳一起发送到服务器,服务器会响应自提供的同步时间戳以来已更改的所有内容。

当很多logging发生变化时,性能是一个问题。 我做了一个背景NSOpeartion同步它有自己的托pipe对象上下文。 当后台线程完成对其托pipe对象上下文的更改时,会有一个API将所有更改合并到主线程的托pipe对象上下文中 – 可以configuration为在发生任何冲突时简单地丢弃所有更改用户在同步正在进行时更改数据。 在这种情况下,我只需等待几秒钟,然后尝试再次进行同步。

在较旧的硬件上,即使在经过许多优化之后,如果用户开始在应用程序中做东西,就必须完全中止同步。 这只是使用太多的系统资源。 我认为更现代的iOS设备可能足够快,你不需要这样做了。

(顺便说一句,当我说“很多logging已经改变了”时,我的意思是在电话上更新或插入3万行左右的行)