2013-02-11 50 views
0

我們有一個需要執行離線訪問的移動(Android和iPhone)應用程序。我想了解什麼是以更簡化的方式更新應用程序端的SqLite數據庫的最佳方式。使用SqLite在移動應用程序上實現離線訪問的最佳方式

  1. 的一種方式,我發現是通過Web服務發送JSON格式的所有對象,有一個時間戳檢查,看是否有更新。如果有更新,則所有表格都會被截斷並在應用程序端重新插入。我覺得它效率很低。

  2. 另一種方法是通過Web服務發送sql語句(用JSON包裝)。第一次發送所有插入記錄,如果有新記錄或更新,則插入記錄和更新記錄。我覺得這種方法很不安全。

什麼是執行使用RESTful Web服務的最佳方式

+0

對數據庫的更改包含哪些內容?插入/更新/刪除個別元素,或一次清除多個元素的更新? – 2013-02-11 07:51:12

+0

許多插入/更新/刪除 – Shaolin 2013-02-11 07:54:07

+0

您的第一個選擇是實施的最佳途徑,我不明白爲什麼你覺得它非常低效? – TNR 2013-02-11 07:56:18

回答

0

有幾個選項,例子幾乎沒有一個詳盡的清單,但更多的開始左右你的思想;

  • 要優化版本1,您可以在服務器端創建一個觸發器,用於更新已更改行的版本字段。這樣,如果客戶端知道它具有版本47並且服務器具有版本52,那麼您只需要發送版本號在48到52之間的行即可使客戶端保持最新狀態。如果更新大多是逐行更新,則不會'更新所有綠色行到puce',仍然會發送大量數據。

  • 要使版本2更安全一些,可以發送除表名以外的所有SQL,從而鎖定對特定操作(例如UPDATE/INSERT/DELETE,無SELECT)的更改並鎖定到特定表(即沒有更新到同一數據庫中的其他表)。這可能有點難以維護,但如果數據庫的大部分可能受到單個UPDATE影響,則效果會更好。

  • 將對數據庫的操作分解爲業務操作並將其發送出去。例如,業務操作可以是「付款:用戶2,$ 47」,操作本身發送給客戶端,然後將「付款」映射到數據庫中的更新。這需要操作的數量相當小並且被定義(儘管如此,嘗試定義它們的想法很少),但是對於逐行掃描更新並且可能使用最少數量的數據來獲取事物最多同步(如果您對操作進行編號,以便您只在客戶端尚未收到它們時才發送一次)它還爲您提供免費的審計日誌,用戶餘額不僅僅是變化,您知道是什麼它更改。

個人而言,我會去的選項3,如果我有一個選擇,因爲我想知道數據庫的更新其實意味着,當他們做了,但對於現有的系統也可能是太多工作。

相關問題