6

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

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

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

  2. 从服务器下载一个增量数据库,其中仅包含新的/修改的记录以及有关要删除哪些记录的某种形式的信息。这将导致下载大小更小,但客户端的工作更加复杂。我需要读取一个数据库,然后根据读取的内容更新另一个数据库。据我所知,sqlite 无法执行类似insert into db1.table1 (select * from db2.table1)wheredb1和is 两个包含相同结构的db2sqlite 数据库的操作。table1(完整的 sqlite 数据库包含大约 10 个表,其中最大的一个可能包含大约 500 条记录左右。)

  3. 以其他格式(json、xml 等)下载数据的增量,并使用此信息更新应用程序中的数据库。和以前一样:服务器端问题不大,下载量比完整数据库小,但更新过程相当痛苦。

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

提前谢谢了。

4

3 回答 3

1

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

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

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

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

于 2012-03-07T14:15:32.573 回答
0

有没有一种方法可以为每个表创建一个 JSON 字段?例如,如果您有一个名为 users 的表,则有一个名为“json”的列,用于存储每个用户的 JSON。本质上,它将包含其余字段所具有的信息。

因此,当您以 JSON 格式下载 delta 时,您所要做的就是将 JSON 插入表中。

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

于 2012-02-29T15:02:33.613 回答
-1

我会推荐方法 3,因为应用程序将更快地下载 json 文件,并且本地数据库将更容易更新,避免更多互联网使用的开销。

只需根据服务器数据库创建一个空数据库,然后通过获取 json 定期更新相同的数据库

于 2012-02-29T13:22:08.707 回答