22

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

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

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

A) 确保在线和离线使用期间应用程序和服务器同步(即离线活动将在重新上线后被推送)。B) 优化将数据保存到应用程序的速度。

我的主要问题是:

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

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

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

(即,我怎样才能只更新比服务器数据库上的数据更旧的核心数据中的数据,而无需遍历每个实体并且每次都更新)?是否可以不添加用于跟踪每个表的更新时间戳的服务器数据库列?

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

4

1 回答 1

9

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

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

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

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

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

于 2013-03-22T03:17:10.443 回答