2011-04-04 163 views
4

我正在同步到Web應用程序的Android應用程序的規劃階段。網絡端將用Python編寫,可能是Django或金字塔,而Android應用將是簡單的java。我的目標是在沒有數據連接的情況下讓Android應用程序工作,不包括應用程序的社交/網絡方面。Android應用程序數據庫與遠程數據庫同步

這將是一個普通的應用程序,所以我想堅持一些可以通過在市場上輕鬆點擊安裝的東西,而不需要像CloudDB for Android一樣單獨下載。

我還沒有找到任何支持此功能的數據庫,所以我會自己寫。在編寫同步邏輯時需要注意的一點是,多個用戶可以寫入的用戶之間會有一些共享數據。這是一個獨立的項目,所以我想我會通過這個來看看我是否完全脫離基地。

  • 該應用程序將處理本地保存到本地sqlite數據庫,然後將消息發送到服務,該服務將嘗試將這些更改同步到遠程數據庫。
  • 同步服務將在檢查本地應用程序的消息(即其他用戶對共享數據的更改)和將本地更改寫入遠程服務器之間交替進行。
  • 所有數據將有一個跟蹤更改的時間戳
  • 從應用程序寫入服務器時,如果服務器有更新的信息,用戶將被警告衝突並提示覆蓋服務器有或放棄本地更改。如果自應用程序上次讀取數據後服務器尚未更新,請處理更新。
  • 當數據從服務器傳送到應用程序時,如果服務器有較新的數據覆蓋本地數據,否則將丟棄它,因爲它將在下一次由應用程序更新服務器時處理。

這裏的一些問題:

1)這聽起來有點小題大做?有沒有更簡單的方法來處理這個問題?

2)該處理在哪裏進行?在客戶端還是服務器上?我認爲客戶端的優勢在於服務器上的處理較少,但是如果它在服務器上,這使得更容易實現其他客戶端。

3)我應該如何處理來自服務器的更新?增量投票或彗星/ websocket?有一點要記住,我寧願在Webfaction上進行最小安裝,因爲這是初創公司。

一旦解決了這些問題,我打算爲極客社區提供解決方案。

回答

0

1)看起來像這是很好的方式來管理您的本地&遠程更改+支持離線工作。我不認爲這是多餘的

2)我認爲,你應該用本地時間戳本地緩存用戶的變化,直到同步完成。然後,服務器應該管理所有處理:跟蹤當前版本,提交和回滾更新嘗試。客戶端處理較少=對您更好! (更容易支持和實現)

3)如果我想支持離線模式,我會選擇輪詢,因爲在離線狀態下,您不能保持套接字打開,並且每次連接Internet時都必須重新打開它被恢復。

PS:看起來像這是VEEERYY OLD的問題... LOL

相關問題