用于图数据入库的方法及其装置转让专利

申请号 : CN202110963045.9

文献号 : CN113656411B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 张国庆

申请人 : 北京中经惠众科技有限公司

摘要 :

一种用于图数据入库的方法及其装置。方法包括:根据预设的顶点ID生成规则,为每个顶点数据生成唯一顶点ID;根据相对应的唯一顶点ID,将每个顶点数据录入图数据库中;对于边数据表中的每个边数据,将该边数据中的两个顶点值分别替换为相对应的唯一顶点ID;根据预设的边ID生成规则,基于该边数据中的至少一个边主键为该边数据生成唯一边ID;根据该边数据的唯一边ID以及两个唯一顶点ID,将该边数据录入图数据库中。本发明的方法设定了特定的ID生成规则,因此每个顶点数据和边数据都能够具有特定的唯一顶点ID和唯一边ID。因此,即使图数据被重复录入多次,对于同一个顶点数据或边数据,每次生成的ID都是相同的,从而在重复录入时可以实现数据覆盖。

权利要求 :

1.一种用于图数据入库的方法,其中,所述图数据包括分别具有多个顶点数据的至少一个顶点数据表和具有多个边数据的边数据表,每个所述顶点数据包括一个顶点值,每个所述边数据包括相关联的两个顶点值和至少一个边主键,所述方法包括:根据预设的顶点ID生成规则,为所述至少一个顶点数据表中的每个顶点数据生成唯一顶点ID,其中,所述唯一顶点ID包括顶点ID分区部分和顶点ID计数部分;

根据相对应的唯一顶点ID,将所述顶点数据表中的每个顶点数据录入图数据库中;

对于所述边数据表中的每个边数据,

将该边数据中的两个顶点值分别替换为相对应的唯一顶点ID;

根据预设的边ID生成规则,基于该边数据中的至少一个边主键为该边数据生成唯一边ID;以及针对所述边数据表中的每个边数据,根据该边数据的唯一边ID以及两个唯一顶点ID,将该边数据录入所述图数据库中,其中,根据预设的顶点ID生成规则,为所述至少一个顶点数据表中的每个顶点数据生成唯一顶点ID包括:对于每个顶点数据表,将该顶点数据表中的多个顶点数据分为多组,每组包含至少一个所述顶点数据;

对于每组顶点数据,并行地生成每一个顶点数据的唯一顶点ID,其中,对于该组顶点数据中的每一个顶点数据,随机分配一个互不相同的数值以作为该顶点数据的唯一顶点ID的顶点ID分区部分;

在已生成的唯一顶点ID中,确定与该顶点数据的顶点ID分区部分数值相同的上一个生成的唯一顶点ID;

获取所述上一个生成的唯一顶点ID的顶点ID计数部分的第一数值;以及将所述第一数值累加预设数值得到第二数值,以作为该顶点数据的唯一顶点ID的顶点ID计数部分。

2.根据权利要求1所述的方法,其中,所述边ID包括边ID计数部分,根据边ID生成规则,基于该边数据中的至少一个边主键为该边数据生成唯一边ID包括:对该边数据的至少一个边主键进行哈希,得到哈希值;以及

根据所述哈希值生成所述唯一边ID的边ID计数部分。

3.根据权利要求2所述的方法,其中,所述唯一顶点ID包括顶点ID分区部分,所述边ID包括还边ID分区部分,与边数据相关联的两个顶点值包括源顶点值和目标顶点值,并且根据边ID生成规则,基于该边数据中的至少一个边主键为该边数据生成唯一边ID还包括:基于该边数据的源顶点值,在所述顶点数据表中获取对应的顶点数据,该顶点数据的唯一顶点ID的顶点ID分区部分包括第三数值;以及将所述第三数值作为该边数据的唯一边ID的边ID分区部分。

4.根据权利要求1至3中任一项所述的方法,其中,针对所述边数据表中的每个边数据,根据该边数据的唯一边ID以及两个唯一顶点ID,将该边数据录入所述图数据库中之前还包括:针对每个边数据,确定与该边数据的两个顶点ID分别对应的两个顶点数据是否存在于所述图数据库中,其中,根据该边数据的唯一边ID以及两个唯一顶点ID,将该边数据录入所述图数据库中为响应于确定所述两个顶点数据均存在于所述图数据库中而执行的。

5.根据权利要求1至3中任一项所述的方法,其中,根据相对应的唯一顶点ID,将所述顶点数据表中的每个顶点数据录入图数据库中包括:使用图数据库的顶点添加接口将每个顶点数据录入所述图数据库中。

6.根据权利要求1至3中任一项所述的方法,其中,每个所述顶点数据包括多个属性,每个属性包括属性ID和属性值,根据相对应的唯一顶点ID,将所述顶点数据表中的每个顶点数据录入图数据库中包括:针对每个所述顶点数据,按照所述属性ID录入每个属性的属性值。

7.根据权利要求1至3中任一项所述的方法,其中,将所述边数据表中的每个边数据根据其边ID以及两个顶点ID录入所述图数据库中的相应存储位置包括:使用图数据库中的边添加接口将每个边数据录入所述图数据库中。

8.一种用于图数据入库的装置,其中,所述图数据包括分别具有多个顶点数据的至少一个顶点数据表和具有多个边数据的边数据表,每个所述顶点数据包括一个顶点值,每个所述边数据包括相关联的两个顶点值和至少一个边主键,所述装置包括:顶点ID生成单元,配置成根据预设的顶点ID生成规则,为所述至少一个顶点数据表中的每个顶点数据生成唯一顶点ID,其中,所述唯一顶点ID包括顶点ID分区部分和顶点ID计数部分;

顶点数据录入单元,配置成根据相对应的唯一顶点ID,将所述顶点数据表中的每个顶点数据录入图数据库中;

替换单元,配置成对于所述边数据表中的每个边数据,将该边数据中的两个顶点值分别替换为相对应的唯一顶点ID;

边ID生成单元,配置成根据预设的边ID生成规则,基于该边数据中的至少一个边主键为该边数据生成唯一边ID;和边数据录入单元,配置成针对所述边数据表中的每个边数据,根据该边数据的唯一边ID以及两个唯一顶点ID,将该边数据录入所述图数据库中,其中,所述顶点ID生成单元包括:分组模块,配置成对于每个所述顶点数据表,将该顶点数据表中的多个顶点数据分为多组,每组包含至少一个所述顶点数据,对于每组顶点数据,并行地生成每一个顶点数据的唯一顶点ID;

第一ID生成模块,配置成对于每组顶点数据,对于该组顶点数据中的每一个顶点数据,随机分配一个互不相同的数值以作为该顶点数据的唯一顶点ID的顶点ID分区部分;以及第二ID生成模块,配置成对于每组顶点数据,对于该组顶点数据中的每一个顶点数据,在随机分配一个互不相同的数值以作为该顶点数据的唯一顶点ID的顶点ID分区部分之后,在已生成的唯一顶点ID中,确定与该顶点数据的顶点ID分区部分数值相同的上一个生成的唯一顶点ID;获取所述上一个生成的唯一顶点ID的顶点ID计数部分的第一数值;以及将所述第一数值累加预设数值得到第二数值,以作为该顶点数据的唯一顶点ID的顶点ID计数部分。

9.根据权利要求8所述的装置,其中,所述唯一边ID包括边ID计数部分,并且所述边ID生成单元包括:第三ID生成模块,配置成对该边数据的至少一个边主键进行哈希,得到哈希值;以及根据所述哈希值生成所述唯一边ID的边ID计数部分。

10.根据权利要求9所述的装置,其中,所述唯一顶点ID包括顶点ID分区部分,所述边ID包括还边ID分区部分,与边数据相关联的两个顶点值包括源顶点值和目标顶点值,并且所述边ID生成单元还包括:第四ID生成模块,配置成基于该边数据的源顶点值,在所述顶点数据表中获取对应的顶点数据,该顶点数据的唯一顶点ID的顶点ID分区部分包括第三数值;以及将所述第三数值作为该边数据的唯一边ID的边ID分区部分。

11.根据权利要求8至10中任一项所述的装置,还包括:

确定单元,配置成针对每个边数据,确定与该边数据的两个顶点ID分别对应的两个顶点数据是否存在于所述图数据库中,其中所述边数据录入单元,还配置成根据该边数据的唯一边ID以及两个唯一顶点ID,将该边数据录入所述图数据库中为响应于确定所述两个顶点数据均存在于所述图数据库中而执行的。

12.根据权利要求8至10中任一项所述的装置,其中,所述顶点数据录入单元还配置成:使用图数据库的顶点添加接口将每个顶点数据录入所述图数据库中。

13.根据权利要求8至10中任一项所述的装置,其中,每个所述顶点数据包括多个属性,每个属性包括属性ID和属性值,所述顶点数据录入单元还配置成:针对每个所述顶点数据,按照所述属性ID录入每个属性的属性值。

14.根据权利要求8至10中任一项所述的装置,其中,所述边数据录入单元还配置成:使用图数据库中的边添加接口将每个边数据录入所述图数据库中。

15.一种计算机设备,包括:

存储器、处理器以及存储在所述存储器上的计算机程序,

其中,所述处理器被配置为执行所述计算机程序以实现权利要求1‑7中任一项所述方法的步骤。

16.一种非暂态计算机可读存储介质,其上存储有计算机程序,其中,所述计算机程序被处理器执行时实现权利要求1‑7中任一项所述方法的步骤。

说明书 :

用于图数据入库的方法及其装置

技术领域

[0001] 本公开涉及计算机领域,尤其涉及图数据库技术领域,具体涉及一种用于图数据入库的方法及其装置、计算机设备、计算机可读存储介质和计算机程序产品。

背景技术

[0002] 图是一种重要的数据结构,它由顶点(Vertex)数据和边(Edge)数据的集合组成,一般顶点和边可拥有若干个属性。图数据库(Graph Database)是一种NoSQL类型的数据管理系统,其主要功能是对图结构数据的存储,并对外提供图语义的查询服务。
[0003] 数据入库是指将顶点数据和边数据录入到图数据库中。一般而言,顶点数据和边数据将按照一定的顺序依次录入到图数据库中。但是,在例如硬件设备故障的情况下,可能会出现入库操作中断的问题,此时可能需要对图数据整体进行再一次的入库操作。然而,在第一次入库时,已经有部分数据录入到图数据库中,因此重复录入很有可能造成部分数据的重复。因此,目前需要一种在对图数据进行多次入库操作时,防止顶点数据或边数据重复录入的方案。
[0004] 在此部分中描述的方法不一定是之前已经设想到或采用的方法。除非另有指明,否则不应假定此部分中描述的任何方法仅因其包括在此部分中就被认为是现有技术。类似地,除非另有指明,否则此部分中提及的问题不应认为在任何现有技术中已被公认。

发明内容

[0005] 提供一种缓解、减轻或甚至消除上述问题中的一个或多个的机制将是有利的。
[0006] 本公开提供了一种图数据入库的方法,其中,图数据包括分别具有多个顶点数据的至少一个顶点数据表和具有多个边数据的边数据表,每个顶点数据包括一个顶点值,每个边数据包括相关联的两个顶点值和至少一个边主键,方法包括:根据预设的顶点ID生成规则,为至少一个顶点数据表中的每个顶点数据生成唯一顶点ID;根据相对应的唯一顶点ID,将顶点数据表中的每个顶点数据录入图数据库中;对于边数据表中的每个边数据,将该边数据中的两个顶点值分别替换为相对应的唯一顶点ID;根据预设的边ID生成规则,基于该边数据中的至少一个边主键为该边数据生成唯一边ID;以及针对边数据表中的每个边数据,根据该边数据的唯一边ID以及两个唯一顶点ID,将该边数据录入图数据库中。
[0007] 根据本公开的一方面,提供了一种用于图数据入库的装置,其中,图数据包括分别具有多个顶点数据的至少一个顶点数据表和具有多个边数据的边数据表,每个顶点数据包括一个顶点值,每个边数据包括相关联的两个顶点值和至少一个边主键,装置包括:顶点ID生成单元,配置成根据预设的顶点ID生成规则,为顶点数据表中的每个顶点数据生成唯一顶点ID;顶点数据录入单元,配置成根据相对应的唯一顶点ID,将顶点数据表中的每个顶点数据录入图数据库中;替换单元,配置成对于边数据表中的每个边数据,将该边数据中的两个顶点值分别替换为相对应的唯一顶点ID;边ID生成单元,配置成根据预设的边ID生成规则,基于该边数据中的至少一个边主键为该边数据生成唯一边ID;和边数据录入单元,配置成针对边数据表中的每个边数据,根据该边数据的唯一边ID以及两个唯一顶点ID,将该边数据录入图数据库中。
[0008] 根据本公开的另一方面,还提供了一种存储有计算机指令的非瞬时计算机可读存储介质,其中,计算机指令用于使计算机执行上述方法。
[0009] 根据本公开的另一方面,还提供了一种计算机程序产品,包括计算机程序,其中,计算机程序在被处理器执行时实现上述方法。
[0010] 根据本公开的一个或多个实施例,设定了特定的ID生成规则,生成的顶点ID与该顶点数据中的顶点值相对应,并且边ID基于该边数据中的至少一个边主键生成,因此每个顶点和边都能够具有特定的唯一顶点ID和唯一边ID。因此,即使图数据被重复录入多次,对于同一个顶点数据或边数据,每次都按照相同的ID录入,从而在重复录入时可以实现数据覆盖。
[0011] 应当理解,本部分所描述的内容并非旨在标识本公开的实施例的关键或重要特征,也不用于限制本公开的范围。本公开的其它特征将通过以下的说明书而变得容易理解。根据在下文中所描述的实施例,本公开的这些和其它方面将是清楚明白的,并且将参考在下文中所描述的实施例而被阐明。

附图说明

[0012] 附图示例性地示出了实施例并且构成说明书的一部分,与说明书的文字描述一起用于讲解实施例的示例性实施方式。所示出的实施例仅出于例示的目的,并不限制权利要求的范围。在所有附图中,相同的附图标记指代类似但不一定相同的要素。
[0013] 图1示出了根据本公开的一个实施例的HBase的数据模型的示意图;
[0014] 图2示出了根据本公开的一个实施例的JanusGraph的数据模型的示意图;
[0015] 图3示出了根据本公开的一个实施例的用于图数据入库的方法的示意图;
[0016] 图4示出了根据本公开的一个实施例的一个顶点数据表的示意图;
[0017] 图5示出了根据本公开的一个实施例的另一顶点数据表的示意图;
[0018] 图6示出了根据本公开的一个实施例的与图4和图5所示的顶点数据表相关联的边数据表的示意图;
[0019] 图7示出了将图6中的两个顶点值进行替换后的边数据表的示意图;
[0020] 图8示出了根据本公开的一个实施例的根据顶点ID生成规则生成唯一顶点ID的方法的流程图;
[0021] 图9示出了根据本公开的一个实施例的根据边ID生成规则生成唯一边ID的方法的流程图;
[0022] 图10示出了根据本公开的一个实施例的对边数据进行录入的方法的流程图;
[0023] 图11示出了根据本公开的一个实施例的用于图数据入库的装置的示意图;
[0024] 图12示出了根据本公开的另一个实施例的用于图数据入库的装置的示意图;
[0025] 图13是图示出能够应用于示例性实施例的示例性计算机设备的框图。

具体实施方式

[0026] 在本公开中,除非另有说明,否则使用术语“第一”、“第二”等来描述各种要素不意图限定这些要素的位置关系、时序关系或重要性关系,这种术语只是用于将一个元件与另一元件区分开。在一些示例中,第一要素和第二要素可以指向该要素的同一实例,而在某些情况下,基于上下文的描述,它们也可以指代不同实例。
[0027] 在本公开中对各种示例的描述中所使用的术语只是为了描述特定示例的目的,而并非旨在进行限制。除非上下文另外明确地表明,如果不特意限定要素的数量,则该要素可以是一个也可以是多个。如本文使用的,术语“多个”意指两个或更多,并且术语“基于”应解释为“至少部分地基于”。此外,术语“和/或”以及“……中的至少一个”涵盖所列出的项目中的任何一个以及全部可能的组合方式。
[0028] 在详细描述本公开实施例的方法之前,首先对存储引擎HBase以及查询引擎JanusGraph的数据结构进行简要说明。图1示出了根据本公开示例性实施例的HBase的数据模型的示意图。如图1所示,在HBase数据模型下,数据列表由行(Row)组成。每行数据由键(key)进行标识,并由若干个数据单元(cell)组成。数据单元则由列(column)和值(value)组成。数据单元由给定行中的列进行标识。
[0029] 图2示出了根据本公开示例性实施例的JanusGraph的数据模型的示意图。如图2所示,类似于HBase,JanusGraph将每条数据存储为存储后端中的一行。顶点ID(JanusGraph分配给图数据的每个顶点的ID)是用于标识行的键。图数据中的每个边和属性信息都存储为行中的单个数据单元,并允许插入和删除。因此,对目标数据的查询过程实际上就是查找符合要求的边的数据单元的过程。特定存储后端中每行允许的最大数据单元格数也是JanusGraph可以针对此后端支持的顶点的最大程度。如果存储后端支持键的排序,则数据将按顶点ID进行排序,JanusGraph可以分配顶点ID,以便有效地对图形进行分区。
[0030] 其中,需要注意的是列和值都是由多个元素拼接而成的,例如边的数据单元的列由边的标签ID、方向、排序键(sort key)等构成,value部分则由签名键(signature key)和边的其它若干属性(Properties)构成。从图6和图7中可以看出,JanusGraph的数据模型和HBase的数据模型的结构具有对应关系,在将数据写入存储层中时,JanusGraph可以将其数据单元内的列和值分别存储在相应的HBase数据单元的列和值上。
[0031] 在相关技术中,对图数据进行入库操作时,系统会为JanusGraph的每个顶点或边随机分配一个顶点ID或边ID,然后按照该顶点ID或边ID将JanusGraph中的每条数据存储到图数据库中。在入库操作期间有可能发生操作中断,导致需要对图数据进行重新录入。在重新入库时,系统会为JanusGraph的每个顶点或边再次重新随机分配一个顶点ID或边ID,然后按照新分配的顶点ID或边ID将数据存储到图数据库中。然而,新分配的ID可能和第一次分配的ID不同,导致再次入库时相同的数据可能被存储在图数据库中的不同位置处,造成数据的重复录入。
[0032] 下面结合附图详细描述本公开的示例性实施例。
[0033] 图3示出了根据本公开的一个实施例的用于图数据入库的方法300的示意图,上述图数据包括顶点数据表和边数据表两个部分。顶点数据表具有多个顶点数据,边数据表具有多个边数据,每个顶点数据包括一个顶点值,每个边数据包括相关联的两个顶点值和至少一个边主键。
[0034] 在介绍图3所示的方法300之前,先对上述顶点数据表和边数据表进行简单介绍。在一些实施例中,图数据可以包含两个顶点数据表和一个边数据表,该边数据表与前述两个顶点数据表相关联。图4示出了根据本公开的一个实施例的一个顶点数据表的示意图。图
5示出了根据本公开的一个实施例的另一顶点数据表的示意图。图6示出了根据本公开的一个实施例的与图4和图5所示的顶点数据表相关联的边数据表的示意图。图7示出了将图6中的两个顶点值进行替换后的边数据表的示意图。图4所示的顶点数据表为银行转账业务的图数据中的源顶点数据表,其包含多个转账主体的数据。如图4所示,每一个顶点数据均包括一个顶点值和多个属性,其中,顶点值可以是唯一标识该顶点数据的顶点主键,例如账户姓名,多个属性可以包括:性别、年龄等属性。图5所示的顶点数据表为银行转账业务的图数据中的目标顶点数据表,其包含多个转账客体的数据。如图5所示,每一个顶点数据均包括一个顶点值和多个属性,其中,顶点值可以是唯一标识该顶点数据的顶点主键,例如转账卡号,多个属性可以包括:卡号所属机构等属性。图6是与图4和图5所示的顶点数据表相关联的边数据表,其包括源顶点值、目标顶点值和多个属性,其源顶点值为图4的源顶点表中出现的源顶点值,其目标顶点值为图5的目标顶点表中出现的目标顶点值,其属性包括:时间、金额等。每一条边数据用于记录源顶点与目标顶点之间的交互,以图6中的第一行边数据为例,其表示“张三在2020.01.01向卡号2进行了转账操作”。
[0035] 图3所示的图数据入库的方法300包括:
[0036] 步骤301,根据预设的顶点ID生成规则,为两个顶点数据表中的每个顶点数据生成唯一顶点ID;
[0037] 步骤302,根据相对应的唯一顶点ID,将顶点数据表中的每个顶点数据录入图数据库中;
[0038] 步骤303,对于边数据表中的每个边数据,将该边数据中的两个顶点值分别替换为相对应的唯一顶点ID;
[0039] 步骤304,根据预设的边ID生成规则,基于该边数据中的至少一个边主键为该边数据生成唯一边ID;以及
[0040] 步骤305,针对边数据表中的每个边数据,根据该边数据的唯一边ID以及两个唯一顶点ID,将该边数据录入图数据库中。
[0041] 本实施例的方法设定了特定的ID生成规则,生成的顶点ID与该顶点数据中的顶点值相对应,并且边ID基于该边数据中的至少一个边主键生成,因此每个顶点和边都能够具有特定的唯一顶点ID和唯一边ID。因此,即使图数据被重复录入多次,对于同一个顶点数据或边数据,每次生成的ID都是相同的,从而在重复录入时可以实现数据覆盖。
[0042] 下面结合图4至图7详细介绍步骤301至步骤305的具体操作过程。在对源顶点表进行入库操作时,会按照顶点ID生成规则为每一个顶点数据生成唯一顶点ID。如图4所示,例如为顶点值为张三的顶点数据生成唯一顶点ID 113,为顶点值为李四的顶点数据生成唯一顶点ID 114等。上述顶点值可以是唯一标识该顶点数据的顶点主键,生成的唯一顶点ID与顶点值一一对应,因此不同的顶点值对应不同的唯一顶点ID。若入库操作出现中断,再次录入图数据时,仍然按照步骤301中生成的唯一顶点ID来标识每一个顶点数据,因此,第二次入库时的唯一顶点ID与第一次入库操作时的唯一顶点ID相同。为了简化实施例,在图4至图7所示的实施例中,唯一顶点ID示出为3位数字,但是可以理解,在另外一些实施例中,唯一顶点ID的位数可以大于3,一般而言,唯一顶点ID以及后续提及的唯一边ID都是64位long类型的整数。可以按照上述同样的方法对图5所示的目标顶点表中的每个顶点数据生成唯一顶点ID,其具体操作这里不再赘述。
[0043] 在步骤302中,根据步骤301中得到的唯一顶点ID,将顶点数据表中的每个顶点数据录入图数据库中。由于每次入库时,相同顶点数据的唯一顶点ID保持不变,因此在多次入库过程中,同一顶点数据会始终存储在图数据库中的特定位置处,因此相同的顶点数据会被覆盖。如上所述,每个顶点数据包括多个属性,每个属性包括属性ID和属性值,在将顶点数据表中的每个顶点数据录入图数据库中时,针对每个顶点数据,按照属性ID录入每个属性的属性值,这样可以保证在重复入库时,同一顶点数据中每个属性被准确覆盖。
[0044] 在步骤303中,对边数据表进行join in操作,所谓join in操作是指将每个边数据中的两个顶点值(分别是源顶点值和目标顶点值)替换为顶点数据表中的与该顶点值对应的唯一顶点ID,以将两个顶点数据表的唯一顶点ID关联起来。如图7所示,将图6中的张三替换为图4中对应的唯一顶点ID 113,将李四替换为图4中对应的唯一顶点ID 114等等;将图6中的卡号2替换为图5中对应的唯一顶点ID 222,将卡号1替换为图5中对应的唯一顶点ID 221等等。
[0045] 在步骤304中,根据预设的边ID生成规则,基于该边数据中的至少一个边主键为该边数据生成唯一边ID。边主键能够唯一标识该边数据,每个边数据的边主键均互不相同,基于边数据中的至少一个边主键生成的边ID也是唯一的。因此在步骤305中,按照唯一边ID对边数据进行录入可以防止在多次入库操作时,边数据的重复录入。若入库操作出现中断,再次录入图数据时,仍然按照步骤304中的边ID生成规则来为每一个边数据生成唯一边ID,因此,第二次入库时生成的唯一边ID与第一次入库操作时的唯一边ID相同。另外,为了防止数据错误地录入,在对边数据进行录入时,还需要同时参考其两个唯一顶点ID。而且,在意外存在两个边数据的唯一边ID相同的情况下,同时参考两个唯一顶点ID还可以进一步确保每个边数据的唯一性,因为即使两个边数据的唯一边ID相同,它们各自的唯一顶点ID也会不同,从而进一步防止数据的重复录入。
[0046] 图8示出了根据本公开一个实施方式的根据顶点ID生成规则生成唯一顶点ID的方法800的流程图。为了提高唯一顶点ID的分配速度,该方法800将顶点数据表中的多个顶点数据分为多组,每组包含至少一个顶点数据,对于每组顶点数据,并行地生成每一个顶点数据的唯一顶点ID。对于每组顶点数据,并行地生成每一个顶点数据的唯一顶点ID包括:
[0047] 步骤801,随机分配一个互不相同的数值以作为该顶点数据的唯一顶点ID的顶点ID分区部分;
[0048] 步骤802,在已生成的顶点ID中,确定与该顶点数据的顶点ID分区部分数值相同的上一个生成的顶点ID;
[0049] 步骤803,获取上一个生成的唯一顶点ID的顶点ID计数部分的第一数值;
[0050] 步骤804,将第一数值累加预设数值得到第二数值,以作为该顶点数据的唯一顶点ID的顶点ID计数部分。
[0051] 在本实施例中,唯一顶点ID具有形如[0|count|partition|000]的格式,其主要包括顶点ID首位、顶点ID计数部分(即上式中的count)、顶点ID分区部分(即上式中的partition)以及顶点类型部分(即末尾的三位数字)。partition表示虚拟分区id,它的位数N由后端HBase集群的规模而确定。每个partition都维护一个count池,每个count池的范围64‑1‑3‑N
是[0,2 ‑1]。
[0052] 在步骤801中,在按组为每个顶点数据生成唯一顶点ID时,先从[0,2N‑1]范围内随机选择一个数值作为顶点ID分区部分。例如某一组(下文称为组A)具有5个顶点数据,那么为这5个顶点数据随机分配互不相同的顶点ID分区部分(partition),则这5个顶点数据在不同的分区并行地生成唯一顶点ID。
[0053] 在步骤802和步骤803中,在对组A中的某个顶点数据(下文称为顶点数据1)分配顶点ID计数部分时,可以先确定上一个已经生成的具有相同partition值的唯一顶点ID的count值,然后对该count值进行+1操作,得到顶点数据1的唯一顶点ID的count值。换句话说,被分配相同partition值的所有唯一顶点ID,其count值按照唯一顶点ID的生成顺序依次递增地生成。虽然在上述实施例中,将上一个唯一顶点ID的count值进行+1操作得到新的count值,但是可以理解,在另外一些实施例中,还可以递增2、3等其他数值来获取新的count值。
[0054] 最终生成的顶点ID可以表示为vertexId=((Count<
[0055] 图9示出了根据本公开一个实施方式的根据边ID生成规则生成唯一边ID的方法900的流程图。在本实施例中,唯一边ID和唯一顶点ID类似,具有形如[0|count|partition]的格式,其主要包括边ID首位0、边ID计数部分(即上式中的count)以及边ID分区部分(即上式中的partition)。
[0056] 如图9所示,该方法900包括:
[0057] 步骤901,基于该边数据的源顶点值,在顶点数据表中获取对应的顶点数据,该顶点数据的唯一顶点ID的顶点ID分区部分包括第三数值;
[0058] 步骤902,将第三数值作为该边数据的唯一边ID的边ID分区部分;
[0059] 步骤903,对该边数据的至少一个边主键进行哈希,得到哈希值;
[0060] 步骤904,根据哈希值生成边ID的边ID计数部分。
[0061] 如图6所示,每个边数据均包含与该边数据相关联的源顶点值和目标顶点值。在步骤901中,可以获取源顶点值所对应的唯一顶点ID的partition值,在步骤902中,可以将该唯一顶点ID的partition值作为该边数据的唯一边ID的partition值,也就是说每个边数据的唯一边ID的partition值和与该边数据包含的源顶点的唯一顶点ID的partition值相同。以图7中的第一条数据为例,该边数据的唯一边ID 001的partition值和源顶点的唯一顶点ID 113的partition值相同。
[0062] 在步骤903和步骤904中,对边数据的至少一个边主键进行哈希,将得到的哈希值用作该边数据的唯一边ID的边ID计数部分(count值部分)。上述边主键可以是能够唯一标识该边数据的某个属性,例如转账摘要、流水号等等。哈希(Hash)是把任意长度的输入(又叫做预映射pre‑image)通过散列算法变换成固定长度的输出,该输出就是散列值。这种转换是一种压缩映射,也就是,散列值的空间通常远小于输入的空间,不同的输入可能会散列成相同的输出,所以不可能从散列值来确定唯一的输入值。简单的说就是一种将任意长度的消息压缩到某一固定长度的消息摘要的函数。在本实施例,使用哈希函数将边主键(可以是文字格式或数字格式)转换为固定位数的数值,并将该数值用于表示该边数据的唯一边ID的count值部分。可以理解,哈希的冲突概率将决定边ID的重复率。在整个图数据中,按照上述哈希的方式生成的唯一边ID,其重复的概率仅为P=(1/(V*(V‑1)))*P(hash冲突),其2
中,V为顶点数据的数量。可以看到,上述概率与几乎与V成反比,因此随着图数据的顶点增多,边ID重复的概率反而越低。
[0063] 最终生成的唯一边ID可以表示为:EdgeID=(((Long.MaxValue>>N)&EKey.hashCode)<
[0064] 在本实施例中,边主键能够唯一标识该边数据,每个边数据的边主键均互不相同,因此对边主键进行哈希生成的边ID也是唯一的。按照唯一边ID对边数据进行录入可以防止在多次入库操作时边数据的重复录入。
[0065] 可以理解上述步骤901、步骤902和步骤903、步骤904可以交换执行顺序,即,首先生成边ID计数部分,再生成边ID分区部分,这不影响本实施例的实现。
[0066] 图10示出了根据本公开的一个实施例的对边数据进行录入的方法1000的流程图,如图10所示,该方法1000基于图3所示的方法额外地添加了一个判断步骤。具体地,上述方法1000包括:
[0067] 步骤1001,根据预设的边ID生成规则,基于该边数据中的至少一个边主键为该边数据生成唯一边ID;
[0068] 步骤1002,判断与该边数据的两个顶点ID分别对应的两个顶点数据是否存在于图数据库中;
[0069] 步骤1003,若步骤1002的判断结果为是,根据该边数据的唯一边ID以及两个唯一顶点ID,将该边数据录入图数据库中;
[0070] 步骤1004,若步骤1002的判断结果为否,则不录入该边数据。
[0071] 步骤1001和方法300中的步骤304类似,这里不再赘述。在步骤1002中,在将该边数据录入到图数据库中之前,首先判断与该边数据的两个顶点ID分别对应的两个顶点数据是否已经存在于图数据库中,若是,证明该边数据是可靠的,并在步骤1003中将其录入到图数据库中。若其中一个顶点ID对应的顶点数据不存在于图数据库中,或者与两个顶点ID对应的两个顶点数据均不存在于图数据库中,那么意味着该边数据是错误数据或多余的数据,则在步骤1004中,禁止录入该边数据。以图7为示例进行举例说明,在录入第一条数据,首先检查源顶点ID 113和目标顶点ID 222是否在图5和图6所示的顶点数据表中存在(由于在录入边数据表时,相应的顶点数据表已经入库完毕,因此可以在图数据中查询是否存在这两个顶点ID),在确定源顶点ID 113对应于顶点值为张三的顶点数据且目标顶点ID 222对应于顶点值为卡号2的顶点数据时,将该边数据录入图数据库中。若这两个顶点ID至少其中一个未在图5和图6所示的顶点数据表中出现,那么禁止该边数据的录入。
[0072] 在录入顶点数据和边数据时,可以使用图数据库的接口进行操作。例如在录入顶点数据时,可以使用顶点添加接口(AddVertex接口)并直接指定按照唯一顶点ID进行数据插入,在录入边数据时,可以使用边添加接口(AddEdge接口)并直接指定按照唯一边ID进行数据插入。
[0073] 根据本公开的另一个方面,还提供了一种用于图数据入库的装置,图11示出了根据本公开一个实施例的用于图数据入库的装置1100的示意图。图数据包括分别具有多个顶点数据的至少一个顶点数据表和具有多个边数据的边数据表,每个顶点数据包括一个顶点值,每个边数据包括相关联的两个顶点值和至少一个边主键,如图11所示,装置1100包括:顶点ID生成单元1110,配置成根据预设的顶点ID生成规则,为至少一个顶点数据表中的每个顶点数据生成唯一顶点ID;顶点数据录入单元1120,配置成根据相对应的唯一顶点ID,将顶点数据表中的每个顶点数据录入图数据库中;替换单元1130,配置成对于边数据表中的每个边数据,将该边数据中的两个顶点值分别替换为相对应的唯一顶点ID;边ID生成单元
1140,配置成根据预设的边ID生成规则,基于该边数据中的至少一个边主键为该边数据生成唯一边ID;和边数据录入单元1150,配置成针对边数据表中的每个边数据,根据该边数据的唯一边ID以及两个唯一顶点ID,将该边数据录入图数据库中。
[0074] 图12示出了根据本公开另一个实施例的用于图数据入库的装置1200的示意图。如图12所示,在一些实施例中,顶点ID生成单元1210包括:分组模块1211,配置成将顶点数据表中的多个顶点数据分为多组,每组包含至少一个顶点数据;其中顶点ID生成单元1210,还配置成对于每组顶点数据,并行地生成每一个顶点数据的唯一顶点ID。
[0075] 在一些实施例中,唯一顶点ID包括顶点ID分区部分,并且,顶点ID生成单元1210还包括:第一ID生成模块1212,配置成对于该组顶点数据中的每一个顶点数据,随机分配一个互不相同的数值以作为该顶点数据的唯一顶点ID的顶点ID分区部分。
[0076] 在一些实施例中,唯一顶点ID还包括顶点ID计数部分,并且,顶点ID生成单元1210还包括:第二ID生成模块1213,配置成对于该组顶点数据中的每一个顶点数据,在随机分配一个互不相同的数值以作为该顶点数据的唯一顶点ID的顶点ID分区部分之后,在已生成的顶点ID中,确定与该顶点数据的顶点ID分区部分数值相同的上一个生成的顶点ID;获取上一个生成的唯一顶点ID的顶点ID计数部分的第一数值;以及将第一数值累加预设数值得到第二数值,以作为该顶点数据的顶点ID的顶点ID计数部分。
[0077] 在一些实施例中,唯一边ID包括边ID计数部分,并且边ID生成单元1240包括:第三ID生成模块1241,配置成对该边数据的至少一个边主键进行哈希,得到哈希值;以及根据哈希值生成唯一边ID的边ID计数部分。
[0078] 在一些实施例中,唯一顶点ID包括顶点ID分区部分,边ID包括还边ID分区部分,与边数据相关联的两个顶点值包括源顶点值和目标顶点值,并且边ID生成单元1240还包括:第四ID生成模块1242,配置成基于该边数据的源顶点值,在顶点数据表中获取对应的顶点数据,该顶点数据的唯一顶点ID的顶点ID分区部分包括第三数值;以及将第三数值作为该边数据的唯一边ID的边ID分区部分。
[0079] 在一些实施例中,上述装置1200还包括:确定单元1260,配置成针对每个边数据,确定与该边数据的两个顶点ID分别对应的两个顶点数据是否存在于图数据库中,其中边数据录入单元,还配置成根据该边数据的唯一边ID以及两个唯一顶点ID,将该边数据录入图数据库中为响应于确定两个顶点数据均存在于数据库中而执行的。
[0080] 在一些实施例中,顶点数据录入单元1220还配置成:使用图数据库的顶点添加接口将每个顶点数据录入图数据库中。
[0081] 在一些实施例中,顶点数据录入单元1220还配置成:针对每个顶点数据,按照属性ID录入每个属性的属性值。
[0082] 在一些实施例中,边数据录入单元1250还配置成:使用图数据库中的边添加接口将每个边数据录入图数据库中。
[0083] 应当理解,图11中所示装置1100的各个模块可以与参考图3描述的方法300中的各个步骤相对应,并且图12中所示装置1200的各个模块可以与参考图8至图10描述的方法800‑1000中的各个步骤相对应。由此,上面针对方法300描述的操作、特征和优点同样适用于装置1100及其包括的模块,并且上面针对方法800‑1000描述的操作、特征和优点同样适用于装置1200及其包括的模块。为了简洁起见,某些操作、特征和优点在此不再赘述。
[0084] 虽然上面参考特定模块讨论了特定功能,但是应当注意,本文讨论的各个模块的功能可以分为多个模块,和/或多个模块的至少一些功能可以组合成单个模块。本文讨论的特定模块执行动作包括该特定模块本身执行该动作,或者替换地该特定模块调用或以其他方式访问执行该动作(或结合该特定模块一起执行该动作)的另一个组件或模块。因此,执行动作的特定模块可以包括执行动作的该特定模块本身和/或该特定模块调用或以其他方式访问的、执行动作的另一模块。
[0085] 还应当理解,本文可以在软件硬件元件或程序模块的一般上下文中描述各种技术。上面关于图11和12描述的各个模块可以在硬件中或在结合软件和/或固件的硬件中实现。例如,这些模块可以被实现为计算机程序代码/指令,该计算机程序代码/指令被配置为在一个或多个处理器中执行并存储在计算机可读存储介质中。可替换地,这些模块可以被实现为硬件逻辑/电路。例如,在一些实施例中,第一ID生成模块1212、第二ID生成模块1213、第三ID生成模块1241以及第四ID生成模块1242中的一个或多个可以一起被实现在片上系统(System on Chip,SoC)中。SoC可以包括集成电路芯片(其包括处理器(例如,中央处理单元(Central Processing Unit,CPU)、微控制器、微处理器、数字信号处理器(Digital Signal Processor,DSP)等)、存储器、一个或多个通信接口、和/或其他电路中的一个或多个部件),并且可以可选地执行所接收的程序代码和/或包括嵌入式固件以执行功能。
[0086] 根据本公开的一方面,提供了一种计算机设备,其包括存储器、处理器以及存储在存储器上的计算机程序。该处理器被配置为执行计算机程序以实现上文描述的任一方法实施例的步骤。
[0087] 根据本公开的一方面,提供了一种非暂态计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现上文描述的任一方法实施例的步骤。
[0088] 根据本公开的一方面,提供了一种计算机程序产品,其包括计算机程序,该计算机程序被处理器执行时实现上文描述的任一方法实施例的步骤。
[0089] 在下文中,结合图13描述这样的计算机设备、非暂态计算机可读存储介质和计算机程序产品的说明性示例。
[0090] 图13示出了可以被用来实施本文所描述的方法的计算机设备1300的示例配置。计算机设备1300可以是各种不同类型的设备,例如服务提供商的服务器、与客户端(例如,客户端设备)相关联的设备、片上系统、和/或任何其它合适的计算机设备或计算系统。计算机设备1300的示例包括但不限于:台式计算机、服务器计算机、笔记本电脑或上网本计算机、移动设备(例如,平板电脑、蜂窝或其他无线电话(例如,智能电话)、记事本计算机、移动台)、可穿戴设备(例如,眼镜、手表)、娱乐设备(例如,娱乐器具、通信地耦合到显示设备的机顶盒、游戏机)、电视或其他显示设备、汽车计算机等等。因此,计算机设备1300的范围可以从具有大量存储器和处理器资源的全资源设备(例如,个人计算机、游戏控制台)到具有有限的存储器和/或处理资源的低资源设备(例如,传统的机顶盒、手持游戏控制台)。
[0091] 计算机设备1300可以包括能够诸如通过系统总线1314或其他适当的连接彼此通信的至少一个处理器1302、存储器1304、(多个)通信接口1306、显示设备1308、其他输入/输出(I/O)设备1310以及一个或更多大容量存储设备1312。
[0092] 处理器1302可以是单个处理单元或多个处理单元,所有处理单元可以包括单个或多个计算单元或者多个核心。处理器1302可以被实施成一个或更多微处理器、微型计算机、微控制器、数字信号处理器、中央处理单元、状态机、逻辑电路和/或基于操作指令来操纵信号的任何设备。除了其他能力之外,处理器1302可以被配置成获取并且执行存储在存储器1304、大容量存储设备1312或者其他计算机可读介质中的计算机可读指令,诸如操作系统
1316的程序代码、应用程序1318的程序代码、其他程序1320的程序代码等。
[0093] 存储器1304和大容量存储设备1312是用于存储指令的计算机可读存储介质的示例,所述指令由处理器1302执行来实施前面所描述的各种功能。举例来说,存储器1304一般可以包括易失性存储器和非易失性存储器二者(例如RAM、ROM等等)。此外,大容量存储设备1312一般可以包括硬盘驱动器、固态驱动器、可移除介质、包括外部和可移除驱动器、存储器卡、闪存、软盘、光盘(例如CD、DVD)、存储阵列、网络附属存储、存储区域网等等。存储器
1304和大容量存储设备1312在本文中都可以被统称为存储器或计算机可读存储介质,并且可以是能够把计算机可读、处理器可执行程序指令存储为计算机程序代码的非暂态介质,所述计算机程序代码可以由处理器1302作为被配置成实施在本文的示例中所描述的操作和功能的特定机器来执行。
[0094] 多个程序模块可以存储在大容量存储设备1312上。这些程序包括操作系统1316、一个或多个应用程序1318、其他程序1320和程序数据1322,并且它们可以被加载到存储器1304以供执行。这样的应用程序或程序模块的示例可以包括例如用于实现以下部件/功能的计算机程序逻辑(例如,计算机程序代码或指令):第一ID生成模块1212、第二ID生成模块
1213、第三ID生成模块1241以及第四ID生成模块1242、顶点数据录入单元1220、边数据录入单元1250、方法300和/或方法800、900、和/或本文描述的另外的实施例。
[0095] 虽然在图8中被图示成存储在计算机设备1300的存储器1304中,但是模块1316、1318、1320和1322或者其部分可以使用可由计算机设备1300访问的任何形式的计算机可读介质来实施。如本文所使用的,“计算机可读介质”至少包括两种类型的计算机可读介质,也就是计算机存储介质和通信介质。
[0096] 计算机存储介质包括通过用于存储信息的任何方法或技术实施的易失性和非易失性、可移除和不可移除介质,所述信息诸如是计算机可读指令、数据结构、程序模块或者其他数据。计算机存储介质包括而不限于RAM、ROM、EEPROM、闪存或其他存储器技术,CD‑ROM、数字通用盘(DVD)、或其他光学存储装置,磁盒、磁带、磁盘存储装置或其他磁性存储设备,或者可以被用来存储信息以供计算机设备访问的任何其他非传送介质。
[0097] 与此相对,通信介质可以在诸如载波或其他传送机制之类的已调数据信号中具体实现计算机可读指令、数据结构、程序模块或其他数据。本文所定义的计算机存储介质不包括通信介质。
[0098] 计算机设备1300还可以包括一个或更多通信接口1306,以用于诸如通过网络、直接连接等等与其他设备交换数据,正如前面所讨论的那样。这样的通信接口可以是以下各项中的一个或多个:任何类型的网络接口(例如,网络接口卡(NIC))、有线或无线(诸如IEEE 802.11无线LAN(WLAN))无线接口、全球微波接入互操作(Wi‑MAX)接口、以太网接口、通用串TM
行总线(USB)接口、蜂窝网络接口、Bluetooth 接口、近场通信(NFC)接口等。通信接口1306可以促进在多种网络和协议类型内的通信,其中包括有线网络(例如LAN、电缆等等)和无线网络(例如WLAN、蜂窝、卫星等等)、因特网等等。通信接口1306还可以提供与诸如存储阵列、网络附属存储、存储区域网等等中的外部存储装置(未示出)的通信。
[0099] 在一些示例中,可以包括诸如监视器之类的显示设备1308,以用于向用户显示信息和图像。其他I/O设备1310可以是接收来自用户的各种输入并且向用户提供各种输出的设备,并且可以包括触摸输入设备、手势输入设备、摄影机、键盘、遥控器、鼠标、打印机、音频输入/输出设备等等。
[0100] 虽然在附图和前面的描述中已经详细地说明和描述了本公开,但是这样的说明和描述应当被认为是说明性的和示意性的,而非限制性的;本公开不限于所公开的实施例。通过研究附图、公开内容和所附的权利要求书,本领域技术人员在实践所要求保护的主题时,能够理解和实现对于所公开的实施例的变型。在权利要求书中,词语“包括”不排除未列出的其他元件或步骤,并且词语“一”或“一个”不排除多个。在相互不同的从属权利要求中记载了某些措施的仅有事实并不表明这些措施的组合不能用来获益。