2010-05-04 40 views
0

我有一些查詢。首先讓我們來看一個正常應用程序所具有的iPhone應用程序流程。 (基於內容的應用程序)iPhone數據庫和服務器數據庫 - iPhone只更新修改

  • 應用推出&檢查網絡可用性
  • 如果網絡可用 - iPhone使用Web服務或API
  • 我們可以存儲這些響應(Web服務響應/ API將數據下載響應)到* .plist文件中。
  • 當我們需要更新數據時,再次將web服務名爲&再次將整個數據存儲爲* .plist文件。

  • 現在,假設 - 我在服務器上有一張表'電子書'&它有超過500個條目。

  • 調用API/Web服務將給出500條記錄的響應。
  • 確定 - 第一次可以等待所有響應(我們可能會使用LIBXML2作爲塊)
  • 但是如果我們經常使用web服務下載此文件會怎麼樣。

這裏有兩個缺點

  • 無線上網的不必要使用
  • iPhone的CPU開銷
  • 服務器的CPU開銷。

你正在接近我嗎?

假設服務器上沒有改變爲什麼iPhone需要再次調用API。意思是沒有變化的條目&條目是500,因爲它是那麼爲什麼要再次下載它?

讓我再次澄清 - 問題。

假設

  • 的應用程序有一個服務器+數據庫=客戶(目前爲500個記錄)
  • 有5個iPhone以檢索該數據
  • 所有iPhone下載500個記錄離線
  • 現在,服務器已添加新紀錄501
  • iPhone必須只下載1條記錄,而不是501條。

這怎麼可能?

回答

1

您可以爲每個條目添加時間戳。每次在服務器端進行更改,添加或刪除時,此時間戳都會更新。

進行查詢時,會提供一個字段,指示客戶端已知的最新時間戳。對於第一個查詢,這將會像Epoch一樣。對於後續查詢,它將是最後一次更新。

服務器將不得不篩選條目,因此它只會返回自提供的時間戳以來已更改的條目。

+0

@克勞斯布洛克 - 想法很好 - 你能給我一些簡要的介紹嗎? – 2010-05-04 09:45:24

+0

@Claus Broch - 因此,iPhone在調用Web服務時會給出時間戳,服務器和服務器將檢查每個數據庫記錄的時間戳記。 serverTimeStamp == iPhoneTimeStamp - 用於每條記錄。假設有500個iPhone應用程序用戶。服務器會發生什麼? – 2010-05-04 09:47:09

+1

我假設你在某種數據庫中存儲數據,所以它只是構造一個執行過濾的SQL語句(例如類似於「SELECT * from table mydata WHERE timestamp> = querystamp」)的事情。可能服務器會比每次提供完整內容的過濾更少。然而,這只是一個粗略的猜測,你的里程可能會有所不同。 – 2010-05-04 11:04:47

0

您可以非常輕鬆地在服務器應用上實施分頁,以便讓客戶限制檢索的條目數量。您還可以實現某種可以在iPhone客戶端上緩存的唯一標識符,然後當您請求更新時,您可以發送已緩存的最後一個項目的唯一標識符。當你的服務器發送響應時,它應該只提供比你緩存的最後一個項目更新的項目。

+0

爲什麼無線網絡需要尋呼? – nduplessis 2010-05-04 11:25:29