同步/更新sqlite数据库

时间:2012-02-29 13:16:22

标签: android iphone sqlite data-synchronization

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

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

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

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

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

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

    非常感谢提前。

3 个答案:

答案 0 :(得分:1)

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

  1. 如果根本没有数据,那么应用程序会从服务器下载完整的数据库文件。

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

  3. 这是最快的方式(性能方面),并将所有繁重的工作(确定是将所有内容放入一个数据库还是仅更新)留给服务器。此外,通过这种方法,如果我需要修改算法,比如总是下载完整的数据库,那么只需要对服务器进行更改,而无需重新编译和重新分发应用程序。

答案 1 :(得分:0)

有没有办法让每个表都有一个JSON字段?例如,如果您有一个名为users的表,则有一个名为“json”的列,用于存储每个用户的JSON。从本质上讲,它将包含其他字段所具有的信息。

因此,当您在JSON中下载增量时,您所要做的就是将JSON插入表中。

当然,使用这种方法,你需要在解析JSON并从中创建模型/对象时做额外的工作,但这只是额外的3-4个小步骤。

答案 2 :(得分:-1)

我会建议方法3,因为app会更快地下载json文件,更容易更新本地数据库,避免更多互联网使用的开销。

最初根据服务器db创建一个空数据库,然后通过获取json

定期更新它