数据存储及查询方法、装置及数据库系统与流程

文档序号:27278363发布日期:2021-11-06 03:26阅读:74来源:国知局
数据存储及查询方法、装置及数据库系统与流程

1.本说明书实施例通常涉及数据处理领域,尤其涉及适用于图数据的数据存储方法及装置、数据查询方法及装置以及数据库系统。


背景技术:

2.图数据的应用场景越来越广泛,并且图数据的数量也越来越庞大。内存存储方式受限于内存的容量和价格,数据存储规模有限,不适用于存储海量图数据,从而需要将图数据存储在比如磁盘的数据存储介质中。现有图数据存储方案不能以具有较高数据查询效率的方式将图数据存储在数据存储介质中。


技术实现要素:

3.鉴于上述,本说明书实施例提供数据存储及查询方案。利用该数据存储及查询方案,可以以点边混合存储的方式将图数据存储到数据存储介质,并且实现高效的数据查询。
4.根据本说明书实施例的一个方面,提供一种数据存储方法,包括:确定待存储的有向图图数据中的各个起始图节点的邻居图节点数量;根据各个起始图节点的邻居图节点数量确定数据存储方式;针对各个起始图节点,在所述数据存储方式为非超大点数据存储时,将该起始图节点的节点数据、邻居信息、出边索引特征信息以及出边数据存储到第一数据存储介质的第一起始图节点数据分块,所述出边索引特征信息包括该起始图节点的所有出边的出边索引特征,每个出边索引特征与用于索引所述第一起始图节点数据分块中存储的对应出边数据的出边数据索引之间形成映射关系;以及针对各个起始图节点,在所述数据存储方式为超大点数据存储时,将该起始图节点的节点数据、邻居信息、出边索引特征范围信息以及出边数据分块索引存储到第二数据存储介质的第二起始图节点数据分块,所述出边索引特征范围信息包括与出边数据分块索引之间形成映射关系的多个出边索引特征范围,以及将该起始图节点的出边数据以及出边数据存储地址信息存储到第三数据存储介质的至少两个出边数据分块,所述出边数据存储地址信息包括二元数组<出边数据的出边索引特征,出边数据在出边数据分块中的相对存储地址>。
5.可选地,在上述方面的一个示例中,所述数据存储方式相对于所述有向图图数据中的所有起始图节点确定出,或者所述数据存储方式相对于所述有向图图数据中的各个起始图节点分别确定出。
6.可选地,在上述方面的一个示例中,所述节点数据包括起始图节点的节点标识以及节点属性,所述邻居信息包括起始图节点的节点标识以及邻居属性,所述邻居属性包括所有出边的基本信息,以及所述出边数据包括出边标识以及出边属性。
7.可选地,在上述方面的一个示例中,每个出边的基本信息包括该出边的终止图节点的节点标识以及该出边的出边索引特征,以及所述出边标识包括终止图节点的节点标识以及出边索引特征。
8.可选地,在上述方面的一个示例中,每个出边的基本信息还包括该出边的终止图
节点的节点类型和/或该出边的出边类型,以及所述出边标识还包括出边类型。
9.可选地,在上述方面的一个示例中,所述节点数据还包括节点元数据,所述节点元数据包括起始图节点的节点索引特征和/或节点类型。
10.可选地,在上述方面的一个示例中,所述索引特征包括时间戳,所述出边索引特征信息包括经过降序排序后的所有出边的出边时间戳,以及所述出边索引特征范围信息包括经过降序排序后的多个出边时间戳范围。
11.可选地,在上述方面的一个示例中,每个出边时间戳范围保存对应出边数据分块的最大出边时间戳和最小出边时间戳。
12.可选地,在上述方面的一个示例中,所述第一起始图节点数据分块和所述第二起始图节点数据分块还存储逆向邻居信息,和/或所述出边数据分块还存储出边数量。
13.可选地,在上述方面的一个示例中,针对邻居数量超过预定阈值的各个起始图节点,在所确定的数据存储方式为超大点数据存储时,将该起始图节点的节点数据、邻居信息、出边索引特征范围信息以及出边数据分块索引存储到第二数据存储介质的第二起始图节点数据分块可以包括:将该起始图节点的节点数据、邻居索引特征范围、邻居数据分块索引、出边索引特征范围信息以及出边数据分块索引存储到第二数据存储介质的第二起始图节点数据分块,以及将邻居信息分别存储到第四数据存储介质的至少两个邻居数据分块,其中,所述邻居索引特征范围包括与邻居数据分块索引之间形成映射关系的多个邻居索引特征范围。
14.可选地,在上述方面的一个示例中,所述第一数据存储介质、所述第二数据存储介质以及所述第三数据存储介质分别包括一个或多个数据存储介质,以及所述第一数据存储介质、所述第二数据存储介质以及所述第三数据存储介质中的部分数据存储介质采用同一数据存储介质实现。
15.可选地,在上述方面的一个示例中,所述非超大点数据存储和所述超大点数据存储采用键值对存储方式实现。
16.根据本说明书的实施例的另一方面,提供一种数据查询方法,包括:响应于接收到用户发起的数据查询请求,基于待查询图节点的节点标识确定该待查询图节点的数据分块索引,有向图图数据按照如上所述的方法存储在第一数据存储介质、第二数据存储介质和/或第三数据存储介质中;将所述数据分块索引所索引的起始图节点数据分块从第一数据存储介质或第二数据存储介质读取到数据查询装置的内存中并进行解析;根据解析后的起始图节点数据分块,在所述数据查询装置的本地解析数据中或者从第三数据存储介质的出边数据分块获取所述数据查询请求的查询数据;以及将所获取的查询数据提供给所述用户。
17.可选地,在上述方面的一个示例中,所述节点数据包括起始图节点的节点标识以及节点属性,所述邻居信息包括起始图节点的节点标识以及邻居属性,所述邻居属性包括所有出边的基本信息,所述出边数据包括出边标识以及出边属性。相应地,根据解析后的起始图节点数据分块,在所述数据查询装置的本地解析数据中或者从第三数据存储介质的出边数据分块获取所述数据查询请求的查询数据可以包括:响应于所述数据查询请求指示查询图节点的节点属性,获取解析出的起始图节点数据分块的节点数据中的节点属性,作为所述查询数据,响应于所述数据查询请求指示查询图节点的邻居属性,获取解析出的邻居信息中的邻居属性,作为所述查询数据,或者响应于所述数据查询请求指示查询图节点的
出边属性,从解析出的起始图节点数据分块的邻居信息中确定目标出边的出边索引特征,基于所述出边索引特征和所述出边索引特征信息确定所述目标出边的出边数据索引,以及从所述出边数据索引所索引的解析后的起始图节点数据分块的出边数据中获取所述目标出边的出边属性作为所述查询数据,或者基于所述出边索引特征和所述出边索引特征范围信息确定所述目标出边的出边数据分块索引,从所述出边数据分块索引所索引的第三数据存储介质的出边数据分块中获取所述目标出边的出边属性作为所述查询数据。
18.可选地,在上述方面的一个示例中,所述数据查询请求包括过滤条件。相应地,响应于所述数据查询请求指示查询图节点的节点属性,获取解析出的起始图节点数据分块的节点数据中的节点属性可以包括:响应于所述数据查询请求指示查询图节点的节点属性,基于所述数据查询请求中的过滤条件对解析出的起始图节点数据分块的节点数据进行查询过滤,并且获取经过查询过滤后的节点数据的节点属性。响应于所述数据查询请求指示查询图节点的邻居属性,获取解析出的邻居信息中的邻居属性可以包括:响应于所述数据查询请求指示查询图节点的邻居属性,基于所述数据查询请求中的过滤条件对解析出的邻居信息进行查询过滤,并且获取经过查询过滤后的邻居信息中的邻居属性。响应于所述数据查询请求指示查询图节点的出边属性,从解析出的起始图节点数据分块的邻居信息中确定目标出边的出边索引特征可以包括:响应于所述数据查询请求指示查询图节点的出边属性,从解析出的起始图节点数据分块的邻居信息中确定符合所述过滤条件的目标出边的出边索引特征。
19.可选地,在上述方面的一个示例中,从所述出边数据分块索引所索引的第三数据存储介质的出边数据分块中获取所述目标出边的出边属性作为所述查询数据可以包括:将所述出边数据分块索引所索引的出边数据分块从第三数据存储介质读取到所述数据查询装置的内存中;解析所读取的出边数据分块中的出边数据存储地址信息;基于所述目标出边的出边索引特征,从解析后的出边数据存储地址信息中确定所述目标出边的出边数据在所述出边数据分块中的相对存储地址;根据所述相对存储地址从所读取的出边数据分块中获取所述目标出边的出边数据并进行解析;以及获取解析后的所述目标出边的出边数据中的出边属性,作为所述查询数据。
20.可选地,在上述方面的一个示例中,所述出边索引特征包括出边时间戳。相应地,基于所述出边索引特征和所述出边索引特征信息确定所述目标出边的出边数据索引可以包括:基于所述出边时间戳,使用二分查找法在所述出边时间戳信息中查找来确定所述目标出边的出边数据索引。或者,基于所述出边索引特征和所述出边索引特征范围信息确定所述目标出边的出边数据分块索引可以包括:基于所述出边时间戳,使用二分查找法在所述出边时间戳范围信息中查找来确定所述目标出边的出边数据分块索引。
21.可选地,在上述方面的一个示例中,针对邻居数量超过预定阈值的各个起始图节点,在所述数据存储方式为超大点数据存储时,所述第二起始图节点数据分块存储起始图节点的节点数据、邻居索引特征范围、邻居数据分块索引、出边索引特征范围信息以及出边数据分块索引,以及起始图节点的邻居信息分别存储到第四数据存储介质的至少两个邻居数据分块。相应地,在获取解析出的邻居信息中的邻居属性之前,所述数据查询方法还可以包括:响应于所述数据查询请求指示查询图节点的邻居属性,基于邻居索引特征和所述邻居索引特征范围信息确定邻居数据分块索引;以及将所述邻居数据分块索引所索引的邻居
数据分块从第四数据存储介质读取到所述数据查询装置的内存并进行解析。
22.根据本说明书的实施例的另一方面,提供一种数据存储装置,包括:节点数量确定单元,确定待存储的有向图图数据中的各个起始图节点的邻居图节点数量;数据存储方式确定单元,根据各个起始图节点的邻居图节点数量确定数据存储方式;以及数据存储单元,针对各个起始图节点,在所述数据存储方式为非超大点数据存储时,将该起始图节点的节点数据、邻居信息、出边索引特征信息以及出边数据存储到第一数据存储介质的第一起始图节点数据分块,所述出边索引特征信息包括该起始图节点的所有出边的出边索引特征,每个出边索引特征与用于索引所述第一起始图节点数据分块中存储的对应出边数据的出边数据索引之间形成映射关系;以及在所述数据存储方式为超大点数据存储时,将该起始图节点的节点数据、邻居信息、出边索引特征范围信息以及出边数据分块索引存储到第二数据存储介质的第二起始图节点数据分块,所述出边索引特征范围信息包括与出边数据分块索引之间形成映射关系的多个出边索引特征范围,以及将该起始图节点的出边数据以及出边数据存储地址信息存储到第三数据存储介质的至少两个出边数据分块,所述出边数据存储地址信息包括二元数组<出边数据的出边索引特征,出边数据在出边数据分块中的相对存储地址>。
23.可选地,在上述方面的一个示例中,所述数据存储方式确定单元相对于所述有向图图数据中的所有起始图节点确定所述数据存储方式,或者相对于所述有向图图数据中的各个起始图节点确定所述数据存储方式。
24.可选地,在上述方面的一个示例中,针对邻居数量超过预定阈值的各个起始图节点,在所述数据存储方式为超大点数据存储时,所述数据存储单元将该起始图节点的节点数据、邻居索引特征范围、邻居数据分块索引、出边索引特征范围信息以及出边数据分块索引存储到第二数据存储介质的第二起始图节点数据分块,将邻居信息分别存储到第四数据存储介质的至少两个邻居数据分块,以及将该起始图节点的出边数据以及出边数据存储地址信息存储到第三数据存储介质的至少两个出边数据分块。
25.根据本说明书的实施例的另一方面,提供一种数据查询装置,包括:数据分块索引确定单元,响应于接收到用户发起的数据查询请求,基于待查询图节点的节点标识确定该待查询图节点的数据分块索引,有向图图数据按照如上所述的方法存储到第一数据存储介质、第二数据存储介质和/或第三数据存储介质中;数据读取单元,将所述数据分块索引所索引的起始图节点数据分块从第一数据存储介质或第二数据存储介质读取到数据查询装置的内存中;数据解析单元,对所读取的起始图节点数据分块进行解析;查询数据获取单元,根据解析后的起始图节点数据分块,在所述数据查询装置的本地解析数据中或者从第三数据存储介质的出边数据分块获取所述数据查询请求的查询数据;以及查询数据提供单元,将所获取的查询数据提供给所述用户。
26.可选地,在上述方面的一个示例中,所述节点数据包括起始图节点的节点标识以及节点属性,所述邻居信息包括起始图节点的节点标识以及邻居属性,所述邻居属性包括所有出边的基本信息,所述出边数据包括出边标识以及出边属性。响应于所述数据查询请求指示查询图节点的节点属性,所述查询数据获取单元获取解析出的起始图节点数据分块的节点数据中的节点属性,作为所述查询数据。响应于所述数据查询请求指示查询图节点的邻居属性,所述查询数据获取单元获取解析出的邻居信息中的邻居属性,作为所述查询
数据。响应于所述数据查询请求指示查询图节点的出边属性,所述查询数据获取单元从解析后的起始图节点数据分块的邻居信息中确定目标出边的出边索引特征,基于所述出边索引特征和所述出边索引特征信息确定所述目标出边的出边数据索引,以及从所述出边数据索引所索引的解析后的起始图节点数据分块的出边数据中获取所述目标出边的出边属性作为所述查询数据,或者基于所述出边索引特征和所述出边索引特征范围信息确定所述目标出边的出边数据分块索引,以及从所述出边数据分块索引所索引的第三数据存储介质的出边数据分块中获取所述目标出边的出边属性作为所述查询数据。
27.可选地,在上述方面的一个示例中,所述数据查询请求包括过滤条件。响应于所述数据查询请求指示查询图节点的节点属性,所述查询数据获取单元进一步基于所述数据查询请求中的过滤条件对解析出的起始图节点数据分块的节点数据进行查询过滤。响应于所述数据查询请求指示查询图节点的节点属性,所述查询数据获取单元基于所述数据查询请求中的过滤条件对解析出的邻居信息进行查询过滤。响应于所述数据查询请求指示查询图节点的出边属性,所述查询数据获取单元进一步从解析后的起始图节点数据分块的邻居信息中确定符合所述过滤条件的目标出边的出边索引特征。
28.可选地,在上述方面的一个示例中,所述数据读取单元将所述出边数据分块索引所索引的出边数据分块从第三数据存储介质读取到所述数据查询装置的内存中。所述数据解析单元解析所述出边数据分块中的出边数据存储地址信息;基于所述目标出边的出边索引特征。所述数据查询单元被配置为:从解析后的出边数据存储地址信息中确定所述目标出边在所述出边数据分块中的相对存储地址;根据所述相对存储地址从所读取的出边数据分块中获取所述目标出边的出边数据并进行解析;以及获取解析后的所述目标出边的出边数据中的出边属性,作为所述查询数据。
29.可选地,在上述方面的一个示例中,针对邻居数量超过预定阈值的各个起始图节点,在所述数据存储方式为超大点数据存储时,所述第二起始图节点数据分块存储起始图节点的节点数据、邻居索引特征范围、邻居数据分块索引、出边索引特征范围信息以及出边数据分块索引,以及邻居信息分别存储到第四数据存储介质的至少两个邻居数据分块。响应于所述数据查询请求指示查询图节点的邻居属性,所述查询数据获取单元基于邻居索引特征和所述邻居索引特征范围信息确定邻居数据分块索引,以及所述数据读取单元将所述邻居数据分块索引所索引的邻居数据分块从第四数据存储介质读取到所述数据查询装置的内存。所述数据解析单元进一步解析所读取的邻居数据分块。
30.根据本说明书的实施例的另一方面,提供一种数据库系统,包括:如上所述的数据存储装置;如上所述的数据查询装置;以及至少一个数据存储介质,包括第一数据存储介质、第二数据存储介质和/或第三数据存储介质。
31.根据本说明书的实施例的另一方面,提供一种数据存储装置,包括:至少一个处理器,与所述至少一个处理器耦合的存储器,以及存储在所述存储器中的计算机程序,所述至少一个处理器执行所述计算机程序来实现如上所述的数据存储方法。
32.根据本说明书的实施例的另一方面,提供一种数据查询装置,包括:至少一个处理器,与所述至少一个处理器耦合的存储器,以及存储在所述存储器中的计算机程序,所述至少一个处理器执行所述计算机程序来实现如上所述的数据查询方法。
33.根据本说明书的实施例的另一方面,提供一种计算机可读存储介质,其存储有可
执行指令,所述指令当被执行时使得处理器执行如上所述的数据存储方法或者执行如上所述的数据查询方法。
34.根据本说明书的实施例的另一方面,提供一种计算机程序产品,包括计算机程序,所述计算机程序被处理器执行来实现如上所述的数据存储方法或者执行如上所述的数据查询方法。
附图说明
35.通过参照下面的附图,可以实现对于本说明书内容的本质和优点的进一步理解。在附图中,类似组件或特征可以具有相同的附图标记。
36.图1示出了根据本说明书的实施例的数据库系统的示例示意图。
37.图2示出了根据本说明书的实施例的数据存储方法的示例流程图。
38.图3示出了有向图图数据的示例示意图。
39.图4示出了根据本说明书的实施例的非超大点数据存储过程的示例示意图。
40.图5示出了根据本说明书的实施例的第一起始图节点数据分块的示例示意图。
41.图6示出了根据本说明书的实施例的超大点数据存储过程的示例流程图。
42.图7示出了根据本说明书的实施例的超大点数据存储过程的另一示例流程图。
43.图8示出了根据本说明书的实施例的数据查询方法的示例流程图。
44.图9示出了根据本说明书的实施例的查询数据获取过程的示例流程图。
45.图10示出了根据本说明书的实施例的用于从第四数据存储介质的邻居数据分块中获取邻居属性的方法的示例流程图。
46.图11示出了根据本说明书的实施例的用于从第三数据存储介质的出边数据分块中获取出边属性的方法的示例流程图。
47.图12示出了根据本说明书的实施例的数据存储装置的示例方框图。
48.图13示出了根据本说明书的实施例的数据查询装置的示例方框图。
49.图14示出了根据本说明书的实施例的基于计算机系统实现的数据存储装置的示例示意图。
50.图15示出了根据本说明书的实施例的基于计算机系统实现的数据查询装置的示例示意图。
具体实施方式
51.现在将参考示例实施方式讨论本文描述的主题。应该理解,讨论这些实施方式只是为了使得本领域技术人员能够更好地理解从而实现本文描述的主题,并非是对权利要求书中所阐述的保护范围、适用性或者示例的限制。可以在不脱离本说明书内容的保护范围的情况下,对所讨论的元素的功能和排列进行改变。各个示例可以根据需要,省略、替代或者添加各种过程或组件。例如,所描述的方法可以按照与所描述的顺序不同的顺序来执行,以及各个步骤可以被添加、省略或者组合。另外,相对一些示例所描述的特征在其它例子中也可以进行组合。
52.如本文中使用的,术语“包括”及其变型表示开放的术语,含义是“包括但不限于”。术语“基于”表示“至少部分地基于”。术语“一个实施例”和“一实施例”表示“至少一个实施
例”。术语“另一个实施例”表示“至少一个其他实施例”。术语“第一”、“第二”等可以指代不同的或相同的对象。下面可以包括其他的定义,无论是明确的还是隐含的。除非上下文中明确地指明,否则一个术语的定义在整个说明书中是一致的。
53.图数据包括图节点数据和边数据。图节点数据例如可以包括图节点的节点标识(节点id)和节点属性,以及边数据可以包括边属性数据。图节点的节点标识用于唯一标识节点。节点标识、节点属性数据和边属性数据可以与业务相关。比如,对于社交网络场景,节点标识可以是人的身份证号码或者人员编号等。节点属性数据可以包括年龄、学历、住址、职业等。边属性数据可以包括节点与节点之间的关系,即,人与人之间的关系,比如,同学/同事关系等。在海量图数据的情况下,存在海量图节点数据和边数据,并且图节点数据和边数据之间存在复杂的关联关系。数据存储介质中的图数据存储方式会大大影响图数据查询效率。
54.在一些图数据存储方案中,对边数据进行单独存储。按照这种图数据存储方案,某个起始点的多个出边数据可能会存储在不同的数据分块(边表)中。在进行边信息查询(例如,查询出边属性)时,可能会需要进行多次io查询(io读取)。这里,io查询是指通过数据查询装置的操作系统的io接口来与数据存储介质(例如,磁盘)进行数据交互,由此将io查询结果(io查询数据)从数据存储介质读取到数据查询装置的内存中。io查询可能会成为数据查询装置的系统瓶颈,从而延长数据查询延时,由此导致图数据查询效率不佳。此外,在这种图数据存储方案中,在图节点的邻居数量非常大的情况下,查询该图节点的指定时间戳的出边信息时,需要遍历该图节点的所有出边,从而导致需要进行较多不必要的数据查询及数据解析,由此导致数据查询效率较低。
55.在一些图数据存储方案中,将图节点的节点数据、边数据以及邻居信息存储成具有不同数据结构的点表、边表和邻居表,并且分别部署在独立的点表服务端、边表服务端和邻居表服务端中。由于不同服务端上的存储数据异构,从而使得在图拓扑结构更新频繁的情况下,邻居表的更新会成为数据库系统的系统瓶颈。
56.下面将参照附图描述根据本说明书的实施例的数据库系统、数据存储方法、数据存储装置、数据查询方法及数据查询装置。
57.图1示出了根据本说明书的实施例的数据库系统100的示例示意图。数据库系统100也可以称为数据库应用的服务端,用于提供数据存储服务和数据查询服务。
58.如图1所示,数据库系统100包括数据存储装置110、数据查询装置120和至少一个数据存储介质130。在图1的示例中,至少一个数据存储介质130包括第一数据存储介质130

1、第二数据存储介质130

2和/或第三数据存储介质130

3。要说明的是,第一数据存储介质130

1、第二数据存储介质130

2和第三数据存储介质130

3虽然例示为一个数据存储介质,但是在其它实施例中,第一数据存储介质130

1、第二数据存储介质130

2和第三数据存储介质130

3中的每种数据存储介质可以具有多个数据存储介质。
59.数据存储装置110被配置为将待存储数据存储到数据库系统100的数据存储介质130中。数据查询装置120被配置为响应于数据查询请求,从数据存储介质130中获取目标数据(查询数据)。
60.数据存储介质130也可以称为外部存储器。在数据查询装置120进行数据查询时,需要通过向数据存储介质130发起例如io查询的数据读取操作来将数据存储介质130中的
数据读取到数据查询装置120的内存中,并且在内存中进行数据查询处理得到查询数据。数据存储介质130例如可以是各种非易失性存储介质,比如,磁盘设备、存储卡等。磁盘是指利用磁记录技术存储数据的存储器。磁盘的示例例如可以包括各种形式的(soft disk)软盘和硬盘(hard disk)。
61.图2示出了根据本说明书的实施例的数据存储方法200的示例流程图。
62.如图2所示,在210,确定待存储的有向图图数据中的各个起始图节点的邻居图节点数量。术语“有向图”是指图节点之间的边关系具有方向性的图数据。在本说明书中,术语“邻居图节点”是指沿着边的方向一跳可以到达的图节点。图3示出了有向图图数据的示例示意图。在图3的示例中,示出了6个图节点a、b、c、d、e和f。图节点b、c和d是图节点a的邻居节点,图节点f是图节点c的邻居节点。图节点e不是图节点a的邻居节点,但图节点e是图节点a的逆向邻居节点。
63.在如上确定出各个起始图节点的邻居图节点数量后,在220,根据各个起始图节点的邻居图节点数量确定数据存储方式。
64.在一个示例中,可以相对于有向图图数据中的所有起始图节点确定该有向图图数据的数据存储方式。在该示例中,有向图图数据中的所有图节点的数据存储方式都相同。在这种方式下,在确定出有向图图数据的所有起始图节点的邻居图节点的节点数量后,将邻居图节点的节点数量的最大值与第一阈值进行比较。如果该最大值大于第一阈值,则将数据存储方式确定为超大点数据存储。如果该最大值不大于第一阈值,则将数据存储方式确定为非超大点数据存储。这里,第一阈值可以基于所使用的数据存储介质的存储容量设定,或者可以根据应用场景或者经验设置。
65.在另一示例中,可以相对于有向图图数据中的各个起始图节点分别确定各个起始图节点的数据存储方式。在该示例中,有向图图数据中的各个图节点的数据存储方式基于各自的邻居节点数量确定,从而各个起始图节点的数据存储方式可能相同,也可能不同。在这种方式下,在确定出一个起始图节点的邻居节点数量后,可以基于该起始图节点的邻居节点数量确定该起始图节点的数据存储方式,并且随后执行后续数据存储操作,而无需等待其它起始图节点的邻居节点数量确定和数据存储方式确定。
66.在如上完成起始图节点的数据存储方式确定后,按照所确定的数据存储方式完成对应起始图节点的图数据存储。
67.具体地,在230,针对各个起始图节点,在所确定的数据存储方式为非超大点数据存储时,将该起始图节点的节点数据、邻居信息、出边索引特征信息以及出边数据存储到第一数据存储介质130

1的第一起始图节点数据分块中。在本说明书中,术语“索引特征”可以指代有助于在图数据存储和/或图数据查询时生成或确定索引信息的特定图数据特征。例如,在数据存储时,可以在每个出边的出边索引特征与用于索引数据分块中所存储的对应出边数据的出边数据索引之间形成映射关系。在一个示例中,可以将每个出边的出边索引特征存储在出边索引特征信息中,并且按照每个出边的出边索引特征在出边索引特征信息中的存储顺序(或存储位置)来将对应的出边数据依序存储在数据分块中,由此使得出边索引特征信息中的每个存储位置可以用作对应出边数据的出边数据索引,并且在出边索引特征与边索引特征信息中的存储位置(即,出边数据索引)之间形成映射关系。在数据查询时,可以基于数据索引特征得到对应的数据索引,由此实现数据查询。数据的索引特征的示例
例如可以包括时间戳、数据的特定属性等。这里,数据的特定属性可以包括有助于确定数据存储索引的特定属性。例如,在数据属性包括“收款人的年龄”的情况下,在进行数据存储时,可以按照收款人的年龄顺序存储,由此可以基于属性“收款人的年龄”生成数据存储位置的索引,从而属性“收款人的年龄”可以充当索引特征。所述出边索引特征信息包括该起始图节点的所有出边的出边索引特征,并且每个出边索引特征与用于索引第一起始图节点数据分块中存储的对应出边数据的出边数据索引之间形成映射关系。例如,每个出边数据的出边索引特征可以与出边索引特征在出边索引特征信息中的存储顺序建议映射关系,出边索引特征信息中的存储顺序可以用于索引第一起始图节点数据分块中的对应出边数据。比如,假设存在4个出边数据a1、a2、a3和a4,以及出边数据a1、a2、a3和a4的出边索引特征的特征值分别为f1、f2、f3和f4。在进行数据存储时,可以将特征值f1、f2、f3和f4保存在出边索引特征信息中。如果出边索引特征信息中的特征值的存储顺序为f1、f3、f2和f4,则出边数据a1、a2、a3和a4在数据分块中的存储顺序为a1、a3、a2和a4。
68.在一个示例中,每个第一数据存储介质可以存储一个第一起始图节点数据分块。在另一示例中,第一数据存储介质也可以存储多于一个第一起始图节点数据分块。
69.图4示出了根据本说明书的实施例的非超大点数据存储过程的示例示意图。如图4所示,有向图图数据中存在n个起始图节点,每个起始图节点的节点数据、邻居信息、出边索引特征信息以及出边数据被独立地存储在一个第一起始图节点数据分块中。
70.图5示出了根据本说明书的实施例的第一起始图节点数据分块的示例示意图。
71.如图5所示,第一起始图节点数据分块可以存储起始图节点的节点数据、邻居信息、出边索引特征信息1~n以及出边数据1~n。例如,第一起始图节点数据分块可以形成为具有多个字段的第一数据结构,该第一数据结构中的各个字段分别用于存储起始图节点的节点数据、邻居信息、出边索引特征信息1~n以及出边数据1~n。此外,可选地,第一起始图节点数据分块中还可以存储有逆向邻居信息。逆向邻居信息所具有的内容可以与邻居信息相同。
72.起始图节点的节点数据可以包括起始图节点的节点标识(节点id)、节点属性以及节点元数据。起始图节点的节点属性可以包括一个或多个节点属性。每个节点属性可以包括属性名和属性值。节点的属性名例如可以包括“年龄”、“身高”、“职业”等。属性值是指属性名的对应取值。可选地,属性名可以用于建立索引,从而在数据查询时支持条件过滤。起始图节点的节点元数据可以包括该起始图节点的索引特征,例如,节点时间戳。可选地,在一个示例中,起始图节点的节点元数据还可以包括节点类型。节点类型例如可以是实现节点分类的特征信息,例如,“人”、“公司”、“设备”等。在图5的示例中,节点元数据包括时间戳和节点类型。此外,可选地,在其它实施例中,节点数据也可以不包括节点元数据。
73.邻居信息可以包括起始图节点的节点标识以及邻居属性。邻居属性包括起始图节点的所有出边的基本信息。每个出边的基本信息可以包括该出边的终止图节点的节点标识(终点id)以及该出边的出边索引特征。可选地,在一个示例中,每个出边的基本信息可以按照每个出边的出边索引特征在出边索引特征信息中的对应存储顺序依序存储在邻居信息中。在图5的示例中,出边索引特征为出边时间戳。此外,可选地,起始图节点的邻居信息还可以包括终止图节点的终点类型和出边类型。
74.在一些实施例中,出边索引特征信息可以包括起始图节点的所有出边的经过排序
后的出边索引特征。出边数据在起始图节点数据分块中的存储顺序与其出边索引特征在出边索引特征信息中的存储顺序相同。在一个示例中,用于存储出边索引特征信息的存储位置(例如,字段)可以包括多个出边索引特征存储位置,每个出边索引特征存储位置用于存储一个出边索引特征,并且每个出边索引特征的存储位置可以索引后续的一个对应出边数据,即,该存储位置充当出边数据的数据索引。如图5所示,出边索引特征信息包括n个用于存储出边索引特征的存储位置,其中,第k个存储位置对应后续第k个出边数据,,并且k为正整数。例如,在数据索引特征是时间戳的情况下,可以将所有出边的出边时间戳按照降序排序保存在出边时间戳信息中。然后,在存储出边数据时,可以将各个出边数据按照其时间戳在出边时间戳信息中的保存顺序依序存储。
75.出边数据可以包括出边标识以及出边属性。出边标识可以包括终止图节点的节点标识(终点id)以及出边索引特征。此外,可选地,出边标识还可以包括出边类型。出边类型例如可以是实现边分类的特征信息。例如,在该出边指示账户转账时,出边类型可以为“转账”。在该出边指示支付时,出边类型可以为“支付”。出边属性可以包括一个或多个出边属性。每个出边属性可以包括属性名和属性值。出边属性的属性名例如可以包括“金额”、“货币”、“操作设备”等。属性值是指属性名的对应取值。
76.回到图2,在240,针对各个起始图节点,在所确定的数据存储方式为超大点数据存储时,将该起始图节点的节点数据、邻居信息、出边索引特征范围信息以及出边数据分块索引存储到第二数据存储介质的第二起始图节点数据分块中。例如,第二起始图节点数据分块可以形成为具有多个字段的第二数据结构,该第二数据结构中的各个字段分别用于存储起始图节点的节点数据、邻居信息、出边索引特征范围信息以及出边数据分块索引。出边索引特征范围可以包括与出边数据分块索引之间形成映射关系的多个出边索引特征范围,从而使得每个出边索引特征范围信息可以用于索引一个出边数据分块索引。例如,每个出边索引特征范围信息的存储顺序可以对应一个出边数据分块索引。可选地,每个出边索引特征范围中可以存储对应出边数据分块中的最大出边索引特征值和最小出边索引特征值。此外,将该起始图节点的出边数据以及出边数据存储地址信息存储在第三数据存储介质的至少两个出边数据分块中,所述出边数据存储地址信息包括二元数组<出边数据的出边索引特征,出边数据在出边数据分块中的相对存储地址>。换言之,每个出边数据分块可以形成为具有多个字段的第三数据结构,该第三数据结构中的各个字段分别用于存储至少两个出边数据以及对应的出边数据存储地址信息,如图6所示。这里,出边数据在出边数据分块中的相对存储地址可以是相对于该出边数据分块的首地址的偏移量。要说明的是,在出边数据分块中,出边数据存储在出边数据存储地址信息之前。此外,可选地,出边数据分块还可以存储出边数量。在这种情况下,出边数量存储在出边数据分块的头部,即,存储在所有出边数据之前。
77.图6示出了根据本说明书的实施例的超大点数据存储过程的示例流程图。图6中的起始图节点的节点数据、邻居信息以及出边数据的定义及其存储内容与图5中的节点数据、邻居信息以及出边数据完全相同,在此不再描述。
78.在出边索引特征为时间戳的情况下,出边索引特征范围信息包括经过排序后的多个出边时间戳范围,每个出边时间戳范围保存对应出边数据分块的最大出边时间戳和最小
出边时间戳。出边数据分块索引用于保存出边数据分块的索引信息。例如,出边数据分块索引可以用于保存出边数据分块在第三数据存储介质中的起始存储地址(即,存储首地址)。
79.可选地,针对邻居数量超过预定阈值的各个起始图节点,如果所确定的数据存储方式为超大点数据存储,则在针对该类起始图节点进行图数据存储时,将该起始图节点的节点数据、邻居索引特征范围、邻居数据分块索引、出边索引特征范围信息以及出边数据分块索引存储到第二数据存储介质的第二起始图节点数据分块中,将邻居信息分别存储到第四数据存储介质的至少两个邻居数据分块中,以及将该起始图节点的出边数据以及出边数据存储地址信息存储到第三数据存储介质的至少两个出边数据分块中。同样,邻居索引特征范围包括与邻居数据分块索引形成映射关系的多个邻居索引特征范围,从而使得每个邻居索引特征范围可以索引一个邻居数据分块索引。例如,可以使得每个邻居索引特征范围信息的存储顺序对应一个邻居数据分块索引,由此使得存储在该存储顺序上的邻居索引特征范围可以映射到该存储顺序所对应的邻居数据分块索引。在一个示例中,每个邻居索引特征范围用于存储对应邻居数据分块的最大索引特征值和最小索引特征值。邻居数据分块索引用于保存邻居数据分块的索引信息。例如,邻居数据分块索引可以用于保存邻居数据分块在第四数据存储介质中的起始存储地址(即,存储首地址)。图7示出了根据本说明书的实施例的超大点数据存储过程的另一示例流程图。
80.要说明的是,在一个示例中,在将起始图节点的图数据存储到第一起始图节点数据分块或第二起始图节点数据分块后,可以基于该起始图节点的节点标识生成第一起始图节点数据分块或第二起始图节点数据分块的数据分块索引。例如,通过计算该起始图节点的节点标识的完美哈希值,对该完美哈希值按照起始图节点的节点数量取模,并将经过取模处理后得到的数值作为第一起始图节点数据分块或第二起始图节点数据分块的数据分块索引。
81.要说明的是,在一些实施例中,第一数据存储介质、第二数据存储介质、第三数据存储介质和/或第四数据存储介质中的部分数据存储介质可以采用同一数据存储介质实现。此外,在一些实施例中,非超大点数据存储和超大点数据存储可以采用键值对存储方式实现。键值对存储的示例例如可以包括但不限于:基于完美哈希技术实现的键值对存储、基于leveldb的键值对存储、基于rocksdb的键值对存储以及基于redis的键值对存储。
82.如上参照附图描述了根据本说明书的实施例的数据存储过程。在按照上述数据存储方法将数据存储到数据库系统中后,可以响应于用户发起的数据查询请求来进行数据查询。
83.图8示出了根据本说明书的实施例的数据查询过程800的示例流程图。
84.如图8所示,在810,响应于接收到用户发起的数据查询请求,基于待查询图节点的节点标识确定待查询图节点的数据分块索引。所述数据分块索引用于索引数据存储介质中存储的对应起始图节点数据分块。例如,可以通过计算待查询图节点的节点标识的完美哈希值并对该完美哈希值按照起始图节点的节点数量取模,确定待查询图节点的数据分块索引。
85.在820,将数据分块索引所索引的起始图节点数据分块从第一数据存储介质或第二数据存储介质读取到数据查询装置的内存中并进行解析。
86.在830,根据解析后的起始图节点数据分块,在数据查询装置的本地解析数据中或
者从第三数据存储介质的出边数据分块获取数据查询请求的查询数据。查询数据获取过程将在下面参照附图详细描述。
87.在840,将所获取的查询数据提供给用户。
88.图9示出了根据本说明书的实施例的查询数据获取过程900的示例流程图。在图9的示例中,节点数据包括起始图节点的节点标识、节点属性以及节点元数据。节点元数据包括该起始图节点的节点索引特征。邻居信息包括起始图节点的节点标识以及邻居属性。邻居属性包括所有出边的基本信息,每个出边的基本信息包括该出边的结束图节点的节点标识以及该出边的出边索引特征。出边数据包括出边标识以及出边属性。所述出边标识包括结束图节点的节点标识以及出边索引特征。此外,可选地,节点元数据还可以包括节点类型。
89.如图9所示,在910,接收数据查询请求。在920,响应于数据查询请求指示查询图节点的节点属性,基于数据查询请求中的过滤条件对解析出的节点数据进行查询过滤。例如,假设数据查询请求中的过滤条件为索引特征(例如,时间戳),则可以基于解析出的节点数据的节点元数据中的节点索引特征进行查询过滤。此外,可选地,在数据查询请求中还包括节点类型的情况下,则可以基于解析出的节点数据的节点元数据中的索引特征和节点类型来进行查询过滤。在其它示例中,数据查询请求也可以包括其它过滤条件。在930,获取经过查询过滤后的节点数据的节点属性作为查询数据。可选地,在另一示例中,数据查询请求也可以不包括过滤条件,由此在获取节点属性时可以不进行查询过滤,从而获取解析出的节点数据中的所有节点属性作为查询数据。
90.在940,响应于数据查询请求指示查询图节点的邻居属性,基于数据查询请求中的过滤条件对解析出的邻居信息进行查询过滤。邻居信息的查询过滤可以采用与节点数据过滤类似的查询过滤方式。在邻居属性包括终点标识、终点类型、出边类型和出边索引特征的情况下,可以利用终点标识、终点类型、出边类型和出边索引特征进行查询过滤。在其它示例中,数据查询请求也可以包括其它过滤条件。在950,获取经过查询过滤后的邻居属性作为查询数据。可选地,在另一示例中,数据查询请求也可以不包括过滤条件,由此在获取邻居属性时可以不进行查询过滤,从而获取解析出的邻居信息中的所有邻居属性作为查询数据。
91.在一个示例中,针对邻居数量超过预定阈值的各个起始图节点,在所确定的数据存储方式为超大点数据存储时,第二起始图节点数据分块存储起始图节点的节点数据、邻居索引特征范围、邻居数据分块索引、出边索引特征范围信息以及出边数据分块索引,以及起始图节点的邻居信息分别存储在第四数据存储介质的至少两个邻居数据分块中。
92.图10示出了根据本说明书的实施例的用于从第四数据存储介质的邻居数据分块中获取邻居属性的方法1000的示例流程图。
93.如图10所示,在1010,响应于数据查询请求指示查询图节点的邻居属性,基于邻居索引特征在邻居索引特征范围信息中确定出邻居数据分块索引。
94.在1020,将邻居数据分块索引所索引的邻居数据分块从第四数据存储介质读取到数据查询装置的内存并进行解析。
95.在1030,基于数据查询请求中的过滤条件,对解析出的邻居数据分块中的邻居信息进行查询过滤。
96.在1040,获取经过查询过滤后的邻居属性作为查询数据。
97.同样,在图10的示例中,数据查询请求也可以不包括过滤条件,从而可以将解析出的邻居数据分块中的所有邻居属性作为查询数据。
98.回到图9,在960,响应于数据查询请求指示查询图节点的出边属性,从解析后的起始图节点数据分块中确定符合数据查询请求中的过滤条件的目标出边的出边索引特征。例如,在可以基于解析后的起始图节点数据分块中的邻居信息进行查询过滤,找到符合过滤条件的终点标识(id)。上述查询过滤过程可以采用与上面参照邻居属性查询相同的查询过滤过程。然后,提取出所找出的终点id所对应的出边索引特征。可选地,在另一示例中,在数据查询请求不包括过滤条件的情况下,也可以不执行查询过滤。
99.在970,基于出边索引特征以及出边索引特征信息确定目标出边的出边数据索引,或者基于出边索引特征和出边索引特征范围信息确定目标出边的出边数据分块索引。在索引特征为时间戳的情况下,可以基于出边时间戳,使用二分查找法来在出边时间戳信息中确定目标出边的出边数据索引,或者在出边时间戳范围信息中确定目标出边的出边数据分块索引。
100.在980,响应于确定出目标出边的出边数据索引,从出边数据索引所索引的经过解析后的起始图节点数据分块的出边数据中获取目标出边的出边属性,作为查询数据。
101.在990,响应于确定出目标出边的出边数据分块索引,从出边数据分块索引所索引的第三数据存储介质的出边数据分块中获取目标出边的出边属性,作为查询数据。
102.图11示出了根据本说明书的实施例的用于从第三数据存储介质的出边数据分块中获取出边属性的方法1100的示例流程图。
103.如图11所示,在1110,将出边数据分块索引所索引的出边数据分块从第三数据存储介质读取到数据查询装置的内存中。
104.在1120,解析所读取的出边数据分块中的出边数据存储地址信息。在本说明书的实施例中,出边数据存储地址信息通常存储在出边数据分块的结束位置处,即,存储在出边数据分块之后。在进行出边数据分块解析时,可以自结束位置处向开始位置进行数据解析,从而可以首先解析得到出边数据分块中的出边存储地址信息。此外,出边数据分块还可以存储出边数量。基于出边数量,可以很容易地从出边数据分块中提取出出边数据存储地址信息。
105.在1130,基于目标出边的出边索引特征,从解析后的出边数据存储地址信息中确定目标出边在出边数据分块中的相对存储地址。
106.在1140,根据所确定的相对存储地址,从所读取的出边数据分块中获取所述目标出边的出边数据并进行解析。
107.在1150,获取解析出的目标出边的出边数据中的出边属性,作为查询数据。
108.按照上述查询数据获取方式,通过先解析得到出边数据分块中的出边数据存储地址信息(即,部分解析),并且基于目标出边的出边索引特征确定出目标出边在出边数据分块中的相对存储地址,从而可以从出边数据分块中仅仅获取目标出边的出边数据来进一步解析,而无需获取并解析其余出边数据,由此大大降低数据查询过程的数据处理量,进而提升数据查询效率。
109.要说明的是,在一个示例中,邻居信息的邻居属性包括出边索引特征和出边类型,
以及出边标识包括出边索引特征、终点标识和出边类型。在这种情况下,在找到终点标识并提取出对应的出边索引特征后,基于出边索引特征确定出边数据索引或者出边数据分块索引。在查询到出边数据索引或者出边数据分块索引所索引的目标出边的出边数据后,需要基于上述邻居属性处理(即,终点id查找处理)中得到的边索引特征、终点标识和出边类型,对该目标出边的各条数据进行匹配。如果存在匹配的出边数据,则获取该匹配的出边数据的出边属性作为查询数据。在非超大点数据存储的情况下,由于起始图节点数据分块被一次性解析出,从而可以直接获取本地解析出的匹配出边数据的出边属性作为查询数据。在超大点数据存储的情况下,如果存在匹配的出边数据,则从出边数据分块中读取该匹配的出边数据并进行解析,然后,获取解析后的出边数据的出边属性作为查询数据。对于不匹配的出边数据,则不进行出边属性获取。按照上述处理方式,在获取到目标出边的出边数据后,通过利用边索引特征、终点标识和出边类型对需要获取的出边数据再次进行匹配处理,并且对匹配数据进行解析得到查询数据,可以使得所获取的出边数据更加准确,并且进一步降低解析处理的数据量,从而进一步提升图数据查询效率。
110.利用上述数据存储及查询方案,在图节点的邻居节点规模不大时,通过将该图节点的节点数据、邻居信息、出边索引特征信息和出边数据存储在同一数据分块中,使得可以通过针对数据存储介质的一次io读取操作实现数据查询。此外,在图节点的邻居节点规模较大时,通过将该起始图节点的节点数据、邻居信息、出边索引特征范围信息以及出边数据分块索引存储到第二数据存储介质的第二起始图节点数据分块,以及将该起始图节点的出边数据以及出边数据存储地址信息分别存储到第三数据存储介质的至少两个出边数据分块,可以通过针对数据存储介质的两次io读取操作实现数据查询。按照上述处理方案,可以大大降低图数据查询时的io读取操作次数,由此降低图数据查询时间,进而提升图数据查询效率。
111.此外,利用上述数据存储及查询方案,按照点边混合存储的方式进行存储,使得整个图数据存储过程只需要支持一种数据存储结构,从而使得各个存储服务端的存储结构相同,由此使得各个存储服务端的数据更新压力均衡。
112.此外,利用上述数据存储及查询方案,在邻居数量较大的情况下,将邻居信息存储在多个邻居数据分块中,并且在进行数据查询时,按需读取若干目标邻居数据分块进行解析处理,从而可以降低数据查询过程的数据处理量,由此提升数据查询效率。
113.图12示出了根据本说明书的实施例的数据存储装置1200的示例方框图。如图12所示,数据存储装置1200可以包括节点数量确定单元1210、数据存储方式确定单元1220和数据存储单元1230。
114.节点数量确定单元1210被配置为确定待存储的有向图图数据中的各个起始图节点的邻居图节点数量。
115.数据存储方式确定单元1220被配置为根据各个起始图节点的邻居图节点数量确定数据存储方式。在一个示例中,数据存储方式确定单元1220相对于有向图图数据中的所有起始图节点确定数据存储方式。在另一示例中,数据存储方式确定单元1220相对于有向图图数据中的各个起始图节点分别确定数据存储方式。
116.针对各个起始图节点,在所确定的数据存储方式为非超大点数据存储时,数据存储单元1230被配置为将该起始图节点的节点数据、邻居信息、出边索引特征信息以及出边
数据存储到第一数据存储介质的第一起始图节点数据分块,所述出边索引特征信息包括所有出边的出边索引特征,每个出边索引特征与用于索引所述第一起始图节点数据分块中存储的出边数据的出边数据索引之间形成映射关系。
117.针对各个起始图节点,在所确定的数据存储方式为超大点数据存储时,数据存储单元1230被配置为将该起始图节点的节点数据、邻居信息、出边索引特征范围信息以及出边数据分块索引存储到第二数据存储介质的第二起始图节点数据分块,所述出边索引特征范围信息包括与出边数据分块索引之间形成映射关系的多个出边索引特征范围,每个出边索引特征范围信息用于索引一个出边数据分块索引,以及将该起始图节点的出边数据以及出边数据存储地址信息存储到第三数据存储介质的至少两个出边数据分块,所述出边数据存储地址信息包括二元数组<出边数据的出边索引特征,出边数据在出边数据分块中的相对存储地址>。
118.可选地,在一个示例中,数据存储单元1230可以进一步将逆向邻居信息存储在第一起始图节点数据分块和第二起始图节点数据分块中。
119.可选地,在一个示例中,针对邻居数量超过预定阈值的各个起始图节点,在所确定的数据存储方式为超大点数据存储时,数据存储单元1230可以将该起始图节点的节点数据、邻居索引特征范围、邻居数据分块索引、出边索引特征范围信息以及出边数据分块索引存储到第二数据存储介质的第二起始图节点数据分块中,将邻居信息分别存储到第四数据存储介质的至少两个邻居数据分块中,以及将该起始图节点的出边数据以及出边数据存储地址信息存储到第三数据存储介质的至少两个出边数据分块中。
120.图13示出了根据本说明书的实施例的数据查询装置1300的示例方框图。如图13所示,数据查询装置1300包括数据分块索引确定单元1310、数据读取单元1320、数据解析单元1330、查询数据获取单元1340和查询数据提供单元1350。
121.数据分块索引确定单元1310被配置为响应于接收到用户发起的数据查询请求,基于待查询图节点的节点标识确定待查询图节点的数据分块索引。
122.数据读取单元1320被配置为将数据分块索引的对应起始图节点数据分块从第一数据存储介质或第二数据存储介质读取到数据查询装置的内存。
123.数据解析单元1330被配置为对所读取的起始图节点数据分块进行解析。
124.查询数据获取单元1340被配置为根据解析后的起始图节点数据分块,在数据查询装置本地解析数据中或者从第三数据存储介质的出边数据分块获取数据查询请求的查询数据。
125.查询数据提供单元1350被配置为将所获取的查询数据提供给用户。
126.在一个示例中,节点数据包括起始图节点的节点标识以及节点属性。邻居信息包括起始图节点的节点标识以及邻居属性。出边数据包括出边标识以及出边属性。
127.响应于数据查询请求指示查询图节点的节点属性,查询数据获取单元1340获取解析出的起始图节点数据分块的节点数据中的节点属性,作为查询数据。
128.响应于数据查询请求指示查询图节点的邻居属性,查询数据获取单元1340获取解析出的起始图节点数据分块的邻居信息中的邻居属性,作为查询数据。
129.响应于数据查询请求指示查询图节点的出边属性,查询数据获取单元1340从解析后的起始图节点数据分块中确定目标出边的出边索引特征,基于出边索引特征以及出边索
引特征信息确定目标出边的出边数据索引或者基于出边索引特征和出边索引特征范围信息确定目标出边的出边数据分块索引。响应于确定出目标出边的出边数据索引,查询数据获取单元1340从出边数据索引所索引的解析后的起始图节点数据分块的出边数据中获取目标出边的出边属性作为查询数据。响应于确定出目标出边的出边数据分块索引,查询数据获取单元1340从出边数据分块索引所索引的第三数据存储介质的出边数据分块中获取目标出边的出边属性作为查询数据。
130.在一个示例中,数据查询请求可以包括过滤条件。响应于数据查询请求指示查询图节点的节点属性,查询数据获取单元1340基于数据查询请求中的过滤条件对解析出的起始图节点数据分块的节点数据进行查询过滤,并且获取经过查询过滤后的节点数据中的节点属性作为查询数据。响应于数据查询请求指示查询图节点的节点属性,查询数据获取单元1340基于数据查询请求中的过滤条件对解析出的邻居信息进行查询过滤,并且获取经过查询过滤后的邻居信息中的邻居属性作为查询数据。响应于数据查询请求指示查询图节点的出边属性,查询数据获取单元1340从解析后的起始图节点数据分块的邻居信息中确定出符合过滤条件的目标出边的出边索引特征。然后,查询数据获取单元1340基于出边索引特征和出边索引特征信息确定目标出边的出边数据索引,或者基于出边索引特征和出边索引特征范围信息确定目标出边的出边数据分块索引。响应于确定出目标出边的出边数据索引,查询数据获取单元1340从出边数据索引所索引的解析后的起始图节点数据分块的出边数据中获取目标出边的出边属性作为查询数据。响应于确定出目标出边的出边数据分块索引,查询数据获取单元1340从出边数据分块索引所索引的第三数据存储介质的出边数据分块中获取目标出边的出边属性作为查询数据。
131.在一个示例中,响应于确定出目标出边的出边书分块索引,数据读取单元1320将出边数据分块索引所指示的出边数据分块从第三数据存储介质读取到数据查询装置的内存中。在将出边数据分块读取到数据查询装置的内存后,数据解析单元1330解析出边数据分块中的出边数据存储地址信息。查询数据获取单元1340基于目标出边的出边索引特征,从解析后的出边数据存储地址信息中确定目标出边在出边数据分块中的相对存储地址。然后,查询数据获取单元1340根据相对存储地址从所读取的出边数据分块中获取目标出边的出边数据并进行解析,并且获取解析后的目标出边的出边数据中的出边属性,作为查询数据。
132.在索引特征为时间戳的情况下,查询数据获取单元1340可以基于出边时间戳,使用二分查找法来在出边时间戳信息中确定目标出边的出边数据索引信息或者在出边时间戳范围信息中确定目标出边的出边数据分块索引。
133.在一个示例中,针对邻居数量超过预定阈值的各个起始图节点,在所确定的数据存储方式为超大点数据存储时,第二起始图节点数据分块存储起始图节点的节点数据、邻居索引特征范围、邻居数据分块索引、出边索引特征范围信息以及出边数据分块索引,以及邻居信息分别存储在第四数据存储介质的至少两个邻居数据分块中。
134.在这种情况下,响应于数据查询请求指示查询图节点的邻居属性,查询数据获取单元1340基于邻居索引特征和邻居索引特征范围信息确定邻居数据分块索引。在确定出邻居数据分块索引后,数据读取单元1320将邻居数据分块索引所指示的邻居数据分块从第四数据存储介质读取到数据查询装置的内存。随后,数据解析单元1330解析所读取的邻居数
据分块。查询数据获取单元1340基于数据查询请求中的过滤条件对解析出的邻居数据分块中的邻居信息进行查询过滤,并且获取经过查询过滤后的邻居信息中的邻居属性,作为查询数据。
135.如上参照图1到图13,对根据本说明书实施例的数据存储方法、数据存储装置、数据查询方法以及数据查询装置进行了描述。上面的数据存储装置和数据查询装置可以采用硬件实现,也可以采用软件或者硬件和软件的组合来实现。
136.图14示出了根据本说明书的实施例的基于计算机系统实现的数据存储装置1400的示意图。如图14所示,数据存储装置1400可以包括至少一个处理器1410、存储器(例如,非易失性存储器)1420、内存1430和通信接口1440,并且至少一个处理器1410、存储器1420、内存1430和通信接口1440经由总线1460连接在一起。至少一个处理器1410执行在存储器中存储或编码的至少一个计算机可读指令(即,上述以软件形式实现的元素)。
137.在一个实施例中,在存储器中存储计算机可执行指令,其当执行时使得至少一个处理器1410:确定待存储的有向图图数据中的各个起始图节点的邻居图节点数量;根据各个起始图节点的邻居图节点数量确定数据存储方式;针对各个起始图节点,在所述数据存储方式为非超大点数据存储时,将该起始图节点的节点数据、邻居信息、出边索引特征信息以及出边数据存储到第一数据存储介质的第一起始图节点数据分块,所述出边索引特征信息包括该起始图节点的所有出边的出边索引特征,每个出边索引特征与用于索引所述第一起始图节点数据分块中存储的对应出边数据的出边数据索引之间形成映射关系;以及针对各个起始图节点,在所述数据存储方式为超大点数据存储时,将该起始图节点的节点数据、邻居信息、出边索引特征范围信息以及出边数据分块索引存储到第二数据存储介质的第二起始图节点数据分块,所述出边索引特征范围信息包括与出边数据分块索引之间形成映射关系的多个出边索引特征范围,以及将该起始图节点的出边数据以及出边数据存储地址信息存储到第三数据存储介质的至少两个出边数据分块,所述出边数据存储地址信息包括二元数组<出边数据的出边索引特征,出边数据在出边数据分块中的相对存储地址>。
138.应该理解,在存储器中存储的计算机可执行指令当执行时使得至少一个处理器1410进行本说明书的各个实施例中以上结合图1

图7以及图12描述的各种操作和功能。
139.图15示出了根据本说明书的实施例的基于计算机系统实现的数据查询装置1500的示意图。如图15所示,数据查询装置1500可以包括至少一个处理器1510、存储器(例如,非易失性存储器)1520、内存1530和通信接口1540,并且至少一个处理器1510、存储器1520、内存1530和通信接口1540经由总线1560连接在一起。至少一个处理器1510执行在存储器中存储或编码的至少一个计算机可读指令(即,上述以软件形式实现的元素)。
140.在一个实施例中,在存储器中存储计算机可执行指令,其当执行时使得至少一个处理器1510:响应于接收到用户发起的数据查询请求,基于待查询图节点的节点标识确定该待查询图节点的数据分块索引,有向图图数据按照如上所述的方法存储在数据存储介质中;将数据分块索引所索引的起始图节点数据分块从第一数据存储介质或第二数据存储介质读取到数据查询装置的内存中并进行解析;根据解析后的起始图节点数据分块,在数据查询装置的本地解析数据中或者从第三数据存储介质的出边数据分块获取数据查询请求的查询数据;以及将所获取的查询数据提供给用户。
141.应该理解,在存储器中存储的计算机可执行指令当执行时使得至少一个处理器
1510执行本说明书的各个实施例中以上结合图8

图11以及图13描述的各种操作和功能。
142.根据一个实施例,提供了一种比如机器可读介质(例如,非暂时性机器可读介质)的程序产品。机器可读介质可以具有指令(即,上述以软件形式实现的元素),该指令当被机器执行时,使得机器执行本说明书的各个实施例中以上结合图1

图13描述的各种操作和功能。具体地,可以提供配有可读存储介质的系统或者装置,在该可读存储介质上存储着实现上述实施例中任一实施例的功能的软件程序代码,且使该系统或者装置的计算机或处理器读出并执行存储在该可读存储介质中的指令。
143.在这种情况下,从可读介质读取的程序代码本身可实现上述实施例中任何一项实施例的功能,因此机器可读代码和存储机器可读代码的可读存储介质构成了本发明的一部分。
144.可读存储介质的实施例包括软盘、硬盘、磁光盘、光盘(如cd

rom、cd

r、cd

rw、dvd

rom、dvd

ram、dvd

rw、dvd

rw)、磁带、非易失性存储卡和rom。可选择地,可以由通信网络从服务器计算机上或云上下载程序代码。
145.根据一个实施例,提供一种计算机程序产品,该计算机程序产品包括计算机程序,该计算机程序当被处理器执行时,使得处理器执行本说明书的各个实施例中以上结合图1

图13描述的各种操作和功能。
146.本领域技术人员应当理解,上面公开的各个实施例可以在不偏离发明实质的情况下做出各种变形和修改。因此,本发明的保护范围应当由所附的权利要求书来限定。
147.需要说明的是,上述各流程和各系统结构图中不是所有的步骤和单元都是必须的,可以根据实际的需要忽略某些步骤或单元。各步骤的执行顺序不是固定的,可以根据需要进行确定。上述各实施例中描述的装置结构可以是物理结构,也可以是逻辑结构,即,有些单元可能由同一物理实体实现,或者,有些单元可能分由多个物理实体实现,或者,可以由多个独立设备中的某些部件共同实现。
148.以上各实施例中,硬件单元或模块可以通过机械方式或电气方式实现。例如,一个硬件单元、模块或处理器可以包括永久性专用的电路或逻辑(如专门的处理器,fpga或asic)来完成相应操作。硬件单元或处理器还可以包括可编程逻辑或电路(如通用处理器或其它可编程处理器),可以由软件进行临时的设置以完成相应操作。具体的实现方式(机械方式、或专用的永久性电路、或者临时设置的电路)可以基于成本和时间上的考虑来确定。
149.上面结合附图阐述的具体实施方式描述了示例性实施例,但并不表示可以实现的或者落入权利要求书的保护范围的所有实施例。在整个本说明书中使用的术语“示例性”意味着“用作示例、实例或例示”,并不意味着比其它实施例“优选”或“具有优势”。出于提供对所描述技术的理解的目的,具体实施方式包括具体细节。然而,可以在没有这些具体细节的情况下实施这些技术。在一些实例中,为了避免对所描述的实施例的概念造成难以理解,公知的结构和装置以框图形式示出。
150.本公开内容的上述描述被提供来使得本领域任何普通技术人员能够实现或者使用本公开内容。对于本领域普通技术人员来说,对本公开内容进行的各种修改是显而易见的,并且,也可以在不脱离本公开内容的保护范围的情况下,将本文所定义的一般性原理应用于其它变型。因此,本公开内容并不限于本文所描述的示例和设计,而是与符合本文公开的原理和新颖性特征的最广范围相一致。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1