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