0

摘要:是否有任何知道的技術爲同步分塊數據?該塊被認爲是分開發送的數據塊。SQLite數據庫的高效同步 - 自動分塊與Web服務的提示?

這可能是一個相當廣泛的問題。如果有人建議,我會開始更專業的話題。

我將設計/編寫用於同步Android平板電腦數據庫(SQLite)與通過Web服務訪問的中央數據庫的代碼。該機制應反映以下事實:

  1. 它將用於應用範圍。應用程序相當簡單。無論如何,他們應該主要是離線工作。
  2. 數據量可以從小到大(達到平板電腦的技術限制)。
  3. Web服務實現可能是依賴於客戶的(即應用程序不能要求重寫Web服務;比方說,保留SOAP而不強制REST可能有歷史原因)。
  4. 在某些情況下,可以爲應用程序創建特定的新Web服務(在客戶站點使用相同的技術)。

問題的核心是如何最小化在同步期間移動的數據的大小。 的問題不在於如何實現異步下載。 (我cosidering由維吉爾Dobjanschi在Developing Android REST client applications提出的實現技術。)

到目前爲止,我已經找到了以下基本方式(沒有特定的順序):

  1. 數據量小蠻力即接收/發送所有內容,解決目標端的差異(在下載時在平板電腦上,在上傳時在遠程服務器上)。這裏(比方說)可以將整個數據庫表視爲最大可能的數據塊。
  2. 對數據記錄使用修改日期(timestamp),並根據上次同步記住的日期僅同步較新的記錄。這與添加和修改的記錄一樣好;但是,對於刪除的記錄,必須使用一些輔助機制。這裏可以將單個記錄視爲儘可能最小的數據塊。

以上是針對單個數據塊的同步。更現實的情況需要分塊更多的記錄。在這裏,我認爲塊是可以單獨傳輸的數據塊。當傳輸失敗時(即由於各種原因離線),只有失敗的塊和未傳輸的塊必須被同步。

對我來說很清楚的是塊應該有一定的大小(形成一個數據塊,大約10 kB)。

爲了降低通信成本,構建的塊包應該保持不變,直到塊的某些記錄更改,添加或刪除。無論是在中央服務器端還是在平板設備上構建,該塊都應該獨立構建。

其他塊應該不會受包含更改的數據的塊影響。通過這種方式,可以爲兩邊的每個塊計算SHA摘要,並且可以很容易地找到哪些塊應該同步。

是否有任何標準技術,論文,如何確定塊的例子?

感謝

回答

0

在我們Rethync SDK框架(開源的),我們就以下路線:每個對象的狀態信息是不透明的字段(一個可以使用數據或者一些獨特標記的時間戳或哈希 - 這是由開發人員決定的)。同步核心將此字段的值與保存的狀態進行比較,然後確定是否需要上載,下載,刪除等對象。

此方法要求狀態在同步後保存(框架允許您保存狀態)並用作在下一次同步期間檢測變化的基礎。

我歡迎您檢查Rethync是否正是您現在正在執行的操作。

相關問題