如何将SQLite核心数据数据库与远程MySQL数据库同步?

时间:2014-07-01 18:04:43

标签: mysql ios database sqlite core-data

我最近完成了iOS应用程序的工作,而且大部分内容都是以应用程序的方式运行。我设法创建了一个多用户应用程序,它使用Core Data持久保存到SQLite数据库。然而,用户希望从远程设备(即他们自己的电话)或他们使用的任何网络设备管理他们的帐户的时间已经到来。话虽如此,我做了一些谷歌搜索,并发现我将需要创建一个" Web服务"。现在需要注意的是,我已经在运行应用程序的iDevice上的SQLite DB中累积了数据。我想将现有数据推送到MySQL数据库或远程计算机,并使其同步。例如,当用户在iOS设备上更新其帐户时,更改将被推送到MySQL数据库,如果用户使用标准浏览器连接到Web服务,则会更新iOS设备上的SQLite数据库。

我开始学习rails,因为我认为为用户创建一个简单的Web前端来管理他们的帐户是一个很好的解决方案,它为开发人员公开了一个API来操纵数据库中的数据。基本上,我想听听社区的一些建议,或者链接可以为我想要完成的事情提供一个良好的起点。

2 个答案:

答案 0 :(得分:1)

如果您正在查看rails,请尝试查看ActiveAdmin gem。这是我在第一个iOS和rails项目中用于客户端的内容。它为您提供了一个管理仪表板,如果您能够设置它,它将处理您想要的许多内容。一开始它很混乱,但几周后会给你一个非常好的网络解决方案。此外,根据您在创建服务器方面的经验,您可能希望查看heroku以获得为您完成所有工作的低成本主机(如果您开始需要更多处理器,Heroku会很快变得昂贵)。从github项目中,您可以在大约5分钟内完成heroku并运行rails代码。

至于将数据库从Server To Phone同步:您将要在服务器DB上为您的模型建立一种last_updated_at时间戳。现在,当更新任何内容时,您将更新时间戳。现在iOS应用程序可以将?last_updated_at参数传递给您的服务器。这将允许您的服务器找出自上次ping服务器以来发生过更改的所有内容。然后在手机上将它gnab到你的核心数据db中。

将电话同步到服务器:

首先确保手机在同步之前是最新的(使用last_updated_at参数)。如果它清楚,那么这就是它的难点。您需要从CoreData数据库转换要同步的对象(因为它会自动添加它自己的列/表)并将其传递出去。否则,您可以传递coreData数据库并在服务器上进行某种转换。

OR

在iPhone应用中进行转换,并进行从CoreData迁移的更新。这将是一个痛苦,但如果你部署到其他操作系统,它将从长远来看有所帮助。您需要创建sqlite3查询以将CoreData数据库转换为新的SQL数据库(我们能够在iPhone 5上在1.2秒内复制2-3MB数据,因此它非常快)。然后,应用程序将只使用SQLite3,以便它可以将完整的数据库同步到服务器。然后,这将使手机更容易同步,它可以从服务器获取完整的数据库并将其插入。

答案 1 :(得分:1)

typedef NS_ENUM(NSInteger, RecordStatus){

RecordStatusUnchanged = 0,
RecordStatusUpdated   = 1,
RecordStatusAdded     = 2,
RecordStatusRemoved   = 3
};

创建一个名为change_record的新SQL表。列,例如(item_id,状态,类别名称)

用于更新

change_record表:从本地数据库中,您将获得item_id,保持RecordStatusUpdated状态,并设置category_name

添加

change_record表:item_id将为空,保持状态为RecordStatu ,设置category_name

要删除

change_record表:从本地数据库中,您将获得item_id,保持状态RecordStatusRemoved ,将category_name设置为空

使用后台服务检查每n个时间间隔是否有互联网连接。

如果change_record计数> 0。 然后将所有项目(使用循环)发送到服务器