欧美一区二区三区,国内熟女精品熟女A片视频小说,日本av网,小鲜肉男男GAY做受XXX网站

兩個設備同步的原理

呂致盈2年前14瀏覽0評論

兩個設備同步的原理?

分布式數據庫互備

分布式應用配置同步

多設備應用數據同步

本文想借此展開相關的理論和實例來深入研究一下數據同步問題。

數據同步理論

同步方式

同步客戶端服務器 (Synchronous Client-Server, S-CS)

應用直接和遠程服務通訊,將數據同步

實例:微信發送一條消息,只有消息發送完成過后才會存儲在本地消息發送成功列表中,未發送成功會提示重新發送

異步客戶端服務器 (Asynchronous Client-Server, A-CS)

應用將數據保存在本地,應用保持本地數據和遠程數據的同步(后臺運行)

實例:Mac QuickTime 錄制了一段視頻,存儲在文件系統中,iCoud 自動將文件系統中的數據同步到云端

異步對等方式 (Asynchronous Peer-to-Peer, A-P2P)

應用數據保存在本地,應用保持本地數據和其他端的數據同步, 每個端存儲數據的完成備份,服務器端不存在備份。

數據同步要素

識別

對象識別需要使用全局標識符 uuids (universaaly Unique identifiers)

變化追蹤

描述算法如何確定自上一次數據同步后, 數據發生了哪些變化, 然后本地存儲應該如何修改。

顆粒大小: 當某個屬性字段被修改過后,確定追蹤這個字段還是追蹤整個實例

記錄變化: 是否變化簡單情況可以用一個 Boolean 的標示來表示, 也可能需要用日志來記錄變化并附加時間戳

軟刪除:

沖突解決

當多端都在共同修改一個實例的時候,就會出現沖突。

簡單情況: 讀寫被認為是原子操作,解決沖突可以看成選擇什么版本的存儲。 如 iCloud 出現沖突時,應用提示用戶選擇文檔的什么版本

變化優先級策略:

最近一次的同步操作確定級別最高, 所有這一次同步操作的變化覆蓋之前存儲的數據,

最近一次修改時間戳確定優先級別

避免隨機策略,總是保證一致的選擇策略

對等同步通訊(S-P2P)

假設我們有一個像 iTunes 那樣的 Mac 應用程序,它可以通過 USB、藍牙或者 Wi-Fi 和 iPhone 進行同步通訊。(憑借快速的本地網絡,我們不用太在意限制數據傳輸大小)

第一步: 當 iPhone 第一次同步的時候,兩個應用程序通過 Bonjour 發現對方,然后 Mac 應用程序將它的所有存儲數據壓縮,通過套接字將壓縮后的文件傳遞給 iPhone 應用程序,然后 iPhone 將其解壓并安裝。

第二步: 現在假設用戶使用 iPhone 對已經存在的對象做了修改 (比如,給一首歌打了星級)。該設備上的應用程序給該對象設置了一個 Boolean 型的標記(比如,changedSinceSync),用來表示該對象是新的還是已經被修改過的。

第三步:當下一次同步發生的時候,iPhone 應用程序將它的所有數據存儲壓縮并回發給 Mac。Mac 裝載這些數據,尋找被修改的實例,然后更新它自己對應的數據。然后 Mac 又將更新后的數據存儲的完整拷貝發送給 iPhone,用來替代 iPhone 已經存在的數據存儲,然后整個流程又重新開始。

總結來說,同步操作需要設備能夠向其他設備傳輸數據,并且能夠決定哪些被修改、合并,然后回傳更新后的數據。 保證了這兩個設備同步之后具有相同的數據,所以,有很強的健壯性。

客戶端-服務器同步通訊(S-CS)

當加入了服務器的時候,服務器是為了能夠更加靈活地同步數據,但是它是以數據傳輸和存儲為代價的。 需要盡可能地減少通訊開銷,所以來回地拷貝整個數據是不可行的。

前置條件:假設數據存儲在服務器上的數據庫中,并且每一個對象都有一個最后更新的時間戳。

第一步:當客戶端程序第一次同步的時候下載所有的數據,然后建立一個本地存儲,同時也在本地記錄同步的時間戳。

第二步:當客戶端程序發生改變的時候,它會更新對象的最后更新時間戳。

第三步:當下一次同步發生的時候,客戶端會決定自上一次同步后,哪些對象做了修改,然后僅把被修改的對象發送給服務器。服務器會合并這些修改。如果服務器對某一個對象的拷貝被另一個客戶端做了修改,那么它會以最近的時間戳為準來保存修改。然后服務器會回傳所有比上一次從客戶端發來的時間戳新的變化。這需要考慮到合并的問題,刪除所有覆蓋的變化。

也許有很多不同的方法。比如,你可以為每一個屬性引入一個時間戳,然后在屬性粒度級去追蹤變化。或者你可以在客戶端合并所有的數據,然后將合并后的結果發回給服務器,這實際上是互換了角色。但是,基本說來,一個設備發送修改結果給其他設備,然后接收方合并并回發合并后的結果。

刪除需要考慮更多。因為一旦刪除了一個對象,就不可能跟蹤它了。一種選擇是使用 軟刪除 ,也就是對象并不是被真正的刪除,而是標記為刪除 (比如使用一個 Boolean 屬性)。 (這和在 Finder 中刪除一個文件類似。只有當你清空的垃圾桶之后,它才被永久地刪除。)

客戶端-服務器異步通訊 (A-CS)

異步的數據同步框架和服務的吸引力在于它們提供了現成的解決方案。 S-CS 模式是要定制的,也就是說得為不同的應用程序以及不同的平臺編寫不同的代碼。

異步服務 (比如, Dropbox Datastore API 和 Wasabi Sync) 通常提供框架,讓應用程序開發者用起來好像是本地數據存儲。這些框架在本地保存修改,然后在后臺控制與服務器的同步。

A-CS 和 S-CS 的一個最主要的區別在于,A-CS 框架額外提供的抽象層,屏蔽了直接參與同步的客戶端代碼。這也意味著,同一服務可以用于所有的數據模型,而不是特定的一種模型。