2014-11-17 45 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时,您需要以某种方式处理冲突。