繁体   English   中英

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

[英]Syncronizing Android client with remote SQL-server database, using web service

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

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

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

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM