首页> 中国专利> 用于维护基于树形结构的目录关系的方法和系统

用于维护基于树形结构的目录关系的方法和系统

摘要

提供了一种用于维护基于树形结构的目录关系的方法和系统。所述系统包括:变更检测单元,用于接收来自外部或内部的变更请求,并根据变更请求来设置变更标志和记录与变更请求相关的变更信息;轮询任务单元,用于以预定时间间隔来轮询变更标志;查询及树组装单元,用于根据变更信息来在对变更信息去重之后组装树形结构;以及计算单元,用于根据所述查询及树组装单元组装的树形结构来生成目录树。

著录项

  • 公开/公告号CN104750849A

    专利类型发明专利

  • 公开/公告日2015-07-01

    原文格式PDF

  • 申请/专利号CN201510172801.0

  • 发明设计人 谭龙;

    申请日2015-04-13

  • 分类号G06F17/30(20060101);

  • 代理机构11219 中原信达知识产权代理有限责任公司;

  • 代理人李宝泉;周亚荣

  • 地址 100080 北京市海淀区杏石口路65号西杉创意园四区11C楼东段1-4层西段1-4层

  • 入库时间 2023-12-18 09:38:21

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2018-06-01

    授权

    授权

  • 2015-07-29

    实质审查的生效 IPC(主分类):G06F17/30 申请日:20150413

    实质审查的生效

  • 2015-07-01

    公开

    公开

说明书

技术领域

本发明涉及一种维护基于树形结构的目录关系的方法和系统。

背景技术

目前,在许多系统中以树形结构的目录关系来管理系统中的文件。

例如在用于团队协作系统的电子看板系统中,对看板的文件管理 是其不可或缺的一部分,且这些文件一般都隶属于一个虚拟目录树, 树的结构是具有树形结构的二维模型。树形结构的目录能够让看板实 践者能更清晰的浏览目录结构及管理叶子文件,也便于看板对应的团 队成员实时掌握看板的文件汇总数据。

传统的基于树形结构的目录关系维护方法采用异步定时刷新或同 步实时更新关联的节点数据。

异步定时刷新过程如下:外部或内部条件导致节点数据变更(增 删改),记录变更历史;定时任务启动,根据时间读取并遍历历史记 录;根据历史记录递归查询与其关联的整棵树,然后从下往上计算父 节点列数据(总大小、节点数、按类型汇总数据等),并批量更新; 清除变更的历史记录;进入下一次定时任务。

然而,异步定时刷新降低了虚拟目录树数据的实时性,并且递归 查询与变更节点有关联的整棵树,从而增加了IO交互次数与网络带宽 占用率。

另一方面,同步实时更新在并发量大时会出现短时间内重复更新 相同父节点的情况,并增加行锁的概率,影响整个系统的性能,并且 需考虑分布式锁从而成本高且会造成数据的不一致性。

因此,期望提供一种改进的用于维护基于树形结构的目录关系的 方法和系统。

发明内容

为了解决现有技术中的上述缺点和问题中的至少一个而提出本发 明。基于现有技术存在的缺点,本发明提供了一种改进的用于维护基 于树形结构的目录关系的方法和系统。

根据本发明的方法和系统使用集中缓存存储变更标志,便于在轮 询任务检测到变更时,过滤掉重复的变更信息(提升了CPU的效率), 根据去重后的变更节点依次执行,避免了多实例导致数据的不一致性 问题;轮询任务一旦检测到变更就立即进行计算,保证了数据的实时 性;此外,在本发明中,被设计为存在多个实际的根节点,缩小了查 询树的范围,提升网络吞吐量,且每条任务数据都增加了对应根节点 的冗余,大大减少了查询时的IO次数,提升了性能。

根据一个方面,本发明提出了一种用于维护基于树形结构的目录 关系的系统,包括:

变更检测单元,用于接收来自外部或内部的变更请求,并根据变 更请求来设置变更标志和记录与变更请求相关的变更信息;

轮询任务单元,用于以预定时间间隔来轮询变更标志;

查询及树组装单元,用于根据变更信息来在对变更信息去重之后 组装树形结构;以及

计算单元,用于根据所述查询及树组装单元组装的树形结构来生 成目录树。

可选地,所述变更信息包括与所述变更请求相关的节点的ID或标 识、父节点的ID或标识、变更时间中的一个或多个。

可选地,所述变更检测单元在设置变更标记的同时继续执行主业 务逻辑。

可选地,当所述变更标志指示节点未变更时,所述轮询任务单元 确定所述查询及树组装单元是否已超时未执行,如果是则唤醒所述查 询及树组装单元。

可选地,所述查询及树组装单元按时间倒序来查询变更信息,并 根据父节点ID或标识去重。

可选地,所述查询及树组装单元进一步根据去重后的变更信息来 查询与变更信息对应的整个目录树。

可选地,所述查询及树组装单元进一步根据所查询出的节点列表 通过预定算法来组装树形结构。

可选地,所述计算单元采用从下而上的方法递归汇总数据到每个 父节点,直到递归到根节点为止。

可选地,所述汇总数据至少包括大小、叶子节点数、按类型汇总 数据中的至少一个。

根据另一个方面,本发明提出了一种用于维护基于树形结构的目 录关系的方法,包括:

接收并拦截对树形结构的目录的变更请求;

设置变更标志以指示节点是否已变更,并记录与变更请求相关的 变更信息;

以预定时间间隔来轮询变更标志;

当确定节点已变更时,根据变更信息来在对变更信息去重之后组 装树形结构;以及

根据组装的树形结构来生成目录树。

可选地,所述变更信息包括与所述变更请求相关的节点的ID或标 识、父节点的ID或标识、变更时间中的一个或多个。

可选地,在设置所述变更标记的同时继续执行主业务逻辑。

可选地,所述方法进一步包括:当确定节点未变更时,确定是否 已超时未执行组装树形结构任务;并且如果是的话,则自动调用组装 树形结构任务。

可选地,根据变更信息来在对变更信息去重之后组装树形结构包 括按时间倒序来查询变更信息,并根据父节点ID或标识去重。

可选地,根据变更信息来在对变更信息去重之后组装树形结构进 一步包括根据去重后的变更信息来查询与变更信息对应的整个目录 树。

可选地,根据变更信息来在对变更信息去重之后组装树形结构进 一步包括根据所查询出的节点列表通过预定算法来组装树形结构。

可选地,采用从下而上的方法递归汇总数据到每个父节点,直到 递归到根节点为止。

可选地,所述汇总数据至少包括大小、叶子节点数、按类型汇总 数据中的至少一个。

附图说明

通过下面结合附图进行的描述,本发明一些示范性实施例的上述 和其他方面、特征和优点对于本领域技术人员来说将变得显而易见, 其中:

图1是根据本发明的一个实施例的用于维护基于树形结构的目录 关系的系统的示意图;以及

图2是根据本发明的一个实施例的用于维护基于树形结构的目录 关系的方法的流程图。

具体实施方式

提供参考附图的下面描述以帮助全面理解本发明的示范性实施 例。其包括各种细节以助于理解,而应当将它们认为仅仅是示范性的。 因此,本领域普通技术人员应当认识到,可以对这里描述的实施例做 出各种改变和修改,而不会背离本发明的范围和精神。同样,为了清 楚和简明,省略了对公知功能和结构的描述。

图1是根据本发明的一个实施例的用于维护基于树形结构的目录 关系的系统的框图。

如图1中所示,根据本发明的用于维护基于树形结构的目录关系 的系统包括变更检测单元110、轮询任务单元120、查询及树组装单元 130、计算单元140。

变更检测单元110用于接收来自外部或内部的变更请求,并根据 变更请求来设置变更标志。

在本发明中,变更请求可以包括例如上传文件、删除文件、新增 目录、删除目录等。

例如,当在客户端处的用户发起请求以编辑信息或者新上传某个 文件或者删除某个文件(或者新增/删除某个虚拟目录)时,变更检测 单元110可以接收并拦截对树形结构的目录的变更请求。

在接收到变更请求后,变更检测单元110可以设置变更标志以指 示节点是否已变更,并记录与变更请求相关的变更信息。所述变更标 志例如可以被设置为真或假,或者为0或1,等等。所述变更信息例如 可以包括与变更请求相关的节点的ID或标识、父节点的ID或标识、 变更时间中的一个或多个。

作为一个非限制性示例,所述变更信息例如可以为“节点ID或标 识;父节点ID或标识;变更时间”。例如,当变更请求涉及节点ID 或标识为“1.1”、父节点为“1”以及变更时间为“2015-01-2013:29:52” 时,所述变更信息可以为“1.1;1;2015-01-2013:29:52”。如本领域 技术人员所清楚的,上述变更信息仅是一个示例,所述变更信息可以 根据需要而采取其它适当的格式。

应注意的是,变更检测单元110在设置变更标记的同时可以继续 执行主业务逻辑,即变更业务本身。例如,如果变更请求涉及上传文 件,变更检测单元110在设置变更标记的同时可以继续上传文件。

轮询任务单元120用于以预定时间间隔来轮询变更标志。例如, 当变更标志指示节点已变更时,轮询任务单元120可以发送指示给查 询及树组装单元130。此外,当变更标志指示节点未变更时,轮询任务 单元120可以可选地确定查询及树组装单元130是否已超时未执行(例 如超过30秒未执行),如果是则可以唤醒查询及树组装单元130,从 而使得在节点变更通知失败时也能保证虚拟目录树的数据保持一致 性。

应注意,所述预定时间间隔应根据实际情况以及经验来适当设定, 以保证数据的实时性并且不需要使用分布式锁。例如,可以将所述预 定时间间隔设置为0.2-2秒之间的任何一个值。替选地,可以将所述预 定时间间隔设置为0.4-1秒之间的任何一个值。当然,也可以根据实际 情况将所述预定时间间隔设置为其它值。此外,超时时间也可以根据 需要进行设置,例如设置为10-60秒之间的任何一个值。

查询及树组装单元130用于根据变更信息来在对变更信息去重之 后组装树形结构。

例如,查询及树组装单元130可以首先按时间倒序来查询变更信 息,并根据父节点ID或标识去重。例如,查询及树组装单元130可以 只保留同一父节点的最新的变更信息。

假如变更信息如下:

节点ID或标识 父节点ID或标识 变更时间 1.1 1 2015-01-2013:29:52 2.1 2 2015-01-2111:25:16 1.2 1 2015-01-1916:25:22

查询及树组装单元130在根据父节点ID或标识去重时,由于存在 两条与父节点为“1”相关的记录并且第一条变更信息比第三条变更信 息新,所以去重之后的变更信息如下:

节点ID或标识 父节点ID或标识 变更时间 1.1 1 2015-01-2013:29:52 2.1 2 2015-01-2111:25:16

查询及树组装单元130可以根据去重后的变更信息来查询与变更 信息对应的整个目录树。例如,查询及树组装单元130可以根据节点 标识以及冗余根节点来查询与变更信息对应的整个目录树。作为一个 示例,所查询出的整个目录树可以如下所示的形式:

节点ID或标识 节点名称 父节点ID或标识 根节点ID或标识 节点层级 1.1 a.doc 1 0 2 1 f1 0 0 1 0 r     0 1.2 b.doc 1 0 2

查询及树组装单元130可以根据所查询出的节点列表通过预定算 法来组装树形结构。所述预定算法可以例如是回溯算法。当然,上述 回溯算法仅是一个示例,所述预定算法也可以采用其它适当算法。所 组装的树形结构可以如下所示的形式:

节点ID或标识 节点名称 父节点ID或标识 根节点ID或标识 节点层级 0 r     0 1 f1 0 0 1 1.1 a.doc 1 0 2 1.2 b.doc 1 0 2

查询及树组装单元130可以在组装树形结构不成功的情况下清除 变更信息。

计算单元140用于根据查询及树组装单元130组装的树形结构来 生成目录树。例如,计算单元140可以采用从下而上的方法递归汇总 数据到每个父节点,直到递归到根节点为止。所述汇总数据可以包括 例如大小、叶子节点数、按类型汇总数据等。计算单元在生成目录树 之后可以将所生成的目录树持久化,即将所生成的目录树存储到存储 设备上。例如,所生成的目录树可以如下所示的形式:

节点ID或标识 节点名称 大小 叶子节点数 按类型汇总 0 r 107kb 3 doc:2,txt:1 1 f1 104kb 2 doc:2 1.1 a.doc 88kb     1.2 b.doc 16kb     2 f2 3kb 1 txt:1 2.1 c.txt 3kb    

此外,计算单元140在持久化之后可以清除已处理的变更信息。

图2是根据本发明的一个实施例的用于维护基于树形结构的目录 关系的方法的流程图。

如图2中所示,在步骤210中,接收并拦截对树形结构的目录的 变更请求。该变更请求可以来自内部或诸如客户端的外部,并且该变 更请求可以包括例如上传文件、删除文件、新增目录、删除目录等。

在步骤220中,在接收到变更请求后,设置变更标志以指示节点 是否已变更,并记录与变更请求相关的变更信息。所述变更标志例如 可以被设置为真或假,或者为0或1,等等。所述变更信息例如可以包 括与变更请求相关的节点的ID或标识、父节点的ID或标识、变更时 间中的一个或多个。

此外,在设置变更标记的同时可以继续执行主业务逻辑,即变更 业务本身。

在步骤230中,以预定时间间隔来轮询变更标志。例如,可以将 所述预定时间间隔设置为0.2-2秒之间的任何一个值。替选地,可以将 所述预定时间间隔设置为0.4-1秒之间的任何一个值。当然,也可以根 据实际情况将所述预定时间间隔设置为其它值。此外,超时时间也可 以根据需要进行设置,例如设置为10-60秒之间的任何一个值。

在步骤240中,当在步骤230中确定节点已变更,根据变更信息 来在对变更信息去重之后组装树形结构。

可选地,根据本发明的方法可以进一步包括:当在步骤230中确 定节点未变更时,可以确定是否已超时未执行(例如超过30秒未执行) 组装树形结构任务;并且如果是的话,则可以自动调用组装树形结构 任务,从而使得在节点变更通知失败时也能保证虚拟目录树的数据保 持一致性。

根据变更信息来在对变更信息去重之后组装树形结构可以包括按 时间倒序来查询变更信息,并根据父节点ID或标识去重,例如可以只 保留同一父节点的最新的变更信息。

根据变更信息来在对变更信息去重之后组装树形结构可以进一步 包括根据去重后的变更信息来查询与变更信息对应的整个目录树,例 如可以根据节点标识以及冗余根节点来查询与变更信息对应的整个目 录树。

根据变更信息来在对变更信息去重之后组装树形结构可以进一步 包括根据所查询出的节点列表通过预定算法来组装树形结构。所述预 定算法可以例如是回溯算法。当然,上述回溯算法仅是一个示例,所 述预定算法也可以采用其它适当算法。可以在组装树形结构不成功的 情况下清除变更信息。

在步骤250中,根据组装的树形结构来生成目录树,例如可以采 用从下而上的方法递归汇总数据到每个父节点,直到递归到根节点为 止。所述汇总数据可以包括例如大小、叶子节点数、按类型汇总数据 等。在生成目录树之后可以将所生成的目录树持久化,即将所生成的 目录树存储到存储设备上。

在将所生成的目录树持久化之后,可以清除已处理的变更信息。

此外,在本发明中,可以根据业务或其它实际情况将目录树设计 为多个目录树,例如在电子看板应用中可以将一个看板对应于一个虚 拟目录树,逻辑上分离。多个实际的根节点大大缩小了查询树的范围, 且每条任务数据都增加了对应根节点的冗余,大大减少了查询时的IO 次数,提升了性能。

应指出的是,上面分别对本发明的方法和系统实施例分别进行了 描述,但是对一个实施例描述的细节也可应用于另一个实施例。

虽然本说明书包含许多特定实施方式细节,但是不应当将这些细 节解释为对任何发明或可以主张的内容的范围的限制,而应当解释为 对可以特定于特定发明的特定实施例的特征的描述。还可以将在本说 明书中在分离的实施例的情境中描述的某些特征组合在单个实施例中 实现。相反地,也可以将在单个实施方式的情境中描述的各个特征分 离地在多个实施方式中实现或在任何适当的子组合中实现。此外,尽 管可能在上面将特征描述为在某些组合中起作用,甚至最初主张如此, 但是可以在一些情况下将来自所主张的组合的一个或多个特征从组合 中删去,并且可以将所主张的组合指向子组合或者子组合的变体。

类似地,虽然在附图中以特定次序描绘了操作,但是不应当将这 理解为需要以所示的特定次序或者以连续次序执行这样的操作、或者 需要执行所有图示的操作才能达到期望的结果。在某些情况下,多任 务以及并行处理可以是有利的。此外,不应当将在上述实施例中的各 种系统组件的分离理解为在所有实施例中均需要这样的分离,而应当 理解的是,通常可以将所描述的程序组件和系统集成到一起成为单个 软件产品或封装为多个软件产品。

计算机程序(也称作程序、软件、软件应用、脚本或代码)可以 以任何形式的编程语言编写,所述编程语言包括编译或解释语言、或 者说明性或过程语言,并且其可以以任何形式部署,包括作为独立程 序或作为模块、组件、子程序或适于在计算环境中使用的其它单元。 计算机程序没有必要对应于文件系统中的文件。可以将程序存储在保 持其它程序或数据的文件(例如,存储在标记语言文档中的一个或多 个脚本)的一部分、专用于讨论中的程序的单个文件或者多个协调文 件(例如,存储一个或多个模块、子程序或部分代码的文件)中。

上述具体实施方式,并不构成对本发明保护范围的限制。本领域 技术人员应该明白的是,取决于设计要求和其他因素,可以发生各种 各样的修改、组合、子组合和替代。任何在本发明的精神和原则之内 所作的修改、等同替换和改进等,均应包含在本发明保护范围之内。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号