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

时间:2013-03-22 02:04:19

标签: mysql ios core-data synchronization

我开始为大型应用程序设置核心数据模型,并希望在服务器数据库和离线功能方面获得有关正确同步方法/技术的一些反馈。

我将PHP和mySQL用于我的Web服务器/数据库。

我已经知道如何连接,接收数据,存储到核心数据等等。我正在寻找更多有关方法和跟踪数据更改的特定实例的帮助:

A)确保应用程序和服务器在联机和脱机使用期间保持同步(即,一旦重新联机,离线活动将被推升)。 B)优化将数据保存到应用程序的速度。

我的主要问题是:

检查应用中哪些新/更新数据仍需要同步(离线使用后)的最佳方法是什么?

(即在我的所有核心数据实体中,我放置了一个BOOL类型的'isSynchronized'属性。然后在成功提交后更新为'YES'并从服务器发回响应)。这是最好的方式吗?

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

(即,如何更新核心数据中比服务器数据库更旧的数据而不迭代每个实体并且每次只更新)?是否可以在不添加服务器数据库列的情况下跟踪每个表的更新时间戳?

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

1 个答案:

答案 0 :(得分:9)

我在数据库中将最后修改的时间戳存储在手机上的核心数据记录和服务器上的mysql表中。

手机搜索自上次同步以来发生更改的所有内容,并将其与上次同步的时间戳一起发送到服务器,并且服务器会响应自提供的同步时间戳以来已更改的所有内容。< / p>

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

在较旧的硬件上,即使经过多次优化,如果用户开始在应用程序中执行操作,也必须完全中止同步。它只是使用了太多的系统资源。我认为更现代的iOS设备可能足够快,您不再需要这样做了。

(顺便说一句,当我说“很多记录已经改变”时,我的意思是30,000左右的行被更新或插入手机)