0

我们有一个需要执行离线访问的移动(Android 和 iPhone)应用程序。我想了解在应用程序端以更简化的方式更新 SqLite 数据库的最佳方法是什么。

  1. 我发现的一种方法是通过 Web 服务以 JSON 格式发送所有对象,并检查时间戳以查看是否有更新。如果有更新,所有表都会被截断并在应用程序端再次插入。我觉得效率很低。

  2. 另一种方法是通过 Web 服务(用 JSON 包装)发送 sql 语句。第一次发送所有插入记录,以后如果有新记录或更新,则插入记录和更新记录。我觉得这种方法很不安全。

使用 Restful Web 服务执行该操作的最佳方法是什么

4

1 回答 1

0

有几个选项,几乎不是一个详尽的列表,而是更多的例子来开始你的思考;

  • 要优化版本 1,您可以在服务器端创建一个触发器,用于更新已更改行上的版本字段。这样,如果客户端知道它的版本为 47,而服务器的版本为 52,那么您知道您只需要发送版本号介于 48 和 52 之间的行即可使客户端保持最新状态。如果更新主要是逐行进行,而不是“将所有绿色行更新为 puce”,这仍然会发送大量数据,则此方法效果最佳。

  • 为了使版本 2 更安全一点,您可以发送除表名之外的所有 SQL,从而锁定对特定操作(例如 UPDATE/INSERT/DELETE,无 SELECT)和特定表(即不更新同一数据库中的其他表)。这可能有点难以维护,但如果数据库的大部分可能受到单个 UPDATE 的影响,则效果会更好。

  • 将对数据库的操作分解为业务操作,然后将其发送。例如,业务操作可能是“已付款:用户 2,47 美元”,操作本身被发送到客户端,然后您将“已付款”映射到数据库中的更新。这将要求操作的数量相当小且已定义(尽管尝试定义它们很少是一个坏主意),但适用于逐行更新和全面更新,并且可能会使用最少的数据来获取内容同步(如果您对操作进行编号,以便在客户端尚未收到它们时只发送一次)它还免费为您提供审计日志,用户余额不仅发生了变化,您知道是什么导致了它的变化。

Personally I'd go for option 3 if I had a choice since I like to know what the database updates actually mean and when they were done, but for existing systems it may be way too much work.

于 2013-02-11T09:21:47.790 回答