同步/更新sqlite数据库

Ale*_*s G 6 sqlite iphone android data-synchronization

我们有一个Android应用程序和一个iPhone应用程序(相同的功能),使用sqlite进行本地数据存储.应用程序最初没有数据,然后在第一次运行时,它们从远程服务器接收数据并将其存储在sqlite数据库中.sqlite数据库由服务器创建,应用程序将其作为一个文件下载,然后用于购买应用程序.按照今天的标准,数据库文件不是很大,但也不是很小 - 大约5-6 MB.

现在,应用程序需要刷新服务器中的数据.我能想到几种方法:

  1. 从服务器下载新的完整数据库并替换现有数据库.这听起来像处理问题最简单的方法是不是重复5-6 MB的下载.应用程序会提示用户是否要下载更新,因此这可能不是太大的问题.

  2. 从服务器下载增量数据库,仅包含新的/已修改的记录,并以某种形式显示有关要删除的记录的信息.这将导致更小的下载大小,但客户端的工作更复杂.我需要读取一个数据库,并根据读取的内容更新另一个数据库.据我所知,sqlite没有办法像insert into db1.table1 (select * from db2.table1)where 一样,db1并且db2是两个包含table1相同结构的sqlite数据库.(完整的sqlite数据库包含大约10个表,其中最大的一个表可能包含大约500个记录左右.)

  3. 以某种其他格式(json,xml等)下载数据的delta,并使用此信息更新应用程序中的数据库.与以前相同:在服务器端没有太多问题,下载大小比完整数据库小,但是进行更新是一个非常痛苦的过程.

您推荐的三种方法中的哪一种?或许还有另一种我错过的方式?

提前谢谢了.

Ale*_*s G 1

经过多次考虑和反复尝试,我选择了选项(2)和(3)的组合。

  1. 如果根本不存在数据,则应用程序将从服务器下载完整的数据库文件。

  2. 如果存在数据并且需要更新,应用程序会从服务器下载一些数据库。并检查特定表中特定值的内容。该值将说明新数据库是否要替换原始数据库或者是否包含删除/更新/插入

事实证明,这是最快的方法(就性能而言),并将所有繁重的工作(确定是否将所有内容放入一个数据库或仅进行更新)留给服务器。此外,通过这种方法,如果我需要修改算法以始终下载完整的数据库,则只需在服务器上进行更改,而不需要重新编译和重新分发应用程序。