2014-11-17 46 views
1

我有一個對象樹存儲在數據庫中使用嵌套集表示。每個樹節點都有自己的對象(只有一個)。樹可以由在線應用程序中的用戶修改。還有一組應用程序(pc,android,ios)可以脫機工作並修改其數據。新的葉子或分支可以添加到兩個或更多設備上。是否可以使用嵌套集合表示來同步兩棵樹?

接下來,當應用程序獲得Internet訪問權限時,服務器和離線應用程序之間的所有數據都將同步(REST API,XML)。成功同步後,服務器和客戶端的狀態必須相同。

數據與平面數據結構同步(基於修改時間戳)沒有問題,但我不知道樹是否可行。同步應該是全自動的。我不希望用戶干擾同步過程。

回答

0

由於嵌套集表示依賴於節點標記,平均而言,層次結構更改(插入,移動,刪除)涉及標記更新一半樹節點(右半部分來自更改節點的樹),因此可以'只是自己發送節點(記錄)數據。如果你應用它會破壞主樹標記。

我建議你做的是要排隊的離線設備上的變化,比如:

queue.append({'method': 'insert', 'parentId': 123, 'name': 'foo'}) 
queue.append({'method': 'delete', 'nodeId': 456}) 
queue.append({'method': 'move', 'nodeId': 789, 'newParentId': 234}) 

然後嘗試在服務器端重新申請隊列。正如你所說你在同步平面數據方面沒有問題,你必須有一些衝突解決策略。因此,當用戶A刪除node:123,並且稍後用戶B嘗試將子節點追加到node:123時,您需要以某種方式處理衝突。