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

标签 mysql ios core-data synchronization

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

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

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

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

我的主要问题是:

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

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

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

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

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

最佳答案

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

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

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

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

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

关于mysql - iOS - 核心数据和服务器数据库同步最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15561509/

相关文章:

mysqld_safe fatal error : Can't remove the pid file

php - 从 MYSQL 在 PHP 中显示图像?

ios - 带有 NSTimer 的 GCD 串行队列,dispatch_sync 不等待 NSTimer 完成

iphone - 核心数据不获取记录

javascript - 在 Socket IO 和 Node JS 中轮询 MySQL DB

php - MySQL、PHP、GROUP 中有多少个

ios - 无法在 api 响应中获得成功

ios - 可以将数据从应用程序传输到浏览器

ios - 访问由私有(private) managedObjectContext 创建的 CoreData 对象(在后台线程中创建)

ios - 在应用程序 iOS 中保存图像和视频