发明内容
为了解决上述技术问题,提出了本申请。本申请的实施例提供了基于外存的图数据库结构和图数据存储方法,图数据存储装置和电子设备,其将图数据中的顶点及与顶点相关的所有边数据(包括入边数据和出边数据)连续地存储于数据存储节点中,从而优化图数据库的存储效率并充分支持子图查询的需求。
根据本申请的一方面,提供了一种基于外存的图数据存储方法,包括:分别将图数据中的每一顶点数据和与该顶点相关的入边数据和出边数据存储于一数据存储节点,所述数据存储节点包括一个或者多个数据存储页,其中,所述顶点数据包括顶点身份标识和顶点属性数据,其中,与所述顶点相关的入边数据包括入边引用,所述入边引用指向以所述顶点为目标顶点的源顶点的身份标识,其中,与所述顶点相关的出边数据包括以所述顶点为源顶点的目标顶点的身份标识;分别指定不同的键值对应于不同的数据存储节点,其中,键值表示用以表征不同数据存储节点的唯一标识符;以及,将所有的数据存储节点保存于一数据树中。
在上述基于外存的图数据存储方法中,当所述顶点数据以及与该顶点相关的入边数据和出边数据的总数据量小于或等于某一预设阈值时,所述数据存储节点包括第一数据存储页,所述第一数据存储页被设定为第一数据储存节点,其中所述顶点数据与该顶点相关的入边数据和出边数据连续地储存于所述第一数据存储页。
在上述基于外存的图数据存储方法中,当所述顶点数据以及与该顶点相关的入边数据和出边数据的总数据量大于该预设阈值时,所述数据存储节点包括第二数据存储页、第三数据储存页和第四数据储存页,其中,所述第二数据储存页用于存储所述顶点数据,所述第三数据页用于存储与该顶点数据相关的入边数据,以及,所述第四数据页用于存储与该顶点数据相关的出边数据,其中,所述第二数据存储页被设定为第二数据储存节点,所述第三数据存储页被设定为第三数据储存节点,以及,所述第四数据存储页被设定为第四数据储存节点。
在上述基于外存的图数据存储方法中,该预设阈值为4KB。
在上述基于外存的图数据存储方法中,所述第一数据存储节点对应的键值为存储于所述第一数据页的所述顶点数据的顶点身份标识,所述第二数据存储节点对应的键值为存储于所述第二数据页的所述顶点数据的顶点身份标识加上预设长度的标识符,所述第三数据存储节点对应的键值为所述顶点数据的身份标识加上特定长度的标识符再加上以所述顶点为源顶点的所有出边中的第一条出边的目的顶点的身份标识,所述第四数据储存节点对应的键值为所述顶点的身份标识加上特定长度的标识符再加上以所述顶点为目标顶点的所有入边中第一条入边的源顶点的身份标识。
根据本申请的另一方面,还提供基于外存的图数据库结构,其为一数据树,其中,所述数据树包括多个数据存储节点,其中每一数据存储节点分别用于存储每一顶点数据和与该顶点相关的入边数据和出边数据,其中,每一数据存储节点具有指定键值,所述键值表示用以表征不同数据存储节点的唯一标识符,其中,所述顶点数据包括顶点身份标识和顶点属性数据,其中,与所述顶点相关的入边数据包括入边引用,所述入边引用指向以所述顶点为目标顶点的源顶点的身份标识,其中,与所述顶点相关的出边数据包括以所述顶点为源顶点的目标顶点的身份标识。
在上述基于外存的图数据库结构中,当所述顶点数据以及与该顶点相关的入边数据和出边数据的总数据量小于或等于某一预设阈值时,所述数据存储节点包括第一数据存储页,所述第一数据存储页被设定为第一数据储存节点,其中所述顶点数据与该顶点相关的入边数据和出边数据连续地储存于所述第一数据存储页。
在上述基于外存的图数据库结构中,当所述顶点数据以及与该顶点相关的入边数据和出边数据的总数据量大于该预设阈值时,所述数据存储节点包括第二数据存储页、第三数据储存页和第四数据储存页,其中,所述第二数据储存页用于存储所述顶点数据,所述第三数据页用于存储与该顶点数据相关的入边数据,以及,所述第四数据页用于存储与该顶点数据相关的出边数据,其中,所述第二数据存储页被设定为第二数据储存节点,所述第三数据存储页被设定为第三数据储存节点,以及,所述第四数据存储页被设定为第四数据储存节点。
在上述基于外存的图数据库结构中,该预设阈值为4KB。
在上述基于外存的图数据库结构中,所述第一数据存储节点对应的键值为存储于所述第一数据页的所述顶点数据的顶点身份标识,所述第二数据存储节点对应的键值为存储于所述第二数据页的所述顶点数据的顶点身份标识加上预设长度的标识符,所述第三数据存储节点对应的键值为所述顶点数据的身份标识加上特定长度的标识符再加上以所述顶点为源顶点的所有出边中的第一条出边的目的顶点的身份标识,所述第四数据储存节点对应的键值为所述顶点的身份标识加上特定长度的标识符再加上以所述顶点为目标顶点的所有入边中第一条入边的源顶点的身份标识。
根据本申请的另一方面,还提供一种基于外存的图数据存储装置,包括:图数据存储单元,用于分别将图数据中的每一顶点数据和与该顶点相关的入边数据和出边数据存储于一数据存储节点,所述数据存储节点包括一个或者多个数据存储页,其中,所述顶点数据包括顶点身份标识和顶点属性数据,其中,与所述顶点相关的入边数据包括入边引用,所述入边引用指向以所述顶点为目标顶点的源顶点的身份标识,其中,与所述顶点相关的出边数据包括以所述顶点为源顶点的目标顶点的身份标识;键值指定单元,分别指定不同的键值对应于不同的数据存储节点,其中,键值表示用以表征不同数据存储节点的唯一标识符;以及,节点储存单元,将所有的数据存储节点保存于一数据树中。
在上述基于外存的图数据存储装置中,当所述顶点数据以及与该顶点相关的入边数据和出边数据的总数据量小于或等于某一预设阈值时,所述数据存储节点包括第一数据存储页,所述第一数据存储页被设定为第一数据储存节点,其中所述顶点数据与该顶点相关的入边数据和出边数据连续地储存于所述第一数据存储页。
在上述基于外存的图数据存储装置中,当所述顶点数据以及与该顶点相关的入边数据和出边数据的总数据量大于该预设阈值时,所述数据存储节点包括第二数据存储页、第三数据储存页和第四数据储存页,其中,所述第二数据储存页用于存储所述顶点数据,所述第三数据页用于存储与该顶点数据相关的入边数据,以及,所述第四数据页用于存储与该顶点数据相关的出边数据,其中,所述第二数据存储页被设定为第二数据储存节点,所述第三数据存储页被设定为第三数据储存节点,以及,所述第四数据存储页被设定为第四数据储存节点。
在上述基于外存的图数据存储装置中,该预设阈值为4KB。
在上述基于外存的图数据存储装置中,所述第一数据存储节点对应的键值为存储于所述第一数据页的所述顶点数据的顶点身份标识,所述第二数据存储节点对应的键值为存储于所述第二数据页的所述顶点数据的顶点身份标识加上预设长度的标识符,所述第三数据存储节点对应的键值为所述顶点数据的身份标识加上特定长度的标识符再加上以所述顶点为源顶点的所有出边中的第一条出边的目的顶点的身份标识,所述第四数据储存节点对应的键值为所述顶点的身份标识加上特定长度的标识符再加上以所述顶点为目标顶点的所有入边中第一条入边的源顶点的身份标识。
根据本申请的又一方面,提供一种电子设备,包括:处理器;以及,存储器,在所述存储器中存储有计算机程序指令,所述计算机程序指令在被所述处理器运行时使得所述处理器执行如上所述的基于外存的图数据存储方法。
根据本申请的又一方面,提供一种计算机可读存储介质,其上存储有计算机程序指令,当所述计算机程序指令被计算装置执行时,可操作来执行如上所述的基于外存的图数据存储方法。
本申请提供的基于外存的图数据库结构、图数据存储方法,图数据存储装置和电子设备,可以优化子图查询的性能,以减少图数据库读取时对外存的访问次数。
具体实施方式
下面,将参考附图详细描述根据本申请的示例实施例。显然,所描述的实施例仅是本申请的一部分实施例,而不是本申请的全部实施例,应理解本申请不受这里描述的示例实施例的限制。
申请概述
如上所述,图数据存储是图数据库中最重要的基础设计,它对图数据库的性能起着决定性的作用。尤其是,对于基于外存的图数据库而言,不同的数据存储方式对性能的影响往往是数量级的。现已有多种用于基于外存的图数据库,然而,这些图数据库或多或少不能充分发挥图数据库的性能,尤其是无法充分支持子图查询(例如,查询一个顶点的所有边,或者,查询一个顶点的K度邻居)的需求。
更具体地,现有的基于外存的图数据库将顶点数据和边数据分开存储。换言之,将边和顶点分别视为独立实体进行存放,并且,借助边的起始顶点和目的顶点的ID对边进行索引。另一种现有的基于外存的图数据库将相同起点的所有边组成一个链表,并在起点上存储链表的头顶点指针。
然而,不管是哪种现有的图数据库结构,在进行数据读取时皆需多次访问外存。例如,在访问一个顶点相关的所有边时(包括入边和出边),需要读取多个数据页。并且,基于外存的图数据存储模式对外存设备的存储空间利用率不高。
针对上述技术问题,本申请的基本构思是将图数据中的顶点数据及与顶点相关的入边数据和出边数据连续地存储于同一数据储存节点中;进而将所述数据存储节点保存于一数据树中,其中,每一数据存储节点具有指定键值。
基于此,本发明提供一种基于外存的图数据库结构,图数据存储方法、图数据存储装置和电子设备,其首先分别将图数据中的每一顶点数据和与该顶点相关的入边数据和出边数据存储于一数据存储节点,所述数据存储节点包括一个或者多个数据存储页;然后,分别指定不同的键值对应于不同的数据存储节点,其中,键值表示用以表征不同数据存储节点的唯一标识符;将所有的数据存储节点保存于一数据树中。这样,将图数据中的顶点及与顶点相关的所有边连续地存储于同一数据存储节点中,通过这样的方式,优化图数据库的存储效率并充分支持子图查询的需求。
在介绍了本申请的基本原理之后,下面将参考附图来具体介绍本申请的各种非限制性实施例。
示意性方法
图1图示了根据本申请实施例的基于外存的图数据存储方法的流程图。如图1所示,根据本申请实施例的基于外存的图数据存储方法,包括:S110,分别将图数据中的每一顶点数据和与该顶点相关的入边数据和出边数据存储于一数据存储节点,所述数据存储节点包括一个或者多个数据存储页,其中,所述顶点数据包括顶点身份标识和顶点属性数据,其中,与所述顶点相关的入边数据包括入边引用,所述入边引用指向以所述顶点为目标顶点的源顶点的身份标识,其中,与所述顶点相关的出边数据包括以所述顶点为源顶点的目标顶点的身份标识;S120,分别指定不同的键值对应于不同的数据存储节点,其中,键值表示用以表征不同数据存储节点的唯一标识符;S130,将所有的数据存储节点保存于一数据树中。
在步骤S110中,分别将图数据中的每一顶点数据和与该顶点相关的入边数据和出边数据存储于一数据存储节点,其中,所述顶点数据包括顶点身份标识和顶点属性数据;与所述顶点相关的入边数据包括入边引用,所述入边引用指向以所述顶点为目标顶点的源顶点的身份标识;与所述顶点相关的出边数据包括以所述顶点为源顶点的目标顶点的身份标识。换言之,在本申请实施例中,将每一顶点和与该顶点相关联的所有边视为一个实体进行存储。
为了实现将图数据中的顶点和与该顶点相关联的所有边视为一个实体进行存储的思想,在本申请中,首先对图数据中的每条边的数据存储方式进行了调整。更具体地,在本申请中,对于每条边(用公式表示为:euv=(u,v),u表示该条边的源顶点,v表示该条边的目的顶点),将所有与该条边相关的数据与其源顶点u存储在一起。并且,在其目的顶点v存储一个引用(InRef)ru,其中,该引用指向所述源顶点的身份标识。这样,对于每一顶点而言,其最终存储的数据包括:该顶点自身所具有的数据(包括顶点身份标识和顶点属性),以该顶点为源顶点的出边数据,以及,以该顶点为目的顶点的入边数据。其中,与所述顶点相关的入边数据包括入边引用,该入边引用指向以所述顶点为目标顶点的源顶点的身份标识;与所述顶点相关的出边数据包括以所述顶点为源顶点的目标顶点的身份标识。
更具体地,对于以该顶点为源顶点的出边数据而言,由于已存有所述顶点的身份标识,因此,出边数据中不需要储存源顶点的身份标识,只需存储以所述顶点为源顶点的目标顶点的身份标识;相应地,对于以该顶点为目的顶点的入边数据而言,由于已存有所述顶点的身份标识,因此,所述入边引用无需同时指向源顶点的身份标识和目的顶点的身份标识,只需指向以所述顶点为目标顶点的源顶点的身份标识即可。换言之,对于每条边而言,其实际占用的空间为:目的顶点身份标识大小+顶点属性大小+源顶点身份标识大小。
进一步地,在本申请中,所述数据存储节点包括一个或多个数据存储页。特别地,当所述顶点数据以及与该顶点相关的入边数据和出边数据的总数据量小于或等于某一预设阈值时,所述数据存储节点包括一个数据存储页,(为了便于说明,定义为第一数据存储页,并且,所述第一数据存储页被设定为第一数据储存节点),其中,所述第一数据存储页用于存储所述顶点数据与该顶点相关的入边数据和出边数据。换言之,所述顶点数据以及与该顶点相关的入边数据和出边数据连续地存储于所述第一数据存储页中。
当所述顶点数据以及与该顶点相关的入边数据和出边数据的总数据量大于该预设阈值时,所述数据存储节点包括3个数据存储页(为了便于说明,定义为第二数据存储页,第三数据储存页以及第四数据存储页,其中,所述第二数据存储页被设定为第二数据储存节点,所述第三数据存储页被设定为第三数据储存节点,以及,所述第四数据存储页被设定为第四数据储存节点),其中,所述第二数据储存页用于存储所述顶点数据,所述第三数据页用于存储与该顶点数据相关的入边数据,以及,所述第四数据页用于存储与该顶点数据相关的出边数据。换言之,当所述顶点数据以及与该顶点相关的入边数据和出边数据的总数据量大于该预设阈值时,将这个实体数据分为三个部分:顶点数据VertexData(顶点身份标识和顶点属性数据),出边数据OutEdgeData(以所述顶点为源顶点的目标顶点的身份标识),以及,入边数据InRefData(所述入边数据包括入边引用,该入边引用指向以所述顶点为目标顶点的源顶点的身份标识),并分别存储与不同的数据存储页中。
值得一提的是,当所述出边数据OutEdgeData仍超过预设阈值时,可选择将所述出边数据按照目的顶点身份标识排序后拆分为不超过该预设阈值大小的出边集合,并分别储存与不同的所述第三数据存储页中。特别地,当单条出边数据超过该预设阈值时,可选择扩展所述第三数据存储页,以确保该单条出边数据能够存储于所述第三数据存储页中。相应地,当所述入边数据InRefData超过预设阈值时,可选择将所述入边数据按照源顶点身份标识排序后拆分为不超过该预设阈值大小的入边引用集合,并分别储存与不同的所述第四数据存储页中。特别地,当单条入边应用数据超过该预设阈值时,可选择扩展所述第四数据存储页,以确保该单条出边数据能够存储于所述第四数据存储页中。
换言之,在本申请中,所述数据存储节点的数量和类型与所述顶点数据以及与该顶点相关的入边数据和出边数据的总数据量有关。更明确地,当所述顶点数据以及与该顶点相关的入边数据和出边数据的总数据量小于或等于某一预设阈值,所述数据储存节点包括一个数据存储节点,其上存储有所述顶点数据以及与该顶点相关的入边数据和出边数据;当所述顶点数据以及与该顶点相关的入边数据和出边数据的总数据量大于该预设阈值时,所述数据存储节点包括3个或以上数据存储节点,其中,所述第二数据存储节点用于存储所述顶点数据,所述第三数据存储节点用于存储所述出边数据,以及所述第四数据存储节点用于存储所述入边数据。本领域的技术人员应可以理解,在申请中,第一数据存储节点,第二数据存储节点,第三数据存储节点和第四数据存储节点,并非表征在本申请中仅有4个数据存储节点,而表征在本申请中包括4类数据存储节点。为了便于描述,将第一数据储存节点定义为PackedNode,第二数据存储节点定位为VertexNode,第三数据存储节点定义为OutEdgeNode,以及第四数据存储节点定义为InRefNode。
在具体实施中,该预设阈值取决于所述数据存储页的大小,例如,当所述数据存储页为4KB时,该预设阈值对应设置为4KB。当然,本领域的技术人员应容易理解,在本申请另外实施例中,所述数据存储页的大小可进行调整,同时,该预设阈值的选择也可以基于其他标准。对此,并不为本申请所局限。
进一步地,在将所述图数据中的顶点数据和与顶点相关的入边数据和出边数据按照如上所述的方法存储于不同的数据存储节点之后(PackedNode,VertexNode,OutEdgeNode,InRefNode),将各所述数据存储节点按照不同的键值保存在一个数据树中。在此之前,需先执行步骤S120。
相应地,在步骤S120中,分别指定不同的键值对应于不同的数据存储节点,其中,键值表示用以表征不同数据存储节点的唯一标识符。换言之,指定唯一的标识符于每一数据存储节点。
特别地,在本申请中,所述第一数据存储节点对应的键值可设置为存储于所述第一数据页的所述顶点数据的顶点身份标识,即顶点id。所述第二数据存储节点对应的键值可被设置为存储于所述第二数据页的所述顶点数据的顶点身份标识加上预设长度的标识符(例如,一个字节的标识符),即,顶点id+一字节的标识符。所述第三数据存储节点对应的键值可被设置所述顶点数据的身份标识加上特定长度的标识符(例如,一个字节的表示符)再加上以所述顶点为源顶点的所有出边中的第一条出边的目的顶点的身份标识,即,源顶点id+一字节标识符+第一条边的目的顶点id。所述第四数据储存节点对应的键值为所述顶点的身份标识加上特定长度的标识符(例如,一个字节的表示符)再加上以所述顶点为目标顶点的所有入边中第一条入边的源顶点的身份标识,即目的顶点id+一字节标识符+第一条边的源顶点id。
本领域的技术人员应容易理解,在本申请另外的实施例中,所述数据存储节点(包括所述第一数据存储节点,所述第二数据存储节点,所述第三数据存储节点和所述第四数据存储节点)可按照其他方式指定唯一的键值,例如,预设长度的标识符可设置为2个字节的标识符。对此,并不为本申请所局限。
在步骤S130中,将所有的数据存储节点保存于一数据树中。在具体实施例中,所述数据树可被实施为Log-Structured-Merge-Tree,或者B+Tree等。对此,同样本申请不进行限制。
相应地,通过如前所述的图数据存储方法可形成一图数据库,其中该图数据库具有特殊的数据结构,并被设置存储于外存设备中。图2图示了根据本申请实施例中图数据库结构的示意图,如图2所示,所述图数据库结构为一数据树(例如,Log-Structured-Merge-Tree,或者B+Tree),其中,所述数据树包括多个数据存储节点,每一所述数据存储节点分别用于存储每一顶点数据和与该顶点相关的入边数据和出边数据,并且每一数据存储节点具有指定键值,所述键值表示用以表征不同数据存储节点的唯一标识符。
更具体地,在本申请中,所述图数据库结构的数据树中包括4类数据存储节点,分别为:第一数据储存节点,例如名称为PackedNode,第二数据存储节点,例如名称为VertexNode,第三数据存储节点,例如名称为OutEdgeNode,以及第四数据存储节点,例如名称为InRefNode。其形成机制包括各数据存储节点内所包含的数据内容均已说明,故在此不再赘述。
特别地,本申请所提供的所述图数据库将图数据中的顶点及与顶点相关的所有边(包括入边和出边)连续地存储于同一数据存储节点中,通过这样的方式,有利于提高图数据库存储于外存设备的空间效率。
更具体地,对于顶点数据而言,如果若其存储于所述第一数据存储节点(PackedNode)中,则需要存储一个顶点id作为其键值。同时,还需要存储所述顶点属性数据,因此所述顶点数据占用的空间大小为Sv=Svprop+Skey=Svprop+5,其中Svprop是所述顶点属性数据大小,Svid是顶点id所需要占用的字节数,这里设为5(可表示240个顶点,下同)。如果,所述顶点数据存储于所述第二数据存储节点中(VertexData),则需要存储[顶点id+一字节标识符]作为键值,因此所述顶点数据占用空间大小为:
Sv=Svprop+Skey=Svprop+5+1=Svprop+6。
对于一条边而言,需要存储的数据包括源顶点id,目的顶点id,以及边的属性,以及一个入边引用。如果该条边对应的源顶点存储在一个所述第一数据存储节点(PackedNode)中,则所有出边数据中都不需要再存储源顶点id,只需要存储目的顶点id及边属性,故储存该顶点的数据需要的字节数为SoutEdge=Svid+Seprop。如果该条边对应的源顶点存储在一个所述第二数据存储节点(VertexNode)中,则该条边的出边数据被连续存储在不同的所述第三数据存储节点(OutEdgeNode)中,其中,每个第三数据存储节点(OutEdgeNode)需要存储[源顶点id+一字节标识符+第一条边的目的顶点id]作为键值。因此所有出边占用的总空间为:
同时,还需要存储与该条边对应的入边引用。如果该条边对应的顶点数据存储于所述第一数据存储节点中,则与该条边相关的入边应用也存储于所述第一数据存储节点(PackedNode)中,因此每个入边应用占用空间为SinRef=Svid=5。如果该条边对应的顶点存储于所述第二数据存储节点(VertexNode)中,则与该条边相关的入边应用存储于连续的所述第四数据存储节点(InRefNode)中,与该条边相关的入边应用占用总空间为:
可得:SinRef≈5·015Ain
综上可知,本文提出的存储方案可以高效地利用外存设备存储空间。本领域技术人员容易理解,虽然外存的大小相对于内存大很多,但是其存储空间利用率同样也不能忽视。如果能够在相同的外存空间中存放更多的数据,那么也意味着内存中可以缓存更多的数据,从而间接地提升了高缓存命中率。
同时,这样的数据库结构可以减少在图数据库子图查询时对外存设备的访问次数,即,数据库的查询速度,可以得到优化。
以对所述图数据库进行如下操作为示例,第一种操作:单个顶点的增加,查找和修改;第二种操作,单条边的增加,删除,查找和修改;第三种操作,从一个顶点出发遍历所有出边;第四种操作,从一个顶点出发,遍历所有入边;第五种操作,删除单个顶点。
当执行第一种操作时,即,进行单个顶点的增加,查找和修改时,该顶点的存放节点位置存在两种可能:所述第一数据存储节点(PackedNode)或
所述第二数据存储节点(VertexNode)。无论对应于哪一种情况,对该顶点进行增加,查找或修改操作皆只需要对外存设备进行一次访问。
当执行第二种操作时,即,对单条边进行操作时,这里分为两种情况。第一种情况为:增加或删除一条边,需访问该条边数据所在的所述第一数据存储节点(PackedNode)或所述第三数据节点(OutEdgeNode),以修改其出边数据,同时,还需要访问所述第一数据存储节点(PackedNode)或所述第四数据节点(InRefNode),以修改其入边数据,即入边引用。这样总共需要2次访问外存。
第二种情况为:查找或修改一条边,在此情况下,只需要访问该条边数据所在的所述第一数据存储节点(PackedNode)或所述第三数据节点(OutEdgeNode),以修改其出边数据。换言之,在进行查找或修改一条边时,需访问外存1次。
当执行第三种操作时,即,从一个顶点出发,遍历与该顶点相关的所有出边时。这里,如果该顶点存放于所述第一数据存储节点(PackedNode)中,则,与该顶点相关的出边也存储于所述第一数据存储节点(PackedNode)中。换言之,此时,从一个顶点出发遍历与该顶点相关的所有出边只需要1次访问内存的操作。如果该顶点存放于所述第二数据存储节点(VertexNode)中,则,与该顶点相关的所有出边顺序存放在不同的所述第三数据存储节点中。相应地,遍历操作所需要的外存访问次数为:
其中Nout为出边数量,Sout为出边的平均数据量大小。
当执行第四种操作时,即,从一个顶点出发,遍历与该顶点相关的所有入边时。这里,如果该顶点存放于所述第一数据存储节点(PackedNode)时,与该顶点相关的入边数据也存储于所述第一数据存储节点(PackedNode)中。如前所述,所述入边引用指向以所述顶点为目标顶点的源顶点的身份标识,该源顶点可能存储于所述第一数据存储节点(PackedNode)或所述第三数据存储节点(OutEdgeNode)中。因此,从一个顶点出发遍历与该顶点相关的所有入边所需要外存访问次数为:CscanIn=1+Nin,其中,Nin表示入边引用的数量。
如果该顶点存放于所述第二数据存储节点(VertexNode)中,则需要遍历与该顶点相关的所述第四数据存储节点(InRefNode),然后对应每一个入边应用,访问其对应的存储于所述第一数据存储节点(PackedNode)或所述第三数据存储节点(OutEdgeNode)的源顶点数据。此时,从一个顶点出发遍历与该顶点相关的所有入边所需要访问的内存次数为:
其中Svid为存储一个顶点id所需的字节数,一般为5,以及,Nin表示入边引用的数量。
当执行第5种操作时,即,删除一个顶点时。在本申请中,删除一个顶点意味着需同时删除与该顶点相关的入边数据和出边数据。相应地,删除与该顶点相关的所有入边数据(入边引用),其需要的访问内存的次数与遍历入边的操作相同。而删除所有出边数据时,不仅需删除该顶点对应的出边数据(以该顶点为源顶点的目标顶点),还需要同时删除所述出边数据中每一目标顶点对应的入边引用。因此,删除所有出边数据所需访问外存的次数为:CdelOut=CscanOut+Nout。两项操作相加便可获得最终删除一个顶点所需的外存访问次数:
当Sout较小时CdelVertex≈1+Nin+Nout。
综上,本申请提供的图数据库结构和存取方法,对于单顶点增改查;单边的增删查改;以及出边的遍历操作进行了优化,降低了各自所需的外存访问次数。同时,也能利用所述图数据库结构进行其他操作,例如对于单顶点删除、入边的遍历等。
示意性装置
图3图示了根据本申请实施例的基于外存的图数据存储装置的框图。
如图3所示,根据本申请实施例的基于外存的图数据存储装置300包括:包括:图数据存储单元310,用于分别将图数据中的每一顶点数据和与该顶点相关的入边数据和出边数据存储于一数据存储节点,所述数据存储节点包括一个或者多个数据存储页,其中,所述顶点数据包括顶点身份标识和顶点属性数据,其中,与所述顶点相关的入边数据包括入边引用,所述入边引用指向以所述顶点为目标顶点的源顶点的身份标识,其中,与所述顶点相关的出边数据包括以所述顶点为源顶点的目标顶点的身份标识;键值指定单元320,分别指定不同的键值对应于不同的数据存储节点,其中,键值表示用以表征不同数据存储节点的唯一标识符;以及,节点储存单元330,将所有的数据存储节点保存于一数据树中。
在一个示例中,在上述基于外存的数据存储装置300中,当所述顶点数据以及与该顶点相关的入边数据和出边数据的总数据量小于或等于某一预设阈值时,所述数据存储节点包括第一数据存储页,所述第一数据存储页被设定为第一数据储存节点,其中所述顶点数据与该顶点相关的入边数据和出边数据连续地储存于所述第一数据存储页。
在一个示例中,在上述基于外存的数据存储装置300中,当所述顶点数据以及与该顶点相关的入边数据和出边数据的总数据量大于该预设阈值时,所述数据存储节点包括第二数据存储页、第三数据储存页和第四数据储存页,其中,所述第二数据储存页用于存储所述顶点数据,所述第三数据页用于存储与该顶点数据相关的入边数据,以及,所述第四数据页用于存储与该顶点数据相关的出边数据,其中,所述第二数据存储页被设定为第二数据储存节点,所述第三数据存储页被设定为第三数据储存节点,以及,所述第四数据存储页被设定为第四数据储存节点。
在一个示例中,在上述基于外存的数据存储装置300中,该预设阈值为4KB。
在一个示例中,在上述基于外存的数据存储装置300中,所述第一数据存储节点对应的键值为存储于所述第一数据页的所述顶点数据的顶点身份标识,所述第二数据存储节点对应的键值为存储于所述第二数据页的所述顶点数据的顶点身份标识加上预设长度的标识符,所述第三数据存储节点对应的键值为所述顶点数据的身份标识加上特定长度的标识符再加上以所述顶点为源顶点的所有出边中的第一条出边的目的顶点的身份标识,所述第四数据储存节点对应的键值为所述顶点的身份标识加上特定长度的标识符再加上以所述顶点为目标顶点的所有入边中第一条入边的源顶点的身份标识。
这里,本领域技术人员可以理解,上述图数据存储装置300中的各个单元和模块的具体功能和操作已经在上面参考图1到图2描述的基于外存的图数据存储方法中详细介绍,并因此,将省略其重复描述。
如上所述,根据本申请实施例的基于外存的图数据存储装置可以实现在各种终端设备中,例如图数据存储服务器中。在一个示例中,根据本申请实施例的基于外存的图数据存储装置可以作为一个软件模块和/或硬件模块而集成到所述终端设备中。例如,该基于外存的图数据存储装置可以是该终端设备的操作系统中的一个软件模块,或者可以是针对于该终端设备所开发的一个应用程序;当然,该基于外存的图数据存储装置同样可以是该终端设备的众多硬件模块之一。
替换地,在另一示例中,该基于外存的图数据存储装置与该终端设备也可以是分立的终端设备,并且该基于外存的图数据存储装置可以通过有线和/或无线网络连接到该终端设备,并且按照约定的数据格式来传输交互信息。
示意性电子设备
下面,参考图4来描述根据本申请实施例的电子设备。
图4图示了根据本申请实施例的电子设备的框图。
如图4所示,电子设备10包括一个或多个处理器11和存储器12。
处理器11可以是中央处理单元(CPU)或者具有数据处理能力和/或指令执行能力的其他形式的处理单元,并且可以控制电子设备10中的其他组件以执行期望的功能。
存储器12可以包括一个或多个计算机程序产品,所述计算机程序产品可以包括各种形式的计算机可读存储介质,例如易失性存储器和/或非易失性存储器。所述易失性存储器例如可以包括随机存取存储器(RAM)和/或高速缓冲存储器(cache)等。所述非易失性存储器例如可以包括只读存储器(ROM)、硬盘、闪存等。在所述计算机可读存储介质上可以存储一个或多个计算机程序指令,处理器11可以运行所述程序指令,以实现上文所述的本申请的各个实施例的基于外存的图数据存储方法以及/或者其他期望的功能。在所述计算机可读存储介质中还可以存储诸如图数据,键值等各种内容。
在一个示例中,电子设备10还可以包括:输入装置13和输出装置14,这些组件通过总线系统和/或其他形式的连接机构(未示出)互连。
例如,该输入装置13可以是例如键盘、鼠标等等。
该输出装置14可以向外部输出各种信息,包括图数据的顶点数据,边数据等。该输出设备14可以包括例如显示器、扬声器、打印机、以及通信网络及其所连接的远程输出设备等等。
当然,为了简化,图4中仅示出了该电子设备10中与本申请有关的组件中的一些,省略了诸如总线、输入/输出接口等等的组件。除此之外,根据具体应用情况,电子设备10还可以包括任何其他适当的组件。
示意性计算机程序产品
除了上述方法和设备以外,本申请的实施例还可以是计算机程序产品,其包括计算机程序指令,所述计算机程序指令在被处理器运行时使得所述处理器执行本说明书上述“示例性方法”部分中描述的根据本申请各种实施例的基于外存的图数据存储方法中的步骤。
所述计算机程序产品可以以一种或多种程序设计语言的任意组合来编写用于执行本申请实施例操作的程序代码,所述程序设计语言包括面向对象的程序设计语言,诸如Java、C++等,还包括常规的过程式程序设计语言,诸如“,还语言或类似的程序设计语言。程序代码可以完全地在用户计算设备上执行、部分地在用户设备上执行、作为一个独立的软件包执行、部分在用户计算设备上部分在远程计算设备上执行、或者完全在远程计算设备或服务器上执行。
此外,本申请的实施例还可以是计算机可读存储介质,其上存储有计算机程序指令,所述计算机程序指令在被处理器运行时使得所述处理器执行本说明书上述“示例性方法”部分中描述的根据本申请各种实施例的基于外存的图数据存储方法中的步骤。
所述计算机可读存储介质可以采用一个或多个可读介质的任意组合。可读介质可以是可读信号介质或者可读存储介质。可读存储介质例如可以包括但不限于电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。可读存储介质的更具体的例子(非穷举的列表)包括:具有一个或多个导线的电连接、便携式盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。
以上结合具体实施例描述了本申请的基本原理,但是,需要指出的是,在本申请中提及的优点、优势、效果等仅是示例而非限制,不能认为这些优点、优势、效果等是本申请的各个实施例必须具备的。另外,上述公开的具体细节仅是为了示例的作用和便于理解的作用,而非限制,上述细节并不限制本申请为必须采用上述具体的细节来实现。
本申请中涉及的器件、装置、设备、系统的方框图仅作为例示性的例子并且不意图要求或暗示必须按照方框图示出的方式进行连接、布置、配置。如本领域技术人员将认识到的,可以按任意方式连接、布置、配置这些器件、装置、设备、系统。诸如“包括”、“包含”、“具有”等等的词语是开放性词汇,指“包括但不限于”,且可与其互换使用。这里所使用的词汇“或”和“和”指词汇“和/或”,且可与其互换使用,除非上下文明确指示不是如此。这里所使用的词汇“诸如”指词组“诸如但不限于”,且可与其互换使用。
还需要指出的是,在本申请的装置、设备和方法中,各部件或各步骤是可以分解和/或重新组合的。这些分解和/或重新组合应视为本申请的等效方案。
提供所公开的方面的以上描述以使本领域的任何技术人员能够做出或者使用本申请。对这些方面的各种修改对于本领域技术人员而言是非常显而易见的,并且在此定义的一般原理可以应用于其他方面而不脱离本申请的范围。因此,本申请不意图被限制到在此示出的方面,而是按照与在此公开的原理和新颖的特征一致的最宽范围。
为了例示和描述的目的已经给出了以上描述。此外,此描述不意图将本申请的实施例限制到在此公开的形式。尽管以上已经讨论了多个示例方面和实施例,但是本领域技术人员将认识到其某些变型、修改、改变、添加和子组合。