【问题标题】:Syncronizing Android client with remote SQL-server database, using web service使用 Web 服务将 Android 客户端与远程 SQL-server 数据库同步
【发布时间】:2013-02-06 12:36:33
【问题描述】:

我实现了一个需要一组数据的 Android 应用程序,这些数据由 SQL Server 数据库获取。应用程序获取调用 WS 的数据。在应用程序第一次启动时第一次调用 WS 后,我需要根据服务器端(SQL 服务器数据库)可能发生的修改来保持数据的更新。 为了获得这个结果,我以预定义的频率执行 WS 调用,以了解数据库上的数据是否已更改。如果有新数据可用,则调用其他 Web 服务来获取它们。

此解决方案适用于我(我不需要实时更新)。但是,我认为这种解决方案在能耗、cpu 消耗和网络流量方面过于昂贵。 因为,我想这是一个非常常见的问题,我会知道是否存在一种通用的方法来处理它。

【问题讨论】:

    标签: android sql-server web-services synchronization message-queue


    【解决方案1】:

    我建议您使用额外的字段。在 Android 的本地表中添加四列:

    • TRANSACTING_FLAG :在服务器上发布或更新此资源时将其设置为 true
    • REQUEST_STATE :将此标志设置为 POSTING / UPDATING / DELETING 等。
    • RESULT_CODE :将此字段设置为服务器收到的针对此特定资源的最后一个结果代码。
    • TIMESTAMP:必须更新数据之后的时间段

    工作流程很简单: 当您为服务器检索数据时,只需检查资源的最后更新时间戳是否优于您之前定义的缓存时间戳。如果时间戳优于执行更新数据的请求。事务处理布尔值让您知道特定资源实际上正在与服务器同步。结果代码让您知道请求是否失败,并最终在网络可用时重试。通过这种方式,您将保持本地和远程数据库之间的持久性,因为借助之前看到的额外字段,您可以随时检查任何本地资源的“同步状态”。

    我创建了一个库来处理这个问题。看看RESTDroid。即使缓存功能不是句柄,您也可以简单地添加它。

    【讨论】:

      【解决方案2】:

      您可以使用 SqlDependency - http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqldependency.aspx 之类的东西查看查询通知。您可以使用它来跟踪查询结果是否发生变化,并在发生这种情况时通知应用程序。

      您可以使用的查询有限制,服务器上的成本类似于索引视图。顺便说一句,您需要.NET。如果在您的 Web 服务中实现,您必须为您的 android 实现某种订阅功能,以便可以将通知推送到它。

      另一个降低检查更改成本的选项可能是 SQL Server 更改跟踪 - http://msdn.microsoft.com/en-us/library/bb933875.aspx

      【讨论】:

        【解决方案3】:

        在大多数情况下,您的操作都可以。您可以利用Google Cloud Messaging,但它需要时间和精力来实施。我会坚持你的解决方案。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-05-16
          • 2010-11-04
          • 1970-01-01
          • 1970-01-01
          • 2017-12-10
          相关资源
          最近更新 更多