是否可以使用嵌套集表示来同步两个树?

时间:2014-11-17 15:38:31

标签: tree nested-sets data-synchronization

我使用嵌套集表示法在数据库中存储了一个对象树。每个树节点都有自己的对象(只有一个)。用户可以在在线应用程序中修改树。还有一组应用程序(pc,android,ios)可以脱机工作并修改其数据。可以在两个或更多设备上添加新的树叶或分支。

接下来,当应用程序获得Internet访问时,服务器和脱机应用程序之间的所有数据都会同步(REST API,XML)。成功同步后,服务器端和客户端的状态必须相同。

数据与平面数据结构同步(基于修改时间戳)没有问题,但我不知道是否可以使用树。同步应该是全自动的。我不希望用户干扰同步过程。

1 个答案:

答案 0 :(得分: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时,您将需要以某种方式处理冲突。