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

Mysql iOS-核心数据和服务器数据库同步最佳实践,mysql,ios,core-data,synchronization,Mysql,Ios,Core Data,Synchronization,我开始为一个大型应用程序设置核心数据模型,并希望在服务器数据库和脱机功能方面获得一些关于正确同步方法/技术的反馈 我使用PHP和mySQL作为我的web服务器/数据库 我已经知道如何连接、接收数据、存储到核心数据等。我正在寻找更多有关跟踪数据更改的方法和特定实例的帮助,以: A) 确保应用程序和服务器在联机和脱机使用期间同步(即,一旦恢复联机,脱机活动将被提升)。 B) 优化将数据保存到应用程序的速度 我的主要问题是: 检查应用程序中哪些新的/更新的数据仍然需要同步(脱机使用后)的最佳方法是什么

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

我使用PHP和mySQL作为我的web服务器/数据库

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

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

我的主要问题是:

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

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

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

(即,我如何只更新比服务器数据库上旧的核心数据中的数据,而不遍历每个实体并每次更新)?是否可以不添加服务器数据库列来跟踪每个表的更新时间戳


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

我在手机上的两个核心数据记录的数据库中存储最后修改的时间戳,以及服务器上的mysql表

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

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

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


(顺便说一句,当我说“很多记录都改变了”时,我的意思是在手机上更新或插入30000行左右)

见同上。我还在每个实体中使用修改日期,在其中存储上次成功服务器调用的时间。在每次API调用中,我都会将其传递给服务器,服务器上有触发器,可以在任何情况发生变化时在每个表中设置类似的列。我使用三个上下文模型(如中)异步处理更新。我还使用上次同步的数据和表记录的日期时间戳管理同步。如何确保手机的时间戳和服务器的时间戳使用完全相同的时间。例如,如果手机的时间戳比服务器的时间戳早10秒,并且在这段时间之间有变化,则数据将被删除lost@ZoonNooz如果有人的钟调错了,它就会出毛病,当他们抱怨数据丢失时,我们的技术支持团队会告诉他们启用自动日期/时间同步,这意味着他们可以在瞬间准确地进行数据同步。我们还在服务器上保留大量日志,因此,如果数据丢失,可以手动恢复(收费率为100美元/小时…)。我还将服务器设置为假定5分钟的时间延迟,即手机上任何比服务器早5分钟的数据都被视为比服务器的数据更新。@ZoonNooz如果我可以再次这样做,我也会让手机在每次请求中发送其时钟上的当前日期/时间。如果错误超过几分钟,我将失败,并显示一条错误消息,告诉用户修复他们的时钟。如果手机需要上传大量数据(照片/等可能需要几分钟才能上传),您可能不希望在任何请求中执行此检查。