数据库中快速搜索树形结构数据的方法、存储介质与流程

文档序号:15695073发布日期:2018-10-19 18:54阅读:457来源:国知局
数据库中快速搜索树形结构数据的方法、存储介质与流程
本发明涉及数据检索领域,具体说的是一种数据库中快速搜索树形结构数据的方法、存储介质。
背景技术
:在树形结构的应用交互中,普遍存在对树结构进行模糊匹配的功能。例如公司的部门组织结构从上到下就是树形的,公司规模越大,结构的层级也就越多,于是允许用户输入关键字在树形结构中进行模糊搜索。传统的模糊搜索技术是基于树的遍历算法,例如广度优先或者深度优先算法,但是其运用存在以下不足之处:1、在空间复杂度上,对树的遍历需要将数据以树的结构存储在内存中,这对于现代应用来说就产生了额外的内存成本,因为现代应用的数据都是以表结构存储在数据库中。在数据量大的情况下,这种成本可以说非常高的。2、在时间复杂度上,树遍历的时间复杂度为o(v+e),其中,v表示节点的数量,e表示节点的连接数。例如就附图1的树形结构,遍历这棵树的时间复杂度为o(5+4)。因此,有需求能够提供一种克服上述不足的全新的基于树形结构高效搜索方法,以及存储实现该方法的程序的计算机可读存储介质。技术实现要素:本发明所要解决的技术问题是:提供一种全新的数据库中快速搜索树形结构数据的方法、存储介质,能够同时降低搜索实现在空间和时间上的复杂度。为了解决上述技术问题,本发明采用的技术方案为:数据库中快速搜索树形结构数据的方法,包括:存储各个节点对应树形结构的节点路径至数据库表;接收搜索树形结构中一节点下包含一节点字段的所有节点的请求;从所述数据库表中搜索获取包含所述一节点字段,且对应的节点路径包含所述一节点的节点。本发明提供的另一个技术方案为:一种计算可读存储介质,其上存储有计算机程序,所述程序在被处理器调用时,能够实现上述数据库中快速搜索树形结构数据的方法所包含的步骤。本发明的有益效果在于:本发明区别于现有的搜索方式存在空间复杂度和空间复杂度较高的不足,通过在数据库表中,对应各个节点增加其节点路径的存储,使得在接收到对应一目标节点的模糊搜索时,只需基于数据库表遍历结构树的所有节点,在判断各节点是否包含关键字的同时,同时判断各节点对应的节点路径是否包含搜索请求对应的目标节点,即可快速且准确的获取目标节点及其下所有子节点中符合检索要求的节点。本发明直接基于数据库中的表结构进行检索匹配即可,无需产生额外的内存成本;同时,在时间复杂度上,只受限于节点数量,而无需考虑节点的连接数,能够显著提高搜索效率。对于现如今越来越大的数据量发展趋势而言,本发明在空间和时间上都具有明显的优势,因而具备广阔的运用前景。附图说明图1为某公司的组织架构示意图;图2为本发明一种数据库中快速搜索树形结构数据的方法的流程示意图;图3为本发明获取各节点对应节点路径的流程示意图;图4为本发明基于数据库表进行搜索匹配的流程示意图。具体实施方式为详细说明本发明的技术内容、所实现目的及效果,以下结合实施方式并配合附图予以说明。本发明最关键的构思在于:在数据库表中,对应各个节点增加其节点路径的存储,在模糊搜索时只需基于数据库表遍历结构树的所有节点,同时判断各节点是否包含关键字且对应的节点路径是否包含搜索请求对应的目标节点即可快速且准确的获取搜索结果。请参照图2,本发明提供一种数据库中快速搜索树形结构数据的方法,包括:存储各个节点对应树形结构的节点路径至数据库表;接收搜索树形结构中一节点下包含一节点字段的所有节点的请求;从所述数据库表中搜索获取包含所述一节点字段,且对应的节点路径包含所述一节点的节点。从上述描述可知,本发明的有益效果在于:提供一种快速搜索算法,可以将时间复杂度减低为o(v),从而实现更加高效的搜索;搜索效率远高于传统的算法,而且没有额外的内存开销(直接做数据库查询操作)。进一步的,请参照图3,还包括:遍历数据库表中的各个节点;若当前遍历到的节点为根节点,则获取仅包含当前节点的节点路径,并将其与当前节点关联;若当前遍历到的节点为其他节点,则获取包含其所有父节点和当前节点的节点路径,并将其与当前节点关联。由上述描述可知,只需花费遍历各个节点的时间,无需考虑各节点的连接数;只需针对各个节点基于数据库表判断表中两项参数即可快速、准确的获取结果,搜索过程简便且效率高。进一步的,请参照图4,所述获取包含其所有父节点和当前节点的节点路径,具体为:获取当前节点对应树形结构的所有父节点;依据父到子的顺序对所述所有父节点和当前节点进行排序,得到节点路径。由上述描述可知,节点路径对应树形结构的层级顺序进行存储,不仅更直观,不易出错,且有助于进一步提高判断的效率。进一步的,所述节点路径由节点id和分隔符组成,各个节点id之间用分隔符分隔。由上述描述可知,节点路径中用节点id表示对应节点,且各节点id之间用分隔符隔开,使得节点路径更明确,易于读懂。进一步的,所述从所述数据库表中搜索获取包含所述一节点字段,且对应的节点路径包含所述一节点的节点,具体为:获取所述请求中所述一节点对应的节点id,以及所述一节点字段;遍历树形结构中的所有节点,判断当前遍历到的节点对应的节点名称是否包含所述一节点字段,并且当前遍历到的节点对应的节点路径中是否包含所述节点id;若是,则获取当前节点对应的节点名称,继续遍历下一个节点;输出所获取的节点名称作为搜索结果。由上述描述可知,直接基于节点id和节点字段这类简单字符在数据库表中进行匹配,能够显著提高搜索的效率,同时又能保证搜索的准确性。进一步的,通过在数据库表中增加一个字段来存储各个节点对应的节点路径。由上述描述可知,实现本发明的前提只需在数据库表中对应各个节点新增一字段即可,不仅不用产生额外的内存成本,而且也不会过多占用数据库资源,实用性强。本发明提供的另一个技术方案为:一种计算可读存储介质,其上存储有计算机程序,所述程序在被处理器调用时,能够实现上述数据库中快速搜索树形结构数据的方法所包含的步骤。从上述描述可知,本发明的有益效果在于:对应本领域普通技术人员可以理解实现上述技术方案中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来实现的,所述的程序可存储于一计算机可读取的存储介质中,该程序在执行时,可包括如上述各方法的流程。实施例一请参照图1至图4,本实施例提供一种数据库中快速搜索树形结构数据的方法。首先,在存储树形结构数据的数据库表中,增加一个字段,用于存储树形结构中各个节点对应其在树形结构中的节点路径。其中,树形结构的数据默认以表结构形式存储在数据库中而非内存中。在此,一个树形结构对应的表结构简称数据库表。数据库表的存储结构如图1所示,包括id(节点id)、name(节点名称)、parent(父节点id)以及新增的字段path(节点路径)的字段结构。所述节点路径对应的是树形结构中,由根节点起始直达当前节点所需要途经的所有树节点,包含当前节点及其所有父节点。例如图1的树形结构中,节点“研发2部”的节点路径对应的是从节点“大教育技术有限公司”开始,途经节点“技术部”才能到达其下属的节点“技术2部”。由于数据库表中一般使用节点id来表示对应的节点,因此优选节点路径中的节点也使用对应的节点id来表示,则对应上述节点“研发2部”的节点路径为“-1-2-4-”。优选的,为了使节点路径的表达方式更明确和易懂,各个节点id之间采用分隔符进行分隔,例如“-”或“/”等其他分隔符。具体的,如图3所示,数据库表中新增的各个节点各自对应的节点路径的获取方式可以由以下步骤实现:(1)构建对应树形结构的常规格式的数据库表;(2)在常规格式的数据库表构建完成后,在其表中增加一“path”字段,用于存储各个节点各自对应的节点路径;(3)遍历数据库表中的所有数据(对应树形结构的所有树节点);若当前遍历到的节点为根节点,则执行(4);若当前遍历到的节点为其他节点(树形结构中除根节点以外的其他节点),则执行(5);(4)将数据库表中当前遍历到的这一节点对应的“path”字段中写入自身的id,并使用分隔符分隔,例如“-1-”;(5)获取当前遍历到的这一节点对应树形结构的所有父亲节点id;即这一节点往前到根节点的所有父亲节点id;然后将所获取的所有父节点id包括这一节点自己的id按照父到子的顺序,即从根节点到这一节点的层级顺序,进行排序,并使用分隔符分隔各个节点id,再存储到“path”字段中,例如“-1-2-3-4-”。然后,在系统接收到对树形结构进行搜索,获取一指定节点下包含一指定节点字段的所有节点的请求时。具体的,该请求对应的是基于树形结构数据的模糊搜索,简单的说,用于搜索某个节点(优选包括该节点本身)下属的子节点中包含有某个关键字的所有节点。依据上述请求,从树形结构对应的数据库表中搜索获取包含所述指定节点字段,且对应的节点路径中包含所述指定节点的所有节点。也就是说,在搜索匹配的时候,除了需要对各个节点的节点名称字段进行匹配以外,还需要对节点的“path”字段进行匹配。如图4所示,具体的一种匹配过程如下:(1)获取所述请求中所述指定节点对应的节点id,即需要进行搜索的起始父节点id,以及所述指定节点字段,即对应数据库表中的“name”字段的关键字;(2)遍历数据库表中的所有数据,即树形结构中的所有树节点,判断当前遍历到的节点对应的节点名称中是否包含所述指定节点字段,即当前节点对应的“name”这一字段下记录的节点名称是否包含关键字,并且当前遍历到的节点对应的节点路径中是否包含所述指定节点的id,即判断其“path”字段下记录的内容是否包含“-id-”;若判断结果都为“是”,则判定匹配成功,标记当前节点符合条件,或者直接获取当前节点对应的节点名称,并继续遍历下一个节点;(3)获取所有被标记的节点对应的节点名称作为搜索结果输出,或者直接输出所有上一步骤获取到的节点名称作为搜索结果。在一具体实施方式中,还可以采用以下搜索方式进一步提高搜索效率:遍历树形结构中的所有树节点,获取其节点路径中包含指定节点id的所有节点;基于所获取的所有节点,再获取其中对应的节点名称中是否包含关键字的节点作为搜索结果。本实施例所使用的快速搜索方法,相较于现有技术的搜索方法,可以将时间复杂度由o(v+e)降低为o(v),v表示节点的数量,e表示节点的连接数。对应图1的树形结构的搜索例子,遍历这个树形结构的时间复杂度由o(5+4)降低为o(5)。显然,本实施例的搜索方法,远高于传统过的搜索方法,并且直接基于数据库存储和查询,不产生额外的内存开销,大大降低了空间复杂度。实施例二请参照图1,本实施例对应实施例一,提供一具体运用场景。假设某个公司的组织架构如图1所示,基于实施例一的方法所构建的与该公司组织架构对应的数据库表结构如下表一所示:id(节点id)name(节点名称)parent(父节点id)path(节点路径)1大教育技术有限公司1-1-2技术部1-1-2-3研发1部2-1-2-3-4研发2部2-1-2-4-5销售部1-1-5-表一基于上述数据库表结构,使用实施例一的搜索方法的具体搜索实例如下:1、搜索“大教育技术有限公司”下,所有包含“大”关键字的部门判断“大教育技术有限公司”的id为1;从数据库中搜索字段name包含“大”,字段path包含“-1-”的部门;匹配出结果:“大教育技术有限公司”。2、搜索“大教育技术有限公司”下,所有包含“研发”关键字的部门判断“大教育技术有限公司”的id为1;从数据库中搜索字段name包含“研发”,字段path包含“-1-”的部门;匹配出结果:“研发1部”,“研发2部”。3、搜索“技术部”下,包含“部”关键字的部门判断“技术部”的id为2;从数据库中搜索字段name包含“部”,字段path包含“-2-”的部门;匹配出结果:“技术部”,“研发1部”,“研发2部”。4、搜索“技术部”下,包含“2”关键字的部门判断“技术部”的id为2;从数据库中搜索字段name包含“2”,字段path包含“-2-”的部门;匹配出结果:“研发1部”,“研发2部”。实施例三本实施例对应上述实施例一,提供一种计算机可读存储介质,其上存储有计算机程序,所述程序在被处理器调用时,能够实现上述实施例所述的数据库中快速搜索树形结构数据的方法所包含的所有步骤。具体步骤内容详见实施例一的描述,在此不进行复述。综上所述,本发明提供的一种数据库中快速搜索树形结构数据的方法、存储介质,不仅能够实现快速搜索获取准确结果,大大降低操作复杂度;而且仅基于数据库表进行操作,没有额外的内存开销,显著降低空间复杂度;进一步的,只需在数据库表新增一字段即可实现支持,操作简便、实用性高。本发明特别适用于大数据量树形结构数据的快速、准确搜索,因而还具备广阔的运用前景,进一步提高了其实用性。以上所述仅为本发明的实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等同变换,或直接或间接运用在相关的
技术领域
,均同理包括在本发明的专利保护范围内。当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1