2009-12-24 49 views
0

我知道这是圣诞节前夕,所以这是一个在线查找核心程序员的好时机:)。SQlite同步方案

我有一个包含超过10 K记录的sqlite数据库字段,我从一个mysql数据库生成数据库,我已经在我的iphone应用程序中以通常的方式构建了sqlite数据库。

记录包含有关产品及其价格,商店等信息,当然这个信息不是静态的,我使用自动方案来填充并不断更新我的MySQL数据库。

现在,我如何更新iphoen应用程序sqlite数据库与新的信息在MySQL数据库中可用,数据库结构仍然是相同的,但记录包含新的信息。

谢谢。 AHED

信息: libsqlite3.0, iPhone OS 3.1, mysql的2005年, 的Mac OS X 10.6.2

回答

1

有你首先需要回答的问题; 如何确定MySQL数据库中已更改记录的集合?

或者,更具体地说,考虑到MySQL数据库处于状态A,一些事务发生,现在它处于状态B,您如何知道A和B之间发生了什么变化?

底线;你需要一个支持MySQL的模式。一旦你回答了的问题,那么你可以回答“我该如何同步问题?”。

0

您可以通过搜索“iphone同步”找到很多其他类似的问题:

https://stackoverflow.com/search?q=iphone+synchronization

我要去假定数据只从MySQL去sqlite的,而不是相反方向。

三种是我可以想象得到的一些方法。首先是在每次更新期间重新下载整个数据库的 。我在下面描述的另一种方法是创建一个“日志”表来记录对主表的修改,然后在更新时只下载新日志。

我会在您的SQL数据库中创建一个新的“日志”表来记录对需要同步的表的更改。该日志可能包含一个“修订”列,用于跟踪更改的顺序,“类型”列用于指定它是插入,更新还是删除,行ID是否为受影响的行,最后是主表中的整组列。

通过使用存储过程作为包装来修改主表,您可以自动创建日志条目。

只有10K条记录,我不希望这个日志表增长到那么大。

然后你会在sqlite中跟踪从mysql下载的最新版本。要更新表格,你可以下载最新更新后的所有日志条目,然后将它们应用到你的sqlite表格。

1

我有一个类似的应用程序。

我使用推送通知让我的用户知道有新的或更新的数据可用。

每次更新服务器上的记录时,我都会在记录旁边存储一个连续的记录号。

每个注册的UDID都有一个“最近更新”的数字,它包含了它曾经下载的最高记录数。

当任何给定的设备来获取它的更新时,所有大于UDID上次更新记录号的数据库记录将被发送到设备。如果一切正常,UDID的最后更新记录号被设置为最后发送的记录号。

如果用户觉得有必要将他的设备同步到整个数据库,用户可以选择获取所有记录并刷新他的数据库。

似乎运作良好。

-t