一种分布式原生图的实现方法、系统、设备和存储介质技术方案

技术编号:36896125 阅读:12 留言:0更新日期:2023-03-15 22:33
本发明专利技术公开了一种分布式原生图的实现方法、系统、设备和存储介质,整个分布式系统顶点/边的访问,直接基于全局的数组下标进行,访问快速,避免计算,系统自动维护邻接关系,进行N跳查询时,直接基于全局数组下标而不是基于key进行访问,避免各种树型结构中所需的大量比较操作,基于数组下标访问的性能相较于基于key的访问,提升最高可达到190倍。提升最高可达到190倍。提升最高可达到190倍。

【技术实现步骤摘要】
一种分布式原生图的实现方法、系统、设备和存储介质


[0001]本专利技术涉及数据库
,尤其是一种分布式原生图的实现方法、系统、设备和存储介质。

技术介绍

[0002]图数据库根据底层存储实现的不同,可分为原生图数据库和非原生图数据库。
[0003]原生图数据库使用图模型进行数据存储,为存储和处理图而设计优化,可支持各类图算法的快速遍历,从而具有更好的性能。免索引邻接是原生图处理的关键,在数据写入时,免索引邻接中通过直接存储每个站点与其相邻的站点和关系来加快处理速度。在数据查询处理期间,通过免索引邻接可实现快速检索。
[0004]非原生图数据库的底层物理存储通常采用关系数据库等非图模型存储,在存储之上封装图的语义来进行图处理。为了表示图的邻接关系,通常需要在关系数据库中引入新的关系表表示。在进行邻接顶点/边查询时,需要实体表和关系表一起执行连接查询,并且为了提升性能,在实体表和关系表上都要建立索引(一般是B树/B+树/LSM树/Skiplist等索引数据结构),如果要查询多跳邻接顶点/边,连接的表的数量会显著变多,关系数据库通常难以在合理时间内找到最优的表连接次序,即便找到最优连接次序,也会因为在树形索引上进行反复比较而导致查询性能低下。
[0005]另一方面,随着图数据应用日趋复杂,单机图数据库难以满足大规模图数据的存储和查询分析,产生了一些底层存储基于非原生图的分布式图数据库。在执行邻接查询时,非原生图都是基于key进行数据访问,该方式受到底层存储模式的限制,尤其在跨站点的多层邻接查询时,性能下降明显。目前市场上主流的图数据库Neo4j,使用了原生图存储的方式,但是其不支持分布式功能,不能横向拓展,难以满足大规模图数据的应用。

技术实现思路

[0006]本专利技术所要解决的技术问题在于,提供一种分布式原生图的实现方法、系统、设备和存储介质,直接基于邻接关系数组和全局的数组下标进行分布式访问,能更好地支持大规模图数据,大幅提升针对各种关联性分析查询的性能。
[0007]为解决上述技术问题,本专利技术提供一种分布式原生图的实现方法,包括如下步骤:
[0008]步骤1、系统在运行时,各数据节点上自动建立数组索引结构;
[0009]步骤2、在分布式原生图系统运行过程中,工作线程/进程解析接收到的操作请求,确定操作类型;
[0010]步骤3、根据操作类型的不同执行对应的操作。
[0011]优选的,步骤1中,系统在运行时,各数据节点上自动建立数组索引结构具体为:系统在初始化时自动创建全局的顶点数组索引和边数组索引,在创建实体表、关系表时通过指定选项来自动针对特定表创建顶点数组索引和边数组索引,通过SQL语句将已有的实体表、关系表转换为顶点表、边表,从而自动创建顶点数组索引和边数组索引。
[0012]优选的,步骤3中,根据操作类型的不同执行对应的操作具体为:
[0013](1)当操作类型是插入顶点数据时,工作线程/进程计算该顶点需要发往的站点号,然后分配一个ROWID,其中Graph_id表示该顶点属于哪个图,Node_id表示通过计算得到的站点号,还包含一个单调递增的顶点ID,该ID表示Graph_id对应的图在站点Node_id上的顶点数组文件的下标;除了在数据文件中插入顶点的属性数据对应的物理记录之外,对于顶点所在表的主索引,在叶子节点上同时存放属性数据对应的物理记录地址和顶点ROWID;然后在顶点数组中对应第ID个单元填入该顶点对应的物理记录在数据文件中的地址信息Address,last_out_edge_rowid和last_in_edge_rowid设置为一个非法值(如

1|

1|

1|

1|,因为暂时还没有跟该顶点关联的边),返回用户该边ROWID和成功结果;
[0014](2)当操作类型是更新顶点数据时,需要先根据顶点ROWID确定顶点所在的站点,然后在此站点上执行顶点更新操作;若数据存放的位置不变,则顶点对应的数组项不做任何变动,若数据存放位置有变化,则更新该记录对应的顶点数组索引项中的地址Address;
[0015](3)当操作类型是删除顶点时,需要先根据顶点ROWID确定顶点所在的站点,然后在此站点上执行删除操作;将顶点对应的顶点数组索引项的Address设置为特定标记即可(如对应的最大无符号值0xffffffffffffffff等),表示顶点已经删除;
[0016](4)当操作类型是插入边数据时,工作线程/进程计算该边需要发往的站点号,然后分配一个ROWID,其中Graph_id表示该边属于哪个图,Node_id表示该边起始顶点所在站点的站点号,还包含一个单调递增的边ID,该ID表示Graph_id对应的图在站点Node_id上的边数组文件的下标;除了在数据文件中插入边的属性数据对应的物理记录之外,对于边所在表的主索引,在叶子节点上同时存放属性数据对应的物理记录地址和边ROWID;然后在边数组中对应第ID个单元填入该边对应的物理记录在数据文件中的地址信息Address,起始顶点的ROWID,起始顶点的上一条出边ROWID,终止顶点的ROWID和终止顶点的上一条入边ROWID,接着设置起始顶点的上一条出边ROWID为该插入边的ROWID,如果终止顶点和起始顶点在同一站点上,则设置终止顶点的上一条入边ROWID为该插入边的ROWID,如果终止顶点和起始顶点不在同一站点上,则需要在终止顶点所在站点上插入该边的信息,完成以上操作后,返回用户该边ROWID和成功结果;
[0017](5)当操作类型是更新边数据时,需要根据边ROWID确定边所在的站点,然后在此站点上执行边更新操作;若数据存放的位置不变,则边对应的边数组项不做任何变动,若数据存放位置有变化,则更新该记录对应的边数组索引项中的地址Address即可;
[0018](6)当操作类型是删除边时,需要根据边ROWID确定边所在的站点,然后在此站点上执行更新操作;将边对应的边数组索引项的Address设置为特定标记即可(如对应的最大无符号值0xffffffffffffffff等),表示边已经删除;
[0019](7)当操作类型是基于顶点/边的ROWID查找顶点/边信息时,根据ROWID找到顶点/边所在站点和顶点/边ID,在此站点上直接基于数组对应ID项可以查找到记录的Address,然后直接在该地址处查询到顶点/边的详细信息;
[0020](8)当操作类型是基于ROWID查找第n跳邻接顶点/边信息时,基于ROWID获取第n跳邻接顶点/边信息;
[0021](9)当操作类型是基于边ROWID查找第n跳邻接顶点/边信息时,根据顶点ROWID取得该边所属的表类型Table_type,图号Graph_id,所在的站点号Node_id和边ID下标。在站
点号为Node_id的站点上根据Graph_id找到对应的图,根据表类型找到边数组,然后边数组第ID项获取到起始本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种分布式原生图的实现方法,其特征在于,包括如下步骤:步骤1、系统在运行时,各数据节点上自动建立数组索引结构;步骤2、在分布式原生图系统运行过程中,工作线程/进程解析接收到的操作请求,确定操作类型;步骤3、根据操作类型的不同执行对应的操作。2.如权利要求1所述的分布式原生图的实现方法,其特征在于,步骤1中,系统在运行时,各数据节点上自动建立数组索引结构具体为:系统在初始化时自动创建全局的顶点数组索引和边数组索引,在创建实体表、关系表时通过指定选项来自动针对特定表创建顶点数组索引和边数组索引,通过SQL语句将已有的实体表、关系表转换为顶点表、边表,从而自动创建顶点数组索引和边数组索引。3.如权利要求1所述的分布式原生图的实现方法,其特征在于,步骤3中,根据操作类型的不同执行对应的操作具体为:(1)当操作类型是插入顶点数据时,工作线程/进程计算该顶点需要发往的站点号,然后分配一个ROWID,其中Graph_id表示该顶点属于哪个图,Node_id表示通过计算得到的站点号,还包含一个单调递增的顶点ID,该ID表示Graph_id对应的图在站点Node_id上的顶点数组文件的下标;除了在数据文件中插入顶点的属性数据对应的物理记录之外,对于顶点所在表的主索引,在叶子节点上同时存放属性数据对应的物理记录地址和顶点ROWID;然后在顶点数组中对应第ID个单元填入该顶点对应的物理记录在数据文件中的地址信息Address,last_out_edge_rowid和last_in_edge_rowid设置为一个非法值,返回用户该顶点ROWID和成功结果;(2)当操作类型是更新顶点数据时,需要先根据顶点ROWID确定顶点所在的站点,然后在此站点上执行顶点更新操作;若数据存放的位置不变,则顶点对应的数组项不做任何变动,若数据存放位置有变化,则更新该记录对应的顶点数组索引项中的地址Address;(3)当操作类型是删除顶点时,需要先根据顶点ROWID确定顶点所在的站点,然后在此站点上执行删除操作;将顶点对应的顶点数组索引项的Address设置为特定标记,表示顶点已经删除;(4)当操作类型是插入边数据时,工作线程/进程计算该边需要发往的站点号,然后分配一个ROWID,其中Graph_id表示该边属于哪个图,Node_id表示该边起始顶点所在站点的站点号,还包含一个单调递增的边ID,该ID表示Graph_id对应的图在站点Node_id上的边数组文件的下标;除了在数据文件中插入边的属性数据对应的物理记录之外,对于边所在表的主索引,在叶子节点上同时存放属性数据对应的物理记录地址和边ROWID;然后在边数组中对应第ID个单元填入该边对应的物理记录在数据文件中的地址信息Address,起始顶点的ROWID,起始顶点的上一条出边ROWID,终止顶点的ROWID和终止顶点的上一条入边ROWID,接着设置起始顶点的上一条出边ROWID为该插入边的ROWID,如果终止顶点和起始顶点在同一站点上,则设置终止顶点的上一条入边ROWID为该插入边的ROWID,如果终止顶点和起始顶点不在同一站点上,则需要在终止顶点所在站点上插入该边的信息,完成以上操作后,返回用户该边ROWID和成功结果;(5)当操作类型是更新边数据时,需要根据边ROWID确定边所在的站点,然后在此站点上执行边更新操作;若数据存放的位置不变,则边对应的边数组项不做任何变动,若数据存
放位置有变化,则更新该记录对应的边数组索引项中的地址Address;(6)当操作类型是删除边时,需要根据边ROWID确定边所在的站点,然后在此站点上执行更新操作;将边对应的边数组索引项的Address设置为特定标记,表示边已经删除;(7)当操作类型是基于顶点/边的ROWID查找顶点/边信息时,根据ROWID找到顶点/边所在站点和顶点/边ID,在此站点上直接基于数组对应ID项查找到记录的Address,然后直接在该地址处查询到顶点/边的详细信息;(8)当操作类型是基于ROWID查找第n跳邻接顶点/边信息时,基于ROWID获取第n跳邻接顶点/边信息;(9)当操作类型是基于边ROWID查找第n跳邻接顶点/边信息时,根据顶点ROWID取得该边所属的表类型Table_type,图号Graph_id,所在的站点号Node_id和边ID下标;在站点号为Node_id的站点上根据Graph_id找到对应的图,根据表类型找到边数组,然后边数组第ID项获取到起始顶点和终止顶点的ROWID,然后分别基于起始顶点和终止顶点,获取第n跳邻接顶点/边信息。4.如权利要求3所述的分布式原生图的实现方法,其特征在于,步骤(4)中,当操作类型是插入边数据时,具体包括如下步骤:(a)工作线程/进程会根据该边的起始顶点ROWID获取需要发往的站点号,分布式环境下默认将边的属性数据插入到和边的起始顶点相同的站点上,然后分配一个边ROWID,其中Graph_id表示该边属于哪个图,Node_id和起始顶点的站点号相同,还包含一个在Node_id站点上单调递增的边ID,该ID表示Graph_id对应的图在站点Node_id上的边数组文件的下标;(b)在Node_id站点上,除了插入边的属性数据对应的物理记录之外,对于边所在表的主索引,在叶子节点同时存放属性数据对应的物理记录地址和边ROWID;(c)然后在Node_id站点上,在边数组中对应第ID个单元填入该边对应的物理记录在数据文件中的地址Address,起始顶点的ROWID:v1和v1的上一条出边的边ROWID:v1_last_out_edge_rowid,从顶点数组中第v1号单元的last_out_edge_rowid中获取,终止顶点的ROWID:v2和v2的上一条入边的边ROWID:v2_last_in_edge_rowid,如果起始顶点和终止顶点在同一站点上,则直接从顶点数组中第v2号单元的last_in_edge_rowid中获取;如果两者不在同一站点上,则继续执行第(d)步;(d)然后在Node_id站点上,把顶点数组中第v1号单元的last_out_edge_rowid设置为当前插入的边ROWID;如果顶点v2也在Node_id站点上,直接把顶点数组中第v2号单元的last_in_edge_rowid设置为当前插入的边ROWID,然后直接跳到第(f)步;如果顶点v2不在Node_id站点上,则执行第(e)步;(e)如果顶点起始顶点和终止顶点不在同一站点上,则系统需要根据终止顶点的ROWID获取站点号,然后向该终止站点发送起始顶点ROWID、上一条出边ROWID,当前插入边的ROWID和终止顶点ROWID,通知终止站...

【专利技术属性】
技术研发人员:沈忱付新王学海徐奇李科峰于骞
申请(专利权)人:达梦数据技术江苏有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1