代码之家  ›  专栏  ›  技术社区  ›  GVillani82

使用web服务将Android客户端与远程SQL server数据库同步

  •  0
  • GVillani82  · 技术社区  · 13 年前

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

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

    3 回复  |  直到 13 年前
        1
  •  1
  •   Pierre Criulanscy    13 年前

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

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

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

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

        2
  •  1
  •   Vladimir Ivanov    13 年前

    你所做的在大多数情况下都是可以的。你可以利用 Google Cloud Messaging ,但它需要时间和精力才能实现。我会坚持你的解决方案。

        3
  •  0
  •   muhmud    13 年前

    您可以使用类似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