0

我实现了一个Android应用程序,该应用程序需要一组由SQL Server数据库提供的数据。应用程序获取调用WS的数据。根据服务器端可能发生的修改(SQL服务器数据库),当应用程序第一次启动时第一次调用WS时,我需要维护更新的数据。 为了获得这个结果,我使用预定义的频率执行WS调用,以了解数据库上的数据是否发生更改。如果新数据可用,则会调用其他Web服务来获取它们。使用Web服务将Android客户端与远程SQL服务器数据库同步化

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

回答

1

我建议你使用额外的字段。添加四个colums到本地表中的Android:

  • TRANSACTING_FLAG:它设置为true,当你发布或更新服务器上的该资源
  • REQUEST_STATE:设置该标志张贴/更新/删除等
  • RESULT_CODE:将此字段设置为服务器为此特定资源接收的最后结果代码。
  • TIMESTAMP:期至极数据后,必须更新

工作流程很简单: 当您检索服务器的数据只是检查,如果你的资源的最后更新的时间戳优于已定义的缓存时间戳之前。如果时间戳较好,请执行更新数据的请求。交易布尔让你知道一个特定的资源实际上是与服务器同步的。结果代码可让您知道请求是否失败,并在网络可用时彻底重试。这样做可以保持本地数据库和远程数据库之间的依赖关系,因为在任何时候您都可以检查任何本地资源的“同步状态”,这要归功于之前看到的额外字段。

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

1

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

0

你可以看看查询通知,使用类似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