【问题标题】:How to sync two tree structures?如何同步两个树结构?
【发布时间】:2017-01-21 04:53:18
【问题描述】:

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

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

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

Folder1 > Folder2
Folder1 > Folder3

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

有没有其他有效的方法可以用来解决这个问题?就像使用不同的数据结构来存储层次结构一样

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

【问题讨论】:

  • 您可以发送有关自给定时间以来发生的变化的信息;无论数据的结构如何,都可以发送差异,而不是整个数据集。
  • 另一种选择是记住应用于树的修改操作序列(添加节点、删除节点、更新节点)并将其提供给客户端,以便他们可以在末端复制它们。

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


【解决方案1】:

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

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

为避免拉下整个节点结构,您可以在表格上放置一个标志,说明该行是否是新的/已更新,或者在您的表格上放置一些时间戳列。您必须在 sql 中包含所有过滤器,并确保您过滤的所有列都被索引。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-08
    • 1970-01-01
    • 1970-01-01
    • 2011-08-19
    • 1970-01-01
    相关资源
    最近更新 更多