如何同步两个树结构?

时间:2016-09-13 14:29:26

标签: c# asp.net data-structures tree windows-services

我有一个托管在Web服务器(IIS)和客户端桌面应用程序(Windows服务)上的Web应用程序(ASP .NET应用程序)。 Web应用程序在数据库表中具有树结构。因此对于例如有一个表[Tree]有列(NodeId,NodeName,ParentNodeId)。所以你有一个递归树结构。 在客户端,存在与服务器树结构相对应的文件夹结构。因此对于例如如果您在服务器端的树表中有以下条目

NodeId NodeName ParentNodeId
------ -------- ------------
1       Folder1  NULL
2       Folder2   1
3       Folder3   1 

然后你在客户端有一个文件夹结构,如

Folder1 > Folder2
Folder1 > Folder3

现在每当在服务器上更新树结构时,我都需要更新客户端上的文件夹结构。为此,我有一个Web服务,客户端以固定的间隔调用并获取整个树结构,然后相应地更新文件夹结构。但是,在每个调用中发送整个树结构对我来说似乎效率低下。

是否有其他有效的方法可用于解决此问题?就像使用不同的数据结构来存储层次结构一样

编辑1: 在服务器端,可以有任何改变,例如在将整个节点子集移动/复制到新的父节点或删除整个节点子集

1 个答案:

答案 0 :(得分:0)

您的结构似乎是一种标准的亲子关系,所以乍一看我没有看到它的问题。

您可以通过SqlDependency类使用实时方法,而不是您当前使用的固定间隔方法。

为了避免拉下整个节点结构,您可以在表上放置一个标志,指出该行是否为新/已更新或在表上放置一些时间戳列。您必须在sql中包含任何过滤器,并确保对您过滤的任何列都编制索引。