CN113326402A - 有向无环图生成方法及系统 - Google Patents
有向无环图生成方法及系统 Download PDFInfo
- Publication number
- CN113326402A CN113326402A CN202110665336.XA CN202110665336A CN113326402A CN 113326402 A CN113326402 A CN 113326402A CN 202110665336 A CN202110665336 A CN 202110665336A CN 113326402 A CN113326402 A CN 113326402A
- Authority
- CN
- China
- Prior art keywords
- vertex
- graph
- directed
- directed acyclic
- acyclic graph
- 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.)
- Granted
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/90—Details of database functions independent of the retrieved data types
- G06F16/901—Indexing; Data structures therefor; Storage structures
- G06F16/9024—Graphs; Linked lists
Landscapes
- Engineering & Computer Science (AREA)
- Databases & Information Systems (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Data Mining & Analysis (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Image Generation (AREA)
- Image Analysis (AREA)
Abstract
本申请公开了一种有向无环图生成方法,该方法包括:检测有向图中的根顶点,将所述根顶点加入到有向无环图中;在所述有向图中将所述根顶点的子顶点记录为接驳点;检测所述有向无环图是否有环,并在有环时根据所述接驳点的记录判断所述环中是否包含接驳点;当所述环中包含接驳点时,切除所述接驳点的入边。本申请还公开了一种有向无环图生成系统、电子装置和计算机可读存储介质。由此,能够减少生成有向无环图时的时间成本和内存成本的消耗。
Description
技术领域
本申请涉及数据处理技术领域,尤其涉及一种有向无环图生成方法、系统、电子装置及计算机可读存储介质。
背景技术
在数据仓库系统中,血缘关系起着至关重要的作用。调度系统要依赖血缘关系来监控和管理任务的运行和状态。当数据出现问题时,需要进行全链路的数据追踪,评估数据影响、问题产生根因。在此过程中,都需要使用有向无环图(Database AvailabilityGroup,DAG)进行对象之间关系的管理。
在图论中,如果一个有向图无法从某个顶点出发经过若干条边回到该顶点,则这个图是一个DAG。基于调度任务之间的依赖关系或数据表之间的依赖关系生成DAG时,传统的方式会先添加顶点到图中,然后检测是否有环。如果有环则移除本次添加的顶点,并停止向图中添加顶点,退出生成DAG;如果没有环,则继续添加新的顶点到图中,然后检测是否有环,依此类推,直到所有的顶点都加入到图中。
但是,这种传统的DAG生成方式时间成本高,资源消耗大,存在大量重复检测环的操作的弊端。例如,对于有50000张表的DAG,根顶点检测就有37.5亿次,假设一次根顶点检测需要0.1毫秒,仅在根顶点检测环节就需要消耗104.2小时。并且,为了对DAG进行多次重复是否有环检测,每次都要对上一次的DAG进行一次图复制操作。对于有50000张表的DAG,需要对顶点进行12.5亿次的复制操作。而内存中对象的深度拷贝属于低效率操作,假设一次对象的深度拷贝需要0.1毫秒,仅对象的深度拷贝环节就需要消耗34.7小时。也就是说,根顶点检测和图的深度拷贝累计需要耗时139.1小时,且没有计算其他算法的操作成本。上述时间成本和资源消耗对于一个线上的正式系统是不可用且无效的,所以需要对传统的DAG生成方式进行高度优化。
需要说明的是,上述内容并不用于限制申请保护范围。
发明内容
本申请的主要目的在于提出一种有向无环图生成方法、系统、电子装置及计算机可读存储介质,旨在解决如何降低生成DAG时的时间成本和资源消耗的问题。
为实现上述目的,本申请实施例提供了一种有向无环图生成方法,所述方法包括:
检测有向图中的根顶点,将所述根顶点加入到有向无环图中;
在所述有向图中将所述根顶点的子顶点记录为接驳点;
检测所述有向无环图是否有环,并在有环时根据所述接驳点的记录判断所述环中是否包含接驳点;
当所述环中包含接驳点时,切除所述接驳点的入边。
可选地,所述方法在所述检测有向图中的根顶点之前包括:
收集数据表之间的依赖关系作为语料数据;
创建空的有向图和空的有向无环图;
基于所述语料数据转换并生成顶点和边,将所述顶点和所述边加入到所述有向图中。
可选地,所述将所述顶点和所述边加入到所述有向图中包括:
将所有所述顶点加入到所述有向图中;
从所述顶点中找到每个所述边分别对应的源顶点和目的顶点;
将所述边标记为相应源顶点的出边;
将所述边标记为相应目的顶点的入边。
可选地,所述在所述有向图中将所述根顶点的子顶点记录为接驳点包括:
在将所述根顶点加入到所述有向无环图中后,在所述有向图中找到所述根顶点的子顶点;
将所述子顶点记录为所述有向图中新的根顶点;
同时将所述子顶点记录为接驳点。
可选地,所述方法在所述环中不包含接驳点时还包括:
根据每个所述顶点的业务语义切除指定顶点的入边。
可选地,所述根据每个所述顶点的业务语义切除指定顶点的入边包括:
获取所述环中每个顶点的业务语义;
根据所述业务语义找到所述环中在业务意义上属于第一层的第一顶点;
切除所述第一顶点的入边。
可选地,所述检测所述有向无环图是否有环包括:
采用深度优先遍历算法对所述有向无环图中的所有顶点进行遍历,以判断是否有环。
此外,为实现上述目的,本申请实施例还提供一种有向无环图生成系统,所述系统包括:
检测模块,用于检测有向图中的根顶点,将所述根顶点加入到有向无环图中;
记录模块,用于在所述有向图中将所述根顶点的子顶点记录为接驳点;
判断模块,用于检测所述有向无环图是否有环,并在有环时根据所述接驳点的记录判断所述环中是否包含接驳点;
切除模块,用于当所述环中包含接驳点时,切除所述接驳点的入边。
为实现上述目的,本申请实施例还提供一种电子装置,所述电子装置包括:存储器、处理器及存储在所述存储器上并可在所述处理器上运行的有向无环图生成程序,所述有向无环图生成程序被所述处理器执行时实现如上述的有向无环图生成方法。
为实现上述目的,本申请实施例还提供一种计算机可读存储介质,所述计算机可读存储介质上存储有向无环图生成程序,所述有向无环图生成程序被处理器执行时实现如上述的有向无环图生成方法。
本申请实施例提出的有向无环图生成方法、系统、电子装置及计算机可读存储介质,能够在将根顶点从有向图加入到有向无环图后,将所述根顶点的子顶点记录为新的根顶点和接驳点,然后在检测到所述有向无环图有环时,根据所述接驳点的记录进行切回边操作(切除所述接驳点的入边),而不是切除整条环。本申请实施例在传统的DAG生成算法的基础上,通过对根顶点检测环节的优化、对图拷贝的优化,达到了减少时间成本的消耗和内存成本的消耗的目的。
附图说明
图1为实现本申请各个实施例的一种应用环境架构图;
图2为本申请第一实施例提出的一种有向无环图生成方法的流程图;
图3为本申请中的边、源顶点、目的顶点之间的关系示意图;
图4为本申请中一种环的示意图;
图5为本申请第二实施例提出的一种有向无环图生成方法的流程图;
图6为本申请中另一种环的示意图;
图7为本申请第三实施例提出的一种电子装置的硬件架构示意图;
图8为本申请第四实施例提出的一种有向无环图生成系统的模块示意图。
具体实施方式
为了使本申请的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本申请进行进一步详细说明。应当理解,此处所描述的具体实施例仅用以解释本申请,并不用于限定本申请。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
需要说明的是,在本申请实施例中涉及“第一”、“第二”等的描述仅用于描述目的,而不能理解为指示或暗示其相对重要性或者隐含指明所指示的技术特征的数量。由此,限定有“第一”、“第二”的特征可以明示或者隐含地包括至少一个该特征。另外,各个实施例之间的技术方案可以相互结合,但是必须是以本领域普通技术人员能够实现为基础,当技术方案的结合出现相互矛盾或无法实现时应当认为这种技术方案的结合不存在,也不在本申请要求的保护范围之内。
请参阅图1,图1为实现本申请各个实施例的一种应用环境架构图。本申请可应用于包括,但不仅限于电子装置2、数据仓库系统4、调度系统6的应用环境中。
其中,所述电子装置2可以为服务器等具有数据处理能力的电子化设备。所述服务器可以是机架式服务器、刀片式服务器、塔式服务器或机柜式服务器等计算设备,可以是独立的服务器,也可以是多个服务器所组成的服务器集群。
所述数据仓库系统2中包括多个数据表,所述多个数据表之间存在各种依赖关系(血缘关系)。所述调度系统4要依赖所述血缘关系来监控和管理任务的运行和状态。当数据出现问题时,需要进行全链路的数据追踪,评估数据影响、问题产生根因。所述电子装置2用于通过对所述调度系统6的任务进行分析,基于调度任务的SQL代码收集到所述数据表之间的依赖关系作为语料数据,从而根据所述语料数据生成有向无环图。
所述数据仓库系统4和所述调度系统6可以存在于所述电子装置2中,也可以独立运行在其他设备上,通过有线或无线网络进行数据通信。
实施例一
如图2所示,为本申请第一实施例提出的一种有向无环图生成方法的流程图。可以理解,本方法实施例中的流程图不用于对执行步骤的顺序进行限定。根据需要,还可以对该流程图中的部分步骤进行添加或删减。
该方法包括以下步骤:
S200,检测有向图中的根顶点,将所述根顶点加入到有向无环图中。
在生成有向无环图之前,首先要生成有向图,为后续根据所述有向图进一步生成所述有向无环图做准备。该过程主要包括:
(1)收集数据表之间的依赖关系作为语料数据。
通过对调度系统的任务进行分析,可以基于调度任务的SQL代码收集到数据表之间的依赖关系,将这些依赖关系作为后续要生成的有向无环图的语料数据。
(2)创建空的第一有向图和空的第一有向无环图。
基于所述语料数据(数据表之间的依赖关系)可以开始生成所需的有向无环图。首先,需要创建空的第一有向图DG1,以及创建空的第一有向无环图DAG1。
(3)根据所述语料数据转换并生成顶点和边,加入到所述第一有向图中,得到第二有向图。
基于这些语料数据(数据表之间的依赖关系),可以转换并生成图的顶点和边(具体生成过程可采用现有的常用方式,在此不再赘述),然后将这些顶点和边加入到所述第一有向图DG1中。其中,将每条边作为相应顶点的属性标记到所述顶点中,以便后续判断所述顶点是否为根顶点。所述顶点可以理解为一个事物(Object),在图论中,一张图是由顶点的集合和顶点之间的连接(边)构成的。参阅图3所示,此处会涉及到三个对象,包括一条边、一个源顶点、一个目的顶点。所述边的方向为从相应的所述源顶点指向所述目的顶点。
在本实施例中,将所述顶点和边加入到所述第一有向图DG1中包括:将所有所述顶点加入到所述第一有向图DG1中;从所述顶点中找到每个所述边分别对应的源顶点和目的顶点;将所述边标记到相应源顶点的属性中,且将所述边标记为出边(即从所述源顶点出去的边);将所述边标记到相应目的顶点的属性中,且将所述边标记为入边(即从所述目的顶点进来的边)。
按照上述过程对所有的语料数据进行处理,会生成整体结构上的有向图,即第二有向图DG2。生成有向图阶段正式完成,后续会对所述第二有向图DG2中的环进行处理,为生成有向无环图做准备。
根据每个顶点的属性,可以从所述第二有向图DG2中检测出根顶点,从而针对所述根顶点进行后续处理,而非根顶点不做处理。
然后,将所述第二有向图DG2中的根顶点加入到所述第一有向无环图DAG1中,得到第二有向无环图DAG2(此时可能有环)。
S202,在所述有向图中将所述根顶点的子顶点记录为新的根顶点及接驳点。
在得到所述第二有向无环图DAG2后,还需要处理所述根顶点及其子顶点的关系,包括:在将所述根顶点加入到所述第一有向无环图DAG1中后,在所述第二有向图DAG2中找到所述根顶点的子顶点;在所述第二有向图DG2中将所述子顶点记录为新的根顶点;同时将所述子顶点记录为(所述根顶点对应的)接驳点。该过程会对所述第二有向图DG2进行更新,并且,每次加入所述根顶点后,所述第二有向无环图DAG2也会更新。
举例而言,假设所述第二有向图DG2中有根顶点V00、V10、V20、V30,其中根顶点V00有子顶点V01、V02、V03,根顶点V10有子顶点V11、V12、V13等。则上述操作具体过程为:
(1)将根顶点V00加入到第一有向无环图DAG1中。
(2)在第二有向图DG2中将根顶点V00的子顶点V01记录为根顶点,将根顶点V00的子顶点V02记录为根顶点,以此类推。
(3)同时在第二有向图DG2中还将根顶点V00的子顶点V01记录为接驳点,将根顶点V00的子顶点V02记录为接驳点,以此类推。
(4)将根顶点V00从第二有向图DG2中移动到第一有向无环图DAG1中。
(5)按照上述过程依次处理其他根顶点,如V10、V20、V30。
处理完所有的根顶点后,第二有向图DG2中的根顶点V00、V10、V20、V30会移动到第一有向无环图DAG1中,成为第二有向无环图DAG2,且根顶点V00、V10、V20、V30的子顶点会成为第二有向图DG2中的新的根顶点,同时这些子顶点还被记录为接驳点。
S204,检测所述有向无环图是否有环,并在有环时根据所述接驳点的记录进行切回边操作,包括根据所述接驳点的记录判断所述环中是否包含接驳点;当所述环中包含接驳点时,切除所述接驳点的入边。
如果从某一有向图上某个顶点v出发的遍历,在结束之前出现一条从顶点u到顶点v的回边,由于顶点u在生成树上是顶点v的后代,则该有向图必定存在包含顶点v和顶点u的环,此时称此有向图有环。在本实施例中,可以采用深度优先遍历(Depth First Search,DFS)算法对所述第二有向无环图DAG2中的所有顶点进行遍历,来检测所述第二有向无环图DAG2是否有环。DFS算法属于图算法的一种,其过程简要来说是对每一个可能的顶点之间的路径深入到不能再深入为止,而且每个顶点只能访问一次。当然,在其他实施例中,也可以采用现有的其他常用方式来检测所述第二有向无环图DAG2是否有环,在此不再赘述。
本实施例在检测到有环时,不是对整条环进行切除,而是定义了一种更高效的回边切除策略。而在切回边时,会根据所述接驳点的记录,提升切回边的准确性。
在本实施例中,所述切回边操作包括:根据所述接驳点的记录判断所述环中是否包含接驳点;当所述环中包含接驳点时,切除所述接驳点的入边。
根据上面步骤中记录的接驳点,可以从技术意义上得到切回边的最优策略。记录接驳点的意义即在出现回边(有环)时,将接驳点的入边切除。例如,参阅图4所示,为一种环的示意图。在图4中,顶点B、顶点C、顶点D产生了环,且该环涉及到三条边,包括边α、边β、边γ。在本实施例中,边γ是切除回边的最优策略,即顶点B(根顶点A的接驳点)的入边。
值得注意的是,如果采用上述方式均无法找到切除回边的最优策略,则还可以采用其他方式破坏该环,例如现有的切除整条环的方式以及其他任何可行的方式。
在步骤S204切回边完成后,返回步骤S200,继续检测所述第二有向图DG2中的根顶点,将所述第二有向图DG2中的根顶点加入到所述第二有向无环图DAG2中,并检测是否有环和进行切回边操作,直至处理完所述第二有向图DG2中所有的根顶点,此时生成最终完整版本的有向无环图,即得到第三有向无环图DAG3。
本实施例提出的有向无环图生成方法,可以在将根顶点从有向图加入到有向无环图后,将所述根顶点的子顶点记录为新的根顶点和接驳点,然后在检测到所述有向无环图有环时,根据所述接驳点的记录进行切回边操作,而不是切除整条环。该方法在传统的DAG生成算法的基础上,通过对根顶点检测环节的优化、对图拷贝的优化,达到了减少时间成本的消耗和内存成本的消耗的目的。
在生产环境以正式数据运行后发现,该方法对根顶点的检测次数为3n次(n为顶点数)。对于有50000张数据表的DAG图,根顶点检测为15万次,假设一次根节点检测需要0.1毫秒,根节点检测环节仅消耗15秒。并且,该方法仅对有向图进行一次图复制操作,复制总次数为Sn=n。对于有50000张数据表的有向图,需要对顶点进行5万次的复制操作,假设一次对象的深度拷贝需要0.1毫秒,则该方法对有向图的深度拷贝仅需消耗5秒。传统的DAG生成算法方案累计需要耗时139.1小时,而采用本方法仅需消耗20秒,理论上效率提升25038倍。
实施例二
如图5所示,为本申请第二实施例提出的一种有向无环图生成方法的流程图。所述第二实施例与上述第一实施例的主要区别在于步骤S304。可以理解,本方法实施例中的流程图不用于对执行步骤的顺序进行限定。根据需要,还可以对该流程图中的部分步骤进行添加或删减。
该方法包括以下步骤:
S300,检测有向图中的根顶点,将所述根顶点加入到有向无环图中。
在生成有向无环图之前,首先要生成有向图,为后续根据所述有向图进一步生成所述有向无环图做准备。该过程主要包括:
(1)收集数据表之间的依赖关系作为语料数据。
通过对调度系统的任务进行分析,可以基于调度任务的SQL代码收集到数据表之间的依赖关系,将这些依赖关系作为后续要生成的有向无环图的语料数据。
(2)创建空的第一有向图和空的第一有向无环图。
基于所述语料数据(数据表之间的依赖关系)可以开始生成所需的有向无环图。首先,需要创建空的第一有向图DG1,以及创建空的第一有向无环图DAG1。
(3)根据所述语料数据转换并生成顶点和边,加入到所述第一有向图中,得到第二有向图。
基于这些语料数据(数据表之间的依赖关系),可以转换并生成图的顶点和边(具体生成过程可采用现有的常用方式,在此不再赘述),然后将这些顶点和边加入到所述第一有向图DG1中。其中,将每条边作为相应顶点的属性标记到所述顶点中,以便后续判断所述顶点是否为根顶点。此处会涉及到三个对象,包括一条边、一个源顶点、一个目的顶点。所述边的方向为从相应的所述源顶点指向所述目的顶点。
在本实施例中,将所述顶点和边加入到所述第一有向图DG1中包括:将所有所述顶点加入到所述第一有向图DG1中;从所述顶点中找到每个所述边分别对应的源顶点和目的顶点;将所述边标记到相应源顶点的属性中,且将所述边标记为出边(即从所述源顶点出去的边);将所述边标记到相应目的顶点的属性中,且将所述边标记为入边(即从所述目的顶点进来的边)。
按照上述过程对所有的语料数据进行处理,会生成整体结构上的有向图,即第二有向图DG2。生成有向图阶段正式完成,后续会对所述第二有向图DG2中的环进行处理,为生成有向无环图做准备。
根据每个顶点的属性,可以从所述第二有向图DG2中检测出根顶点,从而针对所述根顶点进行后续处理,而非根顶点不做处理。
然后,将所述第二有向图DG2中的根顶点加入到所述第一有向无环图DAG1中,得到第二有向无环图DAG2(此时可能有环)。
S302,在所述有向图中将所述根顶点的子顶点记录为新的根顶点及接驳点。
在得到所述第二有向无环图DAG2后,还需要处理所述根顶点及其子顶点的关系,包括:在将所述根顶点加入到所述第一有向无环图DAG1中后,在所述第二有向图DAG2中找到所述根顶点的子顶点;在所述第二有向图DG2中将所述子顶点记录为新的根顶点;同时将所述子顶点记录为(所述根顶点对应的)接驳点。该过程会对所述第二有向图DG2进行更新,并且,每次加入所述根顶点后,所述第二有向无环图DAG2也会更新。
举例而言,假设所述第二有向图DG2中有根顶点V00、V10、V20、V30,其中根顶点V00有子顶点V01、V02、V03,根顶点V10有子顶点V11、V12、V13等。则上述操作具体过程为:
(1)将根顶点V00加入到第一有向无环图DAG1中。
(2)在第二有向图DG2中将根顶点V00的子顶点V01记录为根顶点,将根顶点V00的子顶点V02记录为根顶点,以此类推。
(3)同时在第二有向图DG2中还将根顶点V00的子顶点V01记录为接驳点,将根顶点V00的子顶点V02记录为接驳点,以此类推。
(4)将根顶点V00从第二有向图DG2中移动到第一有向无环图DAG1中。
(5)按照上述过程依次处理其他根顶点,如V10、V20、V30。
处理完所有的根顶点后,第二有向图DG2中的根顶点V00、V10、V20、V30会移动到第一有向无环图DAG1中,成为第二有向无环图DAG2,且根顶点V00、V10、V20、V30的子顶点会成为第二有向图DG2中的新的根顶点,同时这些子顶点还被记录为接驳点。
S304,检测所述有向无环图是否有环,并在有环时根据所述接驳点的记录和每个顶点的业务语义进行切回边操作。
如果从某一有向图上某个顶点v出发的遍历,在结束之前出现一条从顶点u到顶点v的回边,由于顶点u在生成树上是顶点v的后代,则该有向图必定存在包含顶点v和顶点u的环,此时称此有向图有环。在本实施例中,可以采用DFS算法对所述第二有向无环图DAG2中的所有顶点进行遍历,来检测所述第二有向无环图DAG2是否有环。当然,在其他实施例中,也可以采用现有的其他常用方式来检测所述第二有向无环图DAG2是否有环,在此不再赘述。
本实施例在检测到有环时,不是对整条环进行切除,而是定义了一种高效、符合普遍意义上的业务语义的回边切除策略。而在切回边时,会根据所述接驳点的记录和每个顶点的业务语义,提升切回边的准确性。
在本实施例中,所述切回边操作包括:根据所述接驳点的记录判断所述环中是否包含接驳点;当所述环中包含接驳点时,切除所述接驳点的入边;当所述环中不包含接驳点时,根据每个所述顶点的业务语义进行切回边操作。
在本实施例中,根据上面步骤中记录的接驳点,可以从技术意义上得到切回边的最优策略。记录接驳点的意义即在出现回边(有环)时,将接驳点的入边切除。例如,在图4中,顶点B、顶点C、顶点D产生了环,且该环涉及到三条边,包括边α、边β、边γ。在本实施例中,边γ是切除回边的最优策略,即顶点B(根顶点A的接驳点)的入边。
另外,参阅图6所述,为另一种环的示意图。图6是一个完全环(即一个有向图里面的顶点正好形成一个环,且没有根顶点),顶点ODS、顶点DWD、顶点DWS产生了环,该环涉及到三条边,包括边α、边β、边γ,且没有根顶点(因此不存在接驳点)。此时,可以根据每个顶点的业务语义进行切回边操作,包括:获取所述环中每个顶点的业务语义;根据所述业务语义找到所述环中在业务意义上属于第一层的第一顶点;切除所述第一顶点的入边。例如,在图6中,顶点ODS从业务意义上,属于第一层;顶点DWD从业务意义上,属于第二层;顶点DWS从业务意义上,属于第三层。从业务意义上,第一层不会有上游依赖,即顶点ODS作为第一层,不应该依赖顶点DWS。因此,从业务意义上,边γ是切除回边的最优策略,即顶点ODS(业务意义上第一层顶点)的入边。
值得注意的是,如果采用上述两种方式均无法找到切除回边的最优策略,则还可以采用其他方式破坏该环,例如现有的切除整条环的方式。
在步骤S304切回边完成后,返回步骤S300,继续检测所述第二有向图DG2中的根顶点,将所述第二有向图DG2中的根顶点加入到所述第二有向无环图DAG2中,并检测是否有环和进行切回边操作,直至处理完所述第二有向图DG2中所有的根顶点,此时生成最终完整版本的有向无环图,即得到第三有向无环图DAG3。
本实施例提出的有向无环图生成方法,可以在将根顶点从有向图加入到有向无环图后,将所述根顶点的子顶点记录为新的根顶点和接驳点,然后在检测到所述有向无环图有环时,根据所述接驳点的记录和每个顶点的业务语义进行切回边操作,而不是切除整条环。该方法在传统的DAG生成算法的基础上,通过对根顶点检测环节的优化、对图拷贝的优化,达到了减少时间成本的消耗和内存成本的消耗的目的。
实施例三
如图7所示,为本申请第三实施例提出一种电子装置2的硬件架构示意图。本实施例中,所述电子装置2可包括,但不仅限于,可通过系统总线相互通信连接的存储器21、处理器22、网络接口23。需要指出的是,图7仅示出了具有组件21-23的电子装置2,但是应理解的是,并不要求实施所有示出的组件,可以替代的实施更多或者更少的组件。
所述存储器21至少包括一种类型的可读存储介质,所述可读存储介质包括闪存、硬盘、多媒体卡、卡型存储器(例如,SD或DX存储器等)、随机访问存储器(RAM)、静态随机访问存储器(SRAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、可编程只读存储器(PROM)、磁性存储器、磁盘、光盘等。在一些实施例中,所述存储器21可以是所述电子装置2的内部存储单元,例如该电子装置2的硬盘或内存。在另一些实施例中,所述存储器21也可以是所述电子装置2的外部存储设备,例如该电子装置2上配备的插接式硬盘,智能存储卡(Smart Media Card,SMC),安全数字(Secure Digital,SD)卡,闪存卡(Flash Card)等。当然,所述存储器21还可以既包括所述电子装置2的内部存储单元也包括其外部存储设备。本实施例中,所述存储器21通常用于存储安装于所述电子装置2的操作系统和各类应用软件,例如有向无环图生成系统60的程序代码等。此外,所述存储器21还可以用于暂时地存储已经输出或者将要输出的各类数据。
所述处理器22在一些实施例中可以是中央处理器(Central Processing Unit,CPU)、控制器、微控制器、微处理器、或其他数据处理芯片。该处理器22通常用于控制所述电子装置2的总体操作。本实施例中,所述处理器22用于运行所述存储器21中存储的程序代码或者处理数据,例如运行所述有向无环图生成系统60等。
所述网络接口23可包括无线网络接口或有线网络接口,该网络接口23通常用于在所述电子装置2与其他电子设备之间建立通信连接。
实施例四
如图8所示,为本申请第四实施例提出一种有向无环图生成系统60的模块示意图。所述有向无环图生成系统60可以被分割成一个或多个程序模块,一个或者多个程序模块被存储于存储介质中,并由一个或多个处理器所执行,以完成本申请实施例。本申请实施例所称的程序模块是指能够完成特定功能的一系列计算机程序指令段,以下描述将具体介绍本实施例各程序模块的功能。
在本实施例中,所述有向无环图生成系统60包括:
检测模块600,用于检测有向图中的根顶点,将所述根顶点加入到有向无环图中。
在生成有向无环图之前,首先要生成有向图,为后续根据所述有向图进一步生成所述有向无环图做准备。该过程主要包括:
(1)收集数据表之间的依赖关系作为语料数据。
通过对调度系统的任务进行分析,可以基于调度任务的SQL代码收集到数据表之间的依赖关系,将这些依赖关系作为后续要生成的有向无环图的语料数据。
(2)创建空的第一有向图和空的第一有向无环图。
基于所述语料数据(数据表之间的依赖关系)可以开始生成所需的有向无环图。首先,需要创建空的第一有向图DG1,以及创建空的第一有向无环图DAG1。
(3)根据所述语料数据转换并生成顶点和边,加入到所述第一有向图中,得到第二有向图。
基于这些语料数据(数据表之间的依赖关系),可以转换并生成图的顶点和边(具体生成过程可采用现有的常用方式,在此不再赘述),然后将这些顶点和边加入到所述第一有向图DG1中。其中,将每条边作为相应顶点的属性标记到所述顶点中,以便后续判断所述顶点是否为根顶点。所述顶点可以理解为一个事物(Object),在图论中,一张图是由顶点的集合和顶点之间的连接(边)构成的。此处会涉及到三个对象,包括一条边、一个源顶点、一个目的顶点。所述边的方向为从相应的所述源顶点指向所述目的顶点。
在本实施例中,将所述顶点和边加入到所述第一有向图DG1中包括:将所有所述顶点加入到所述第一有向图DG1中;从所述顶点中找到每个所述边分别对应的源顶点和目的顶点;将所述边标记到相应源顶点的属性中,且将所述边标记为出边(即从所述源顶点出去的边);将所述边标记到相应目的顶点的属性中,且将所述边标记为入边(即从所述目的顶点进来的边)。
按照上述过程对所有的语料数据进行处理,会生成整体结构上的有向图,即第二有向图DG2。生成有向图阶段正式完成,后续会对所述第二有向图DG2中的环进行处理,为生成有向无环图做准备。
根据每个顶点的属性,可以从所述第二有向图DG2中检测出根顶点,从而针对所述根顶点进行后续处理,而非根顶点不做处理。
然后,将所述第二有向图DG2中的根顶点加入到所述第一有向无环图DAG1中,得到第二有向无环图DAG2(此时可能有环)。
记录模块602,用于在所述有向图中将所述根顶点的子顶点记录为新的根顶点及接驳点。
在将所述根顶点加入到所述第一有向无环图DAG1中后,还需要处理所述根顶点及其子顶点的关系,包括:在所述第二有向图DAG2中找到所述根顶点的子顶点;在所述第二有向图DG2中将所述子顶点记录为新的根顶点;同时将所述子顶点记录为(所述根顶点对应的)接驳点。该过程会对所述第二有向图DG2进行更新,并且,每次加入所述根顶点后,所述第二有向无环图DAG2也会更新。
判断模块604,用于检测所述第二有向无环图是否有环,并在有环时根据所述接驳点的记录判断所述环中是否包含接驳点。
如果从某一有向图上某个顶点v出发的遍历,在结束之前出现一条从顶点u到顶点v的回边,由于顶点u在生成树上是顶点v的后代,则该有向图必定存在包含顶点v和顶点u的环,此时称此有向图有环。在本实施例中,可以采用DFS算法对所述第二有向无环图DAG2中的所有顶点进行遍历,来检测所述第二有向无环图DAG2是否有环。当然,在其他实施例中,也可以采用现有的其他常用方式来检测所述第二有向无环图DAG2是否有环,在此不再赘述。
切除模块606,用于当所述环中包含接驳点时,切除所述接驳点的入边。
本实施例在检测到有环时,不是对整条环进行切除,而是定义了一种高效、符合普遍意义上的业务语义的回边切除策略。而在切回边时,会根据所述接驳点的记录,提升切回边的准确性。
在本实施例中,根据上面步骤中记录的接驳点,可以从技术意义上得到切回边的最优策略。记录接驳点的意义即在出现回边(有环)时,将接驳点的入边切除。例如,在图4中,顶点B、顶点C、顶点D产生了环,且该环涉及到三条边,包括边α、边β、边γ。在本实施例中,边γ是切除回边的最优策略,即顶点B(根顶点A的接驳点)的入边。
然后触发所述检测模块600继续检测所述第二有向图DG2的根顶点,直至处理完所述第二有向图DG2中所有的根顶点,此时生成最终完整版本的有向无环图,即得到第三有向无环图DAG3。
本实施例提出的有向无环图生成系统,可以在将根顶点从有向图加入到有向无环图后,将所述根顶点的子顶点记录为新的根顶点和接驳点,然后在检测到所述有向无环图有环时,根据所述接驳点的记录和每个顶点的业务语义进行切回边操作,而不是切除整条环。该系统在传统的DAG生成算法的基础上,通过对根顶点检测环节的优化、对图拷贝的优化,达到了减少时间成本的消耗和内存成本的消耗的目的。
实施例五
本申请还提供了另一种实施方式,即提供一种计算机可读存储介质,所述计算机可读存储介质存储有有向无环图生成程序,所述有向无环图生成程序可被至少一个处理器执行,以使所述至少一个处理器执行如上述的有向无环图生成方法的步骤。
需要说明的是,在本文中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者装置不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者装置所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括该要素的过程、方法、物品或者装置中还存在另外的相同要素。
上述本申请实施例序号仅仅为了描述,不代表实施例的优劣。
显然,本领域的技术人员应该明白,上述的本申请实施例的各模块或各步骤可以用通用的计算装置来实现,它们可以集中在单个的计算装置上,或者分布在多个计算装置所组成的网络上,可选地,它们可以用计算装置可执行的程序代码来实现,从而,可以将它们存储在存储装置中由计算装置来执行,并且在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤,或者将它们分别制作成各个集成电路模块,或者将它们中的多个模块或步骤制作成单个集成电路模块来实现。这样,本申请实施例不限制于任何特定的硬件和软件结合。
以上仅为本申请实施例的优选实施例,并非因此限制本申请实施例的专利范围,凡是利用本申请实施例说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其他相关的技术领域,均同理包括在本申请实施例的专利保护范围内。
Claims (10)
1.一种有向无环图生成方法,其特征在于,所述方法包括:
检测有向图中的根顶点,将所述根顶点加入到有向无环图中;
在所述有向图中将所述根顶点的子顶点记录为接驳点;
检测所述有向无环图是否有环,并在有环时根据所述接驳点的记录判断所述环中是否包含接驳点;及
当所述环中包含接驳点时,切除所述接驳点的入边。
2.根据权利要求1所述的有向无环图生成方法,其特征在于,所述方法在所述检测有向图中的根顶点之前还包括:
收集数据表之间的依赖关系作为语料数据;
创建空的有向图和空的有向无环图;
基于所述语料数据转换并生成顶点和边,将所述顶点和所述边加入到所述有向图中。
3.根据权利要求2所述的有向无环图生成方法,其特征在于,所述将所述顶点和所述边加入到所述有向图中包括:
将所有所述顶点加入到所述有向图中;
从所述顶点中找到每个所述边分别对应的源顶点和目的顶点;
将所述边标记为相应源顶点的出边;
将所述边标记为相应目的顶点的入边。
4.根据权利要求1所述的有向无环图生成方法,其特征在于,所述在所述有向图中将所述根顶点的子顶点记录为接驳点包括:
在将所述根顶点加入到所述有向无环图中后,在所述有向图中找到所述根顶点的子顶点;
将所述子顶点记录为所述有向图中新的根顶点;
同时将所述子顶点记录为接驳点。
5.根据权利要求1所述的有向无环图生成方法,其特征在于,所述方法在所述环中不包含接驳点时还包括:
根据每个所述顶点的业务语义切除指定顶点的入边。
6.根据权利要求5所述的有向无环图生成方法,其特征在于,所述根据每个所述顶点的业务语义切除指定顶点的入边包括:
获取所述环中每个顶点的业务语义;
根据所述业务语义找到所述环中在业务意义上属于第一层的第一顶点;
切除所述第一顶点的入边。
7.根据权利要求1所述的有向无环图生成方法,其特征在于,所述检测所述有向无环图是否有环包括:
采用深度优先遍历算法对所述有向无环图中的所有顶点进行遍历,以判断是否有环。
8.一种有向无环图生成系统,其特征在于,所述系统包括:
检测模块,用于检测有向图中的根顶点,将所述根顶点加入到有向无环图中;
记录模块,用于在所述有向图中将所述根顶点的子顶点记录为接驳点;
判断模块,用于检测所述有向无环图是否有环,并在有环时根据所述接驳点的记录判断所述环中是否包含接驳点;
切除模块,用于当所述环中包含接驳点时,切除所述接驳点的入边。
9.一种电子装置,其特征在于,所述电子装置包括:存储器、处理器及存储在所述存储器上并可在所述处理器上运行的有向无环图生成程序,所述有向无环图生成程序被所述处理器执行时实现如权利要求1至7中任一项所述的有向无环图生成方法。
10.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质上存储有有向无环图生成程序,所述有向无环图生成程序被处理器执行时实现如权利要求1至7中任一项所述的有向无环图生成方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110665336.XA CN113326402B (zh) | 2021-06-16 | 2021-06-16 | 有向无环图生成方法及系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110665336.XA CN113326402B (zh) | 2021-06-16 | 2021-06-16 | 有向无环图生成方法及系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN113326402A true CN113326402A (zh) | 2021-08-31 |
CN113326402B CN113326402B (zh) | 2022-07-19 |
Family
ID=77420915
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110665336.XA Active CN113326402B (zh) | 2021-06-16 | 2021-06-16 | 有向无环图生成方法及系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN113326402B (zh) |
Citations (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20090249004A1 (en) * | 2008-03-26 | 2009-10-01 | Microsoft Corporation | Data caching for distributed execution computing |
CN102156782A (zh) * | 2011-04-14 | 2011-08-17 | 国电南瑞科技股份有限公司 | 基于图论的电力系统公式并行运算管理方法 |
CN108733832A (zh) * | 2018-05-28 | 2018-11-02 | 北京阿可科技有限公司 | 有向无环图的分布式存储方法 |
CN109284888A (zh) * | 2018-06-19 | 2019-01-29 | 杭州数澜科技有限公司 | 一种用于检测任务依赖之间的环路的方法和装置 |
CN111061551A (zh) * | 2019-12-06 | 2020-04-24 | 深圳前海微众银行股份有限公司 | 节点的合并调度方法、装置、设备及存储介质 |
CN111124872A (zh) * | 2018-10-31 | 2020-05-08 | 上海哔哩哔哩科技有限公司 | 基于差异代码分析的分支检测方法、装置及存储介质 |
US20200344185A1 (en) * | 2019-04-26 | 2020-10-29 | Oracle International Corporation | Directed acyclic graph based framework for training models |
CN111858290A (zh) * | 2019-04-30 | 2020-10-30 | 深圳市前海源伞科技有限公司 | 用于检测目标代码的内存泄漏路径的方法和设备 |
US20210004411A1 (en) * | 2019-07-02 | 2021-01-07 | Ananth Natarajan | System and method for directed acyclic graph (dag) encoding into hash linked blocks |
CN112434061A (zh) * | 2020-08-25 | 2021-03-02 | 上海幻电信息科技有限公司 | 支持循环依赖的任务调度方法和系统 |
-
2021
- 2021-06-16 CN CN202110665336.XA patent/CN113326402B/zh active Active
Patent Citations (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20090249004A1 (en) * | 2008-03-26 | 2009-10-01 | Microsoft Corporation | Data caching for distributed execution computing |
CN102156782A (zh) * | 2011-04-14 | 2011-08-17 | 国电南瑞科技股份有限公司 | 基于图论的电力系统公式并行运算管理方法 |
CN108733832A (zh) * | 2018-05-28 | 2018-11-02 | 北京阿可科技有限公司 | 有向无环图的分布式存储方法 |
CN109284888A (zh) * | 2018-06-19 | 2019-01-29 | 杭州数澜科技有限公司 | 一种用于检测任务依赖之间的环路的方法和装置 |
CN111124872A (zh) * | 2018-10-31 | 2020-05-08 | 上海哔哩哔哩科技有限公司 | 基于差异代码分析的分支检测方法、装置及存储介质 |
US20200344185A1 (en) * | 2019-04-26 | 2020-10-29 | Oracle International Corporation | Directed acyclic graph based framework for training models |
CN111858290A (zh) * | 2019-04-30 | 2020-10-30 | 深圳市前海源伞科技有限公司 | 用于检测目标代码的内存泄漏路径的方法和设备 |
US20210004411A1 (en) * | 2019-07-02 | 2021-01-07 | Ananth Natarajan | System and method for directed acyclic graph (dag) encoding into hash linked blocks |
CN111061551A (zh) * | 2019-12-06 | 2020-04-24 | 深圳前海微众银行股份有限公司 | 节点的合并调度方法、装置、设备及存储介质 |
CN112434061A (zh) * | 2020-08-25 | 2021-03-02 | 上海幻电信息科技有限公司 | 支持循环依赖的任务调度方法和系统 |
Non-Patent Citations (2)
Title |
---|
李自力: "《虚拟对象基于层次包围盒的碰撞检测与交互》", 《第十二届全国图象图形学学术会议》 * |
边有钢: "《复杂车-网-路条件下的多车系统分布式运动控制》", 《中国优秀博硕士学位论文全文数据库(博士)工程科技Ⅱ辑》 * |
Also Published As
Publication number | Publication date |
---|---|
CN113326402B (zh) | 2022-07-19 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111563101B (zh) | 执行计划优化方法、装置、设备及存储介质 | |
US20130268644A1 (en) | Consistent ring namespaces facilitating data storage and organization in network infrastructures | |
KR101496179B1 (ko) | 데이터 부재 태깅 기반의 정보 검색 시스템 및 방법 | |
CN112434061A (zh) | 支持循环依赖的任务调度方法和系统 | |
CN108256870B (zh) | 基于拓扑结构生成描述信息及更新、数据处理方法和装置 | |
CN111314158B (zh) | 大数据平台监控方法、装置及设备、介质 | |
CN112416972A (zh) | 实时数据流处理方法、装置、设备、及可读存储介质 | |
CN107291768B (zh) | 一种索引建立的方法及装置 | |
WO2022134471A1 (zh) | 区块链节点的管理方法、装置、计算机设备和存储介质 | |
CN115756955A (zh) | 一种数据备份、数据恢复的方法、装置及计算机设备 | |
CN115098600A (zh) | 用于数据仓库的有向无环图构建方法、装置和计算机设备 | |
CN104462349A (zh) | 一种文件处理方法及装置 | |
CN114328601A (zh) | 数据降采样和数据查询方法、系统及存储介质 | |
CN113326402B (zh) | 有向无环图生成方法及系统 | |
CN117376092A (zh) | 故障根因定位方法、装置、设备及存储介质 | |
CN112559483A (zh) | 基于hdfs的数据管理方法、装置、电子设备及介质 | |
CN117149909A (zh) | 数据同步方法、装置、存储介质及处理器 | |
CN111427871B (zh) | 数据处理方法、装置、设备 | |
CN113360479B (zh) | 数据迁移方法、装置、计算机设备和存储介质 | |
CN111061927A (zh) | 数据处理方法、装置及电子设备 | |
CN109710833B (zh) | 用于确定内容节点的方法与设备 | |
CN112612784B (zh) | 河水流域计算单元自动划分方法、装置和计算机设备 | |
CN113886342A (zh) | 文件的格式转换方法、装置、存储介质及处理器 | |
CN111274316A (zh) | 多级数据流转任务的执行方法及装置、电子设备、存储介质 | |
CN110019987B (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 |