CN114896271B - 一种高效维护节点全路径的方法、装置及应用 - Google Patents
一种高效维护节点全路径的方法、装置及应用 Download PDFInfo
- Publication number
- CN114896271B CN114896271B CN202210646839.7A CN202210646839A CN114896271B CN 114896271 B CN114896271 B CN 114896271B CN 202210646839 A CN202210646839 A CN 202210646839A CN 114896271 B CN114896271 B CN 114896271B
- Authority
- CN
- China
- Prior art keywords
- node
- nodes
- records
- processed
- full path
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
- G06F16/242—Query formulation
- G06F16/2433—Query languages
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/23—Updating
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/28—Databases characterised by their database models, e.g. relational or object models
- G06F16/284—Relational databases
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Databases & Information Systems (AREA)
- Physics & Mathematics (AREA)
- Data Mining & Analysis (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Mathematical Physics (AREA)
- Computational Linguistics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本申请提出了高效维护节点全路径的方法、装置及应用,包括以下步骤获取变更节点;执行第一SQL语句将所述变更节点及所述变更节点的所有子节点的节点全路径设定为空,并返回受影响的节点数量;若受影响的节点数量不为0,执行第二SQL语句初始化所述节点全路径的数据;若所述节点全路径内含有识别通识符,执行第三SQL语句补全含有识别通识符号的所述节点全路径的数据,通过三条SQL的组合实现高效且扩展场景多的节点全路径的维护方法。
Description
技术领域
本申请涉及数据处理领域,特别是涉及高效维护节点全路径的方法、装置及应用。
背景技术
在关系型数据库用于存储树形结构数据的表中往往会增加一个字段用于存储节点全全路径,一般用path代表该字段,path字段的内容为:本节点及其以上所有节点的ID按照父节点ID+分隔符+子节点ID的方式排列后拼接而成一个字符串。path会为程序进行快速检索时带来极大的效率提升和很多便利。但当树形数据发生变更后,维护path的内容将是一份额外的工作,不恰当或者低效的维护方法将会造成path内容和实际情况不能实时的保持一致或者错误。
通常的做法中都是在数据库存储过程对path字段的内容进行更新,这种方法会带来难以调试、可移植性差、以及随着数据量的增加或者数据结构的变化,原来存储过程选择的执行计划不是最优的,需手动干预或者重新编译的缺点。
另外一种做法是通过程序读取出数据库的数据,处理后再更新入数据库,这种方法比较适用单条节点记录的更新,面对批量更新代码逻辑复杂会大幅上升;并且要获取某个节点的所有父节点需要程序多次连接数据库进行递归的查询,效率低下。
发明内容
本申请实施例提供了一种高效维护节点全路径的方法、装置及应用,利用SQL语句以及内置函数对节点的全路径进行高效地新增或更新。
第一方面,本申请实施例提供了一种高效维护节点全路径的方法,对存储表内的节点全路径进行维护,包括以下步骤:获取变更节点;执行第一SQL语句将所述变更节点及所述变更节点的所有子节点的节点全路径设定为空,并返回受影响的节点数量;若受影响的节点数量不为0,执行第二SQL语句初始化所述节点全路径的数据;若所述节点全路径内含有识别通识符,执行第三SQL语句补全含有识别通识符号的所述节点全路径的数据。
第二方面,本申请实施例提供了一种高效维护节点全路径的装置,包括:节点获取单元,用于获取变更节点;第一SQL语句执行单元,用于执行第一SQL语句将所述变更节点及所述变更节点的所有子节点的节点全路径设定为空,并返回受影响的节点数量;第二SQL语句执行单元,用于若受影响的节点数量不为0,执行第二SQL语句初始化所述节点全路径的数据;第三SQL语句执行单元,用于若所述节点全路径内含有识别通识符,执行第三SQL语句补全含有识别通识符号的所述节点全路径的数据
第三方面,本申请实施例提供了一种电子装置,包括存储器和处理器,所述存储器中存储有计算机程序,所述处理器被设置为运行所述计算机程序以执行任一所述的高效维护节点全路径的方法。
第四方面,本申请实施例提供了一种可读存储介质,所述可读存储介质中存储有计算机程序,所述计算机程序包括用于控制过程以执行过程的程序代码,所述过程包括根据任一所述的高效维护节点全路径的方法。
本发明的主要贡献和创新点如下:
本申请实施例通过在MySQL数据库内依次序执行多条SQL语句,并依据每条SQL语句的返回结果来判断是否进行下一步的执行动作,实现了多种情况的节点全全路径的变动的适配,具有功能扩展性强的优点;多条SQL语句分别提供数据清理、标识修改范围,初始化以及递归更新的功能,多条SQL语句组合使用使得本方案具有很强的扩展性,且范围可控以避免在修改的过程中大范围锁行。另外,本方案的SQL语句可使用“LEFT JOIN”关键字的连续拼接达到一个有限次数的递归效果,且由于数据库索引的引入可实现递归过程非常高效,利用数据库索引,大大提高了维护效率,万级别数据处理时间小于300毫秒;利用MySQL函数“CONCAT_WS”完成对字符串的拼接,并且该函数对“LEFT JOIN”后可能产生的null值在处理上也非常的友好:不会抛出异常,无需额外处理。
本申请的一个或多个实施例的细节在以下附图和描述中提出,以使本申请的其他特征、目的和优点更加简明易懂。
附图说明
此处所说明的附图用来提供对本申请的进一步理解,构成本申请的一部分,本申请的示意性实施例及其说明用于解释本申请,并不构成对本申请的不当限定。在附图中:
图1是根据本申请实施例的高效维护节点全全路径方法的流程图;
图2是根据本申请一种实施例的高效维护节点全全路径方法的逻辑流程图;
图3是根据本申请一种实施例的树型结构的示意图;
图4是根据本申请一种实施例的存储树形结构数据的存储表的示意图;
图5是根据本申请实施例的高效维护节点全全路径装置的结构框图;
图6是根据本申请实施例的电子装置的硬件结构示意图。
具体实施方式
这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本说明书一个或多个实施例相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本说明书一个或多个实施例的一些方面相一致的装置和方法的例子。
需要说明的是:在其他实施例中并不一定按照本说明书示出和描述的顺序来执行相应方法的步骤。在一些其他实施例中,其方法所包括的步骤可以比本说明书所描述的更多或更少。此外,本说明书中所描述的单个步骤,在其他实施例中可能被分解为多个步骤进行描述;而本说明书中所描述的多个步骤,在其他实施例中也可能被合并为单个步骤进行描述。
实施例一
在介绍本方案的技术内容之前,首先介绍下本方案可能用到的专业术语:
树型结构:数据元素之间存在着“一对多”的树形关系的数据结构。在树形结构中,树根结点没有前驱结点,其余每个结点有且只有一个前驱结点。叶子结点没有后续结点,其余每个结点的后续节点数可以是一个也可以是多个。如本方案给的图3所示,节点(1)是树根节点,可以理解为树根节点为没有父节点的节点,节点(2)的父节点是(1),节点(2)ID的全路径字段为:父节点及父节点以上所有父节点(直到树根节点)的节点ID(1)+分隔符(以下用“/”代表分隔符)+子节点ID(2)的方式排列后拼接而成一个字符串,即得到的全路径为1/2;节点(3)ID的父节点是(2),对应节点(3)ID的全路径字段为1/2/3。
存储表:数据库内用于存储数据的表。在本方案中主要针对的是树形结构,存储树型结构的存储表tree_table如图4所示,该存储表记录node_id节点ID、node_name节点名称、parent_id父节点ID、name_path节点名称的全路径以及path节点全路径。对应的,node_id节点ID依次序填写不同节点的次序,node_name节点名称填写对应节点ID的名称,parent_id父节点ID填写该节点对应的父节点的ID,name_path填写节点名称的全路径,节点全路径填写路径内容。记录每一节点所在的行为节点记录,根据所述节点全路径的层级可知晓该节点的数据层级。
示例性,节点(3)对应的节点记录的节点ID为(3),节点名称为“区人大办”,父节点ID为2,节点名称的全路径为:萧山区/区人大机构/区人大办,节点ID的全路径为:1/2/3,该节点的数据层级为3级。
值得一提的是,数据库内存储树形结构数据的表内容随着树形结构数据的不同而不同。
本方案提供了一种高效维护节点全路径的方法,对存储表内的节点全路径进行处理,可在节点出现变更时快速高效地维护节点全路径,包括以下步骤:
获取变更节点;
执行第一SQL语句将所述变更节点及所述变更节点的所有子节点的节点全路径设定为空,并返回受影响的节点数量;
若受影响的节点数量不为0,执行第二SQL语句初始化所述节点全路径的数据;
若所述节点全路径内含有识别通识符,执行第三SQL语句补全含有识别通识符号的所述节点全路径的数据。
本方案采用Java程序和MySQL数据库函数相结合的方案,存储表存储在MySQL数据库内,由Java程序按以上步骤在MySQL数据库中执行SQL语句,并在每次执行完SQL语句后对返回结果进行逻辑判断,判断结果决定Java程序进行下一步的动作。这样的好处可充分发挥Java程序和MySQL数据库各自的优势,且使得该方案可适配树形结构的各种数据变更情况,具有很强的扩展性。
在“获取变更节点”步骤中,变更节点指的是节点位置发生变更的节点,节点位置发生变更的情况包括:节点位置为空,替换原有其他节点位置,或者移动到其他节点位置。示例性的,原节点ID为3的节点删除,原节点ID为3的节点需要挪动到原节点9的子节点的情况都属于节点位置发生变更的情况。
在“执行第一SQL语句将所述变更节点及所述变更节点的所有子节点的节点全路径设定为空”步骤中,将所述变更节点的节点全路径输入到第一SQL语句的查找位置,以查找所述变更节点的所有子节点,并将所述变更节点及所有所述子节点的节点全路径全部设定为空。这样做的目的在于将需要处理的节点记录全部标记出来,以控制第二SQL语句执行时修改的范围,以避免出现对全表都进行修改的情况。
具体的,所述第一SQL语句根据输入的所述变更节点的节点全路径在存储表内找出对应所述变更节点的节点记录,在所述节点记录后加上模糊查询所用的通配符“%”,进而获取所述变更节点以及所述变更关节点的所有子节点,并将所述变更节点及所有所述子节点的节点全路径全部设定为空。
示例性的,第一SQL语句的结构如下所示:
若输入值为“1/6/7”,该第一SQL的执行结果是将node_id分别是7、8、9、10、11、12、13这些节点记录中的path字段的值设为空字符串。
一般而言,执行第一SQL语句后受影响的节点数量至少包括变更节点,若返回的受影响的节点数量为0,则表示该存储表内没有需要变更的节点,则终止该方法。
在“执行第二SQL语句初始化所述节点全路径的数据”步骤中,执行第二SQL语句以使用多表关联更新的方式,用子节点在存储表内记录的父节点关联父节点,通过拼接函数拼接子节点ID和父节点ID得到节点全路径的数据。
所述第二SQL语句为条件语句,选择满足节点全路径为空的节点进行处理。在一些实施例中,通过WHERE条件使得第二SQL语句只对path的值为空字符串的节点记录生效。
也就是说,“执行第二SQL语句初始化所述节点全路径的数据”包括步骤:查找节点全路径为空的节点作为待处理节点,依据所述待处理节点的数据层级以及所述待处理节点的节点记录关联所述待处理节点的父节点的节点记录,汇总所有节点记录得到第一临时节点记录,其中所述第一临时节点记录内的节点记录数量同于数据层级的层级数,依据第一临时节点记录所在的数据层级依次拼接所有所述父节点的父节点ID和待处理节点的节点ID,得到所述待处理节点的节点全路径。
本方案的第二SQL语句使用“LEFT JOIN”实现多表关联更新,达到一个有限次数的递归效果,每LEFT JOIN一次等于是一条子节点的节点记录级联它的父节点的节点记录。LEFT JOIN是支持在后面继续拼接LEFT JOIN,每拼接一次,就是找父节点更上一层节点的节点记录级联,这样就是递归的效果了。
本方案使用的第二SQL语句使用MySQL函数“CONCAT_WS”作为拼接函数,以拼接父节点ID和待处理节点的节点ID,该函数对“LEFT JOIN”后可能产生的null值在处理上也非常的友好:不会抛出异常,无需额外处理。
在“依据所述待处理节点的数据层级以及所述待处理节点的节点记录关联所述待处理节点的父节点的节点记录,汇总所有节点记录得到第一临时节点记录”步骤中,以所述待处理节点的节点记录为起始记录,以起始记录的父节点ID依次往前关联至少一父节点所在的节点记录,其中关联次数同于所述待处理节点的数据层级,将所有父节点的节点记录和待处理节点的节点记录整合得到第一临时节点记录。
对应的,“依据第一临时节点记录所在的数据层级依次拼接所有所述父节点的父节点ID和待处理节点的节点ID,得到所述待处理节点的节点全路径”步骤中,从所述第一临时节点记录内的第一数据层级的节点的父节点ID为起点,依据数据层级自高至低依次拼接所有父节点ID和待处理节点ID,得到待处理节点的节点全路径。且初始化后的所述节点全路径的第一数据层级的节点的父节点ID带有识别通识符,可以是“{}”。
值得说明的是,所述待处理节点在存储表中对应有数据层级,所述第一临时节点记录内会包括从第一数据层级到所述待处理节点所在数据层级的所有数据层级的节点记录,依据第一数据层级自所述待处理节点所在数据层级的次序拼接节点全数据的数据。
当然,根据实际层级的不同,第一临时节点记录内记录的节点记录和实际节点记录的数量会有偏差,可能会出现记录的节点记录的数量少于实际节点记录的数量的情况,这个情况表示该节点全路径是不完全的;也可能会出现记录的节点记录的数量多余实际节点记录的数量的情况,这个情况表示会出现父节点ID为空的情况。
对应的,在“依据第一临时节点记录所在的数据层级依次拼接所有所述父节点的父节点ID和待处理节点的节点ID,得到所述待处理节点的节点全路径”步骤中,在拼接节点全路径时忽略的父节点ID的返回值为null的值。
示例性的:
第一临时节点记录内待处理的值为:null+null+第二层级节点ID+第三层级节点ID+第四层级节点ID
拼接函数的处理结果:第二层级节点ID/第三层级节点ID/第四层级节点ID。
而由于本方案是从第一数据层级的父节点为起点开始拼接,故当出现记录的节点记录的数量少于实际节点记录的数量的情况时,所述节点全路径包括识别通识符,以便于第三SQL语句进行进一步的执行。
示例性的:
第一临时节点记录内待处理的值为:第一层级节点的父节点ID+第一层级节点ID+第二层级节点ID+第三层级节点ID+第四层级节点ID拼接成一个字串。
拼接函数的处理结果:{第一层级节点的父节点ID}/第一层级节点ID/第二层级节点ID/第三层级节点ID/第四层级节点ID。
示例性的,以节点全路径为空的节点为存储表的第四层级I4的节点为例进行说明:
通过这条记录的父节点ID(parent_id)的值可以找到它的上一层节点的记录I3(第三层级),这2条记录通过LEFT JOIN连起来后会在数据库中变成一整条记录(临时记录),以此类推,I3连接I2,I2连接I1,最后得到一条I4+I3+I2+I1的第一临时节点记录。该第一临时节点记录中的数据就是第四层级节点记录、第三层级节点记录、第二层级节点记录、第一层级节点记录。
下一步骤就是取出临时记录中需要的数据,将其写入I4的全路径(path)中:利用MySQL函数CONCAT_WS,将第一层级节点的父节点ID+第一层级节点ID+第二层级节点ID+第三层级节点ID+第四层级节点ID拼接成一个字串。
参考本方案提供的tree_table表,假设node_id为9、10的节点记录中path的值为空字符串,该第二SQL的执行结果将会是:node_id=9的path的值被更新为“1/6/7/9”,node_id=10的path的值被更新为“{1}/6/7/9/10”。会出现这种结果是因为在处理node_id=9的这条记录时,CONCAT('{',l1.parent_id,'}')返回的值是null,而MySQL函数CONCAT_WS会忽视返回值为null的值。
对于node_id=9的记录:CONCAT_WS(“/”,null,”1”,”6”,”7”,”9”)→处理成“1/6/7/9”
对于node_id=10的记录:CONCAT_WS(“/”,”{1}”,”6”,”7”,”9”,”10”)→处理成“{1}/6/7/9/10”。
执行的第二SQL语句为:
在执行完了第二SQL语句后,若受影响的节点数量为0的话,代表该节点全路径为空的节点为树根节点,则可直接结束算法。
在“执行第三SQL语句补全含有识别通识符号的所述节点全路径的数据”步骤中,第三SQL语句是对节点全路径的数据不完整的情况进行补全,对应的判断条件为:节点全路径中含有识别通识符,也就是当变更后的实际数据层级超过了变更前的原始数据层级时,利用第二SQL语句会出现节点全路径不完全的情况。
针对这种情况利用第三SQL语句进行节点全路径的更新补全,首先执行所述第三SQL语句找出需要补全的节点记录,即节点全路径中存储着以“{”开头的节点记录,作为待补全节点记录,使用同于第二SQL语句相同的逻辑找出所述待补全节点的第二临时节点记录,取出待补全节点记录的节点全路径的值(即是以“{”开头的记录),截去识别标识符对应的字符,继续使用第二SQL语句相同的逻辑拼接父节点ID得到节点全路径的值,并写入节点全路径中。
也就是说,“执行第三SQL语句补全含有识别通识符的所述节点全路径的数据”步骤包括:查找含有识别通识符的节点全路径的节点作为待处理节点,以所述识别通识符内的节点作为初始节点,依据所述待处理节点的数据层级关联所述初始节点的父节点的节点记录,汇总所有节点记录得到第二临时节点记录,其中所述第二临时节点记录内的节点记录数量同于数据层级的层级数,依据第二临时节点记录所在的数据层级依次拼接所有所述父节点的父节点ID和所述初始节点的节点ID,得到补全路径,利用所述补全路径替换所述含有识别通识符的字符。
具体的,截取所述识别通识符及其包含的字段内容得到占位符,将所述补全路径拼接至所述占位符的位置得到更新后的节点全路径。在“依据所述待处理节点的数据层级关联所述初始节点的父节点的节点记录,汇总所有节点记录得到第二临时节点记录”步骤中,以所述初始节点的节点记录为起始记录,以起始记录的父节点ID依次往前关联至少一父节点所在的节点记录,其中关联次数同于所述待处理节点的数据层级,将所有父节点的节点记录和初始节点的节点记录整合得到第二临时节点记录。
在“依据第二临时节点记录所在的数据层级依次拼接所有所述父节点的父节点ID和所述初始节点的节点ID”步骤中,从所述第二临时节点记录内的第一数据层级的节点的父节点ID为起点,依据数据层级自高至低依次拼接所有父节点ID和初始节点的节点ID。
示例性的,第三SQL语句的执行逻辑为:
查找以“{”开头的记录做进一步处理,参考node_id=10的节点记录,第三SQL语句中各个函数执行结果如下:
CONCAT('{',l1.parent_id,'}')→处理成null
substring_index(“{1}/6/7/9/10”,'}/',-1)→处理成“6/7/9/10”
CONCAT_WS('/',null,null,null,“1”,“6/7/9/10”)→处理成“1/6/7/9/10”
第三SQL语句被设计成需要被重复被执行,直到tree_table中不在有“{”开头的节点全路径。
第三SQL执行语句如下所示:
本方案通过Java程序实现以上方法的执行,当需要对某个节点的节点全路径进行更新时,该节点及其下所有子节的节点全路径都需要进行更新。Java程序执行:
步骤一:开启事务并执行第一SQL语句,控制了修复范围。
步骤二:步骤一执行成功后执行第二SQL语句,完成path值的初始化。
步骤三:步骤二执行成功后开启循环执行第三SQL语句,每次执行完成都对执行结果进行判断,当不再有记录被更新后,停止循环。如果循环次数超过某个阈值时(比如5次),通过抛出异常来触发事务的回滚操作,并反馈给运维人员需要对数据进行检测,检查是否是存在数据问题而导致的死循环。
对应的,在“执行第三SQL语句补全含有识别通识符号的所述节点全路径的数据”步骤中,还包括每执行一次第三SQL语句,给循环次数加1,若循环次数大于设定阈值,则停止循环。
实施例二
基于相同的构思,参考图5,本申请还提出了一种高效维护节点全路径的装置,包括:
节点获取单元,用于获取变更节点;
第一SQL语句执行单元,用于执行第一SQL语句将所述变更节点及所述变更节点的所有子节点的节点全路径设定为空,并返回受影响的节点数量;
第二SQL语句执行单元,用于若受影响的节点数量不为0,执行第二SQL语句初始化所述节点全路径的数据;
第三SQL语句执行单元,用于若所述节点全路径内含有识别通识符,执行第三SQL语句补全含有识别通识符号的所述节点全路径的数据。
实施例三
本实施例还提供了一种电子装置,参考图6,包括存储器404和处理器402,该存储器404中存储有计算机程序,该处理器402被设置为运行计算机程序以执行上述任一项高效维护节点全路径的方法实施例中的步骤。
具体地,上述处理器402可以包括中央处理器(CPU),或者特定集成电路(ApplicationSpecificIntegratedCircuit,简称为ASIC),或者可以被配置成实施本申请实施例的一个或多个集成电路。
其中,存储器404可以包括用于数据或指令的大容量存储器404。举例来说而非限制,存储器404可包括硬盘驱动器(HardDiskDrive,简称为HDD)、软盘驱动器、固态驱动器(SolidStateDrive,简称为SSD)、闪存、光盘、磁光盘、磁带或通用串行总线(UniversalSerialBus,简称为USB)驱动器或者两个或更多个以上这些的组合。在合适的情况下,存储器404可包括可移除或不可移除(或固定)的介质。在合适的情况下,存储器404可在数据处理装置的内部或外部。在特定实施例中,存储器404是非易失性(Non-Volatile)存储器。在特定实施例中,存储器404包括只读存储器(Read-OnlyMemory,简称为ROM)和随机存取存储器(RandomAccessMemory,简称为RAM)。在合适的情况下,该ROM可以是掩模编程的ROM、可编程ROM(ProgrammableRead-OnlyMemory,简称为PROM)、可擦除PROM(ErasableProgrammableRead-OnlyMemory,简称为EPROM)、电可擦除PROM(ElectricallyErasableProgrammableRead-OnlyMemory,简称为EEPROM)、电可改写ROM(ElectricallyAlterableRead-OnlyMemory,简称为EAROM)或闪存(FLASH)或者两个或更多个以上这些的组合。在合适的情况下,该RAM可以是静态随机存取存储器(StaticRandom-AccessMemory,简称为SRAM)或动态随机存取存储器(DynamicRandomAccessMemory,简称为DRAM),其中,DRAM可以是快速页模式动态随机存取存储器404(FastPageModeDynamicRandomAccessMemory,简称为FPMDRAM)、扩展数据输出动态随机存取存储器(ExtendedDateOutDynamicRandomAccessMemory,简称为EDODRAM)、同步动态随机存取内存(SynchronousDynamicRandom-AccessMemory,简称SDRAM)等。
存储器404可以用来存储或者缓存需要处理和/或通信使用的各种数据文件,以及处理器402所执行的可能的计算机程序指令。
处理器402通过读取并执行存储器404中存储的计算机程序指令,以实现上述实施例中的任意一种高效维护节点全路径的方法。
可选地,上述电子装置还可以包括传输设备406以及输入输出设备408,其中,该传输设备406和上述处理器402连接,该输入输出设备408和上述处理器402连接。
传输设备406可以用来经由一个网络接收或者发送数据。上述的网络具体实例可包括电子装置的通信供应商提供的有线或无线网络。在一个实例中,传输设备包括一个网络适配器(Network Interface Controller,简称为NIC),其可通过基站与其他网络设备相连从而可与互联网进行通讯。在一个实例中,传输设备406可以为射频(Radio Frequency,简称为RF)模块,其用于通过无线方式与互联网进行通讯。
输入输出设备408用于输入或输出信息。在本实施例中,输入的信息可以是变更指令,变更节点等,输出的信息可以是变更后存储表,所有节点的节点全路径等。
可选地,在本实施例中,上述处理器402可以被设置为通过计算机程序执行以下步骤:
获取变更节点;
执行第一SQL语句将所述变更节点及所述变更节点的所有子节点的节点全路径设定为空,并返回受影响的节点数量;
若受影响的节点数量不为0,执行第二SQL语句初始化所述节点全路径的数据;
若所述节点全路径内含有识别通识符,执行第三SQL语句补全含有识别通识符号的所述节点全路径的数据。
需要说明的是,本实施例中的具体示例可以参考上述实施例及可选实施方式中所描述的示例,本实施例在此不再赘述。
通常,各种实施例可以以硬件或专用电路、软件、逻辑或其任何组合来实现。本发明的一些方面可以以硬件来实现,而其他方面可以以可以由控制器、微处理器或其他计算设备执行的固件或软件来实现,但是本发明不限于此。尽管本发明的各个方面可以被示出和描述为框图、流程图或使用一些其他图形表示,但是应当理解,作为非限制性示例,本文中描述的这些框、装置、系统、技术或方法可以以硬件、软件、固件、专用电路或逻辑、通用硬件或控制器或其他计算设备或其某种组合来实现。
本发明的实施例可以由计算机软件来实现,该计算机软件由移动设备的数据处理器诸如在处理器实体中可执行,或者由硬件来实现,或者由软件和硬件的组合来实现。包括软件例程、小程序和/或宏的计算机软件或程序(也称为程序产品)可以存储在任何装置可读数据存储介质中,并且它们包括用于执行特定任务的程序指令。计算机程序产品可以包括当程序运行时被配置为执行实施例的一个或多个计算机可执行组件。一个或多个计算机可执行组件可以是至少一个软件代码或其一部分。另外,在这一点上,应当注意,如图中的逻辑流程的任何框可以表示程序步骤、或者互连的逻辑电路、框和功能、或者程序步骤和逻辑电路、框和功能的组合。软件可以存储在诸如存储器芯片或在处理器内实现的存储块等物理介质、诸如硬盘或软盘等磁性介质、以及诸如例如DVD及其数据变体、CD等光学介质上。物理介质是非瞬态介质。
本领域的技术人员应该明白,以上实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。
以上实施例仅表达了本申请的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对本申请范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本申请构思的前提下,还可以做出若干变形和改进,这些都属于本申请的保护范围。因此,本申请的保护范围应以所附权利要求为准。
Claims (10)
1.一种高效维护节点全路径的方法,对存储表内的节点全路径进行维护,其特征在于,包括以下步骤:
获取变更节点;
执行第一SQL语句将所述变更节点及所述变更节点的所有子节点的节点全路径设定为空,并返回受影响的节点数量;
若受影响的节点数量不为0,执行第二SQL语句初始化所述节点全路径的数据,其中“执行第二SQL语句初始化所述节点全路径的数据”包括步骤:查找节点全路径为空的节点作为待处理节点,依据所述待处理节点的数据层级以及所述待处理节点的节点记录关联所述待处理节点的父节点的节点记录,汇总所有节点记录得到第一临时节点记录,其中所述第一临时节点记录内的节点记录数量同于数据层级的层级数,依据第一临时节点记录所在的数据层级依次拼接所有所述父节点的父节点ID和待处理节点的节点ID,得到所述待处理节点的节点全路径,第二SQL语句使用“LFET JOIN”实现多表关联更新,每LEFT JOIN一次等于是一条子节点的节点记录级联它的父节点的节点记录;第二SQL使用MySQL函数“CONCAT_WS”作为拼接函数,以拼接父节点ID和待处理节点的节点ID;
若所述节点全路径内含有识别通识符,查找含有识别通识符的节点全路径的节点作为待处理节点,以所述识别通识符内的节点作为初始节点,依据所述待处理节点的数据层级关联所述初始节点的父节点的节点记录,汇总所有节点记录得到第二临时节点记录,其中所述第二临时节点记录内的节点记录数量同于数据层级的层级数,依据第二临时节点记录所在的数据层级依次拼接所有所述父节点的父节点ID和所述初始节点的节点ID,得到补全路径,利用所述补全路径替换所述含有识别通识符的字符。
2.根据权利要求1所述的高效维护节点全路径的方法,其特征在于,在“执行第一SQL语句将所述变更节点及所述变更节点的所有子节点的节点全路径设定为空”步骤中,将所述变更节点的节点全路径输入到第一SQL语句的查找位置,查找所述变更节点的所有子节点,并将所述变更节点及所有所述子节点的节点全路径全部设定为空。
3.根据权利要求1所述的高效维护节点全路径的方法,其特征在于,以所述待处理节点的节点记录为起始记录,以起始记录的父节点ID依次往前关联至少一父节点所在的节点记录,其中关联次数同于所述待处理节点的数据层级,将所有父节点的节点记录和待处理节点的节点记录整合得到第一临时节点记录。
4.根据权利要求1所述的高效维护节点全路径的方法,其特征在于,从第一临时节点记录内的第一数据层级的节点的父节点ID为起点,依据数据层级自高至低依次拼接所有父节点ID和待处理节点ID,得到待处理节点的节点全路径。
5.根据权利要求1所述的高效维护节点全路径的方法,其特征在于,第二SQL语句初始化后的所述节点全路径的第一数据层级的节点的父节点ID带有识别通识符。
6.根据权利要求1所述的高效维护节点全路径的方法,其特征在于,在拼接节点全路径时忽略父节点ID的返回值为空的值。
7.根据权利要求1所述的高效维护节点全路径的方法,其特征在于,每执行一次第三SQL语句,给循环次数加1,若循环次数大于设定阈值,则停止循环。
8.一种高效维护节点全路径的装置,其特征在于,包括:
节点获取单元,用于获取变更节点;
第一SQL语句执行单元,用于执行第一SQL语句将所述变更节点及所述变更节点的所有子节点的节点全路径设定为空,并返回受影响的节点数量;
第二SQL语句执行单元,用于若受影响的节点数量不为0,执行第二SQL语句初始化所述节点全路径的数据,其中“执行第二SQL语句初始化所述节点全路径的数据”包括步骤:查找节点全路径为空的节点作为待处理节点,依据所述待处理节点的数据层级以及所述待处理节点的节点记录关联所述待处理节点的父节点的节点记录,汇总所有节点记录得到第一临时节点记录,其中所述第一临时节点记录内的节点记录数量同于数据层级的层级数,依据第一临时节点记录所在的数据层级依次拼接所有所述父节点的父节点ID和待处理节点的节点ID,得到所述待处理节点的节点全路径,第二SQL语句使用“LFET JOIN”实现多表关联更新,每LEFT JOIN一次等于是一条子节点的节点记录级联它的父节点的节点记录;第二SQL使用MySQL函数“CONCAT_WS”作为拼接函数,以拼接父节点ID和待处理节点的节点ID;
第三SQL语句执行单元,用于若所述节点全路径内含有识别通识符,查找含有识别通识符的节点全路径的节点作为待处理节点,以所述识别通识符内的节点作为初始节点,依据所述待处理节点的数据层级关联所述初始节点的父节点的节点记录,汇总所有节点记录得到第二临时节点记录,其中所述第二临时节点记录内的节点记录数量同于数据层级的层级数,依据第二临时节点记录所在的数据层级依次拼接所有所述父节点的父节点ID和所述初始节点的节点ID,得到补全路径,利用所述补全路径替换所述含有识别通识符的字符。
9.一种电子装置,包括存储器和处理器,其特征在于,所述存储器中存储有计算机程序,所述处理器被设置为运行所述计算机程序以执行权利要求1到7任一所述的高效维护节点全路径的方法。
10.一种可读存储介质,其特征在于,所述可读存储介质中存储有计算机程序,所述计算机程序包括用于控制过程以执行过程的程序代码,所述过程包括根据权利要求1到7任一所述的高效维护节点全路径的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210646839.7A CN114896271B (zh) | 2022-06-09 | 2022-06-09 | 一种高效维护节点全路径的方法、装置及应用 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210646839.7A CN114896271B (zh) | 2022-06-09 | 2022-06-09 | 一种高效维护节点全路径的方法、装置及应用 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN114896271A CN114896271A (zh) | 2022-08-12 |
CN114896271B true CN114896271B (zh) | 2023-06-23 |
Family
ID=82728919
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210646839.7A Active CN114896271B (zh) | 2022-06-09 | 2022-06-09 | 一种高效维护节点全路径的方法、装置及应用 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114896271B (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116010438B (zh) * | 2022-12-22 | 2023-11-28 | 北京柏睿数据技术股份有限公司 | 一种数据库操作延迟计算的方法和系统 |
Family Cites Families (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7281206B2 (en) * | 2001-11-16 | 2007-10-09 | Timebase Pty Limited | Maintenance of a markup language document in a database |
US7979453B2 (en) * | 2006-08-23 | 2011-07-12 | Innovative Solutions, Inc. | Efficient search result update mechanism |
CN102541879A (zh) * | 2010-12-09 | 2012-07-04 | 北京市金蝶政务软件有限公司 | 用于树形结构表的查询方法和装置 |
CN104517155A (zh) * | 2013-09-26 | 2015-04-15 | Sap欧洲公司 | 用于动态路径优化的系统和方法 |
US10061841B2 (en) * | 2015-10-21 | 2018-08-28 | International Business Machines Corporation | Fast path traversal in a relational database-based graph structure |
CN106897408A (zh) * | 2017-02-16 | 2017-06-27 | 郑州云海信息技术有限公司 | 一种实现快速查询树形结构数据指定节点下级的方法 |
US11416473B2 (en) * | 2019-12-20 | 2022-08-16 | Oracle International Corporation | Using path encoding method and relational set operations for search and comparison of hierarchial structures |
-
2022
- 2022-06-09 CN CN202210646839.7A patent/CN114896271B/zh active Active
Non-Patent Citations (1)
Title |
---|
基于前缀编码的先根遍历树生成算法的研究与应用;况立群;熊风光;韩燮;;计算机应用与软件(04);全文 * |
Also Published As
Publication number | Publication date |
---|---|
CN114896271A (zh) | 2022-08-12 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110321344B (zh) | 关联数据的信息查询方法、装置、计算机设备及存储介质 | |
CN103984582A (zh) | 一种热更新方法和装置 | |
CN102870116B (zh) | 内容匹配方法和装置 | |
CN110222238B (zh) | 字符串与识别符双向映射的查询方法和系统 | |
CN111291023A (zh) | 一种数据迁移的方法、系统、设备以及介质 | |
CN114896271B (zh) | 一种高效维护节点全路径的方法、装置及应用 | |
CN109189759B (zh) | Kv存储系统中的数据读取方法、数据查询方法、装置及设备 | |
CN111666468A (zh) | 一种基于团簇属性在社交网络中搜索个性化影响力社区的方法 | |
CN105138622A (zh) | 用于lsm树存储系统的插入操作及负载的读取和合并方法 | |
CN111562920A (zh) | 小程序代码相似度确定方法、装置、服务器及存储介质 | |
CN111026736B (zh) | 数据血缘管理方法及装置、数据血缘解析方法及装置 | |
CN111382179B (zh) | 数据处理方法、装置及电子设备 | |
CN113535766A (zh) | 作业流配置方法、装置、电子装置及存储介质 | |
CN111159020B (zh) | 一种应用于同步软件测试的方法和装置 | |
CN116150093B (zh) | 一种对象存储列举对象的实现方法及电子设备 | |
US20080306948A1 (en) | String and binary data sorting | |
CN116361287A (zh) | 路径解析方法、装置以及系统 | |
CN115185998A (zh) | 目标字段查找方法及装置、服务器、计算机可读存储介质 | |
CN115017161A (zh) | 一种结合虚拟dom更新树形数据结构方法、装置及应用 | |
CN115563116A (zh) | 一种数据库表扫描方法、装置以及设备 | |
CN115840775A (zh) | 数据的提取方法、装置、服务器及存储介质 | |
CN111752909B (zh) | 一种多版本文件的操作方法、系统及装置 | |
CN111400243B (zh) | 基于流水线服务的研发管理系统以及文件存储方法、装置 | |
CN115221360A (zh) | 树形结构配置方法和系统 | |
CN113535962A (zh) | 数据入库方法、装置、电子装置、程序产品及存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |