一种重构图的数据存储方法与流程

文档序号:17601537发布日期:2019-05-07 20:22阅读:531来源:国知局
一种重构图的数据存储方法与流程

一种重构图的数据存储方法,用于重构图的数据存储,所属技术领域为计算机领域,具体涉及数据结构、数据存储、数据查询等技术领域。



背景技术:

图结构:数据元素间的关系是任意的,包含数据的图结构,即图中任意两个数据元素间均可相关联。其他数据结构(如树、线性表等)都有明确的条件限制。

哈希表:是根据关键码值(keyvalue)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫做散列表。

现有的数图结构的存储方式是保存点和边,而对于边的结构表达方式是被边连接的两个点。存储结构如说明书附图1所示。

此类结构的存储和查询方式的问题在于,现有数据结构的存储仅能使用关系型数据库(mysql、oracle),主要以列表形式进行保存,很难用合理的方式存储到k,v(keyvalue)类数据库中,关系型数据库由于存储数据的位置在硬盘上,因此读和写的效率都依赖于硬盘的i/o,会出现资源瓶颈的问题;当需要判断一个点是否存在于图中时,采用关系型数据库需要遍历所有的点才能知道是否在图中,造成查询效率低。



技术实现要素:

针对上述研究的问题,本发明的目的在于提供一种重构图的数据存储方法,用于解决现有数据结构的存储方式主要以列表形式进行保存,会出现资源瓶颈的问题。

为了达到上述目的,本发明采用如下技术方案:

一种重新构建图的方法,其特征在于,如下步骤:

步骤s1、重新定义图中的边

将图中两端分别连接两个或多个点的点作为边;

步骤s2、重新构建图

一个点根据边的类型下包含的边的值关联到另一个节点,得到重构图。

进一步,将重构图使用keyvalue类数据库进行数据存储。

进一步,将重构图使用keyvalue类数据库进行数据存储的具体步骤为:

步骤1、定义两个存储结构

以key为重构图id,value为包含重构图中全量节点和边列表两个链表的图哈希表;

以key为边的值,value为包含边连接的节点id、重构图id、边类型三个属性的边哈希表。

步骤2、将步骤1得到的两个哈希表通过重构图id相互关联起来;

步骤3、将数据相关联的边哈希表和图哈希表以keyvalue的形式保存到数据库。

本发明同现有技术相比,其有益效果表现在:

1.本发明中的图的图结构比传统图结构,存储数据少,比起遍历方式上更快速,即能更加快速匹配一个节点是否与图相连接,而且采用keyvalue类数据库进行存储,更佳使得后续的查询方式更加的快,即本发明的图结构与传统图结构相比,本发明表达相互连接的关系所需要记录的边数据更少;比如基于相同边的值,有4个节点两两相互连接需要6条边才能记录完整这个结构,而使用本发明中的方式记录信息,则只需要一条数据则可以完成记录。

2.本发明中重新定义了图结构的图,不仅能使用关系型数据库(mysql、oracle)进行存储和查询(参见效果中的第1点的存储优势,以及存储优势所带来的查询优势),还能采用合理的方式存储到k,v类数据库中,即存储到内存数据库存中(比如:redis),在现有的it资源条件下,内存不再是资源瓶颈,而内存的读写效率是远高于硬盘的。

附图说明

图1为现有技术中的数据结构的存储和查询表的示意图,(a)为点的存储方式,(b)为边的存储方式;

图2为本发明重构图的存储和查询表的示意图,(a)为图哈希表的存储方式,(b)为边哈希表的存储方式;

图3为本发明重构图在数据库中进行查询的示意图;

图4为本发明实施例中的原始数据表;

图5为本发明实施例中所指传统图结构记录图的表;

图6为本发明实施例中所指传统图结构记录图的图;

图7为本发明实施例中采用重构图结构记录图的表;

图8为本发明实施例中采用重构图结构记录图的图。

具体实施方式

下面将结合附图及具体实施方式对本发明作进一步的描述。

一种重新构建图的方法,如下步骤:

步骤s1、重新定义图中的边

将图中两端分别连接两个或多个点的点作为边;

图中的边是由一个两端分别连接两个或多个点的点构成。也就是说一条边至少有三个点,中间的点代表边,因此边是一个有值的数据,例:1.两颗星球有关系的话,可以是同一个星系。星系就是边的类型,具体的星系名称比如太阳系就是边的值;2.两辆车有关系的话,可以是同一个型号的车,车的型号这种属性就是边的类型,而具体是哪一个型号就是边的值,比如两个车都是大众的桑塔拉。需要根据实际的数据含义找到点和边。

步骤s2、重新构建图

将点的边的值和边的值分开,一个点根据边的类型下包含的边的值(可以是基于一个或多个相同的值)关联到另一个节点,得到重构了结构的图。即构建图的时候将点的值和边(也是一个点)的值分开,然后一个点可以通过相同类型下的一个边的值或多重边的值关联到另一个节点。节点和节点(此处的节点,是指可为多重值的节点,不指代表节点的边)之间不会直接连接,必然通过一种关联关系连接到一起,如:有一个数据是人、家庭地址、毕业学校、公司名称。将人定义为节点,即边的类型(此节点就包含了多重值,家庭地址、毕业学校、公司名称)时,那么人和人之间的连接方式有三种:a.相同家庭地址;b.相同毕业学校;c.相同公司名称),这三种方式即为边的值,因此连接关系是有值存在,并非是一种纯数据关系的表达方式。

一种重构图的数据存储方法,将重构图使用keyvalue类数据库进行数据存储;具体步骤为:

步骤1、定义两个存储结构

如图3所示,以key为重构图id,value为包含重构图中全量节点和边列表两个链表的图哈希表,全量节点即为重构图id的点列表,边列表即为重构图id中所有边的值;

以key为边的值,value为包含边连接的节点id(即点列表)、重构图id、边类型三个属性的边哈希表。

步骤2、将步骤1得到的两个哈希表通过重构图id相互关联起来;

步骤3、将数据相关联的边哈希表和图哈希表以keyvalue的形式保存到数据库。(如:redis数据库)。

一种重构图的数据查询方法,步骤如下:

(1)获取一个待查询边;

(2)通过边的值在数据库中进行查询,即可得到待查询边与重构图是否连接的结果。

具体步骤为:

步骤(2.1)通过边的值(即key)在边哈希表中进行查找,判断是否能找到边的值,若能找到,转到步骤(2.2),否则得到待查询边与重构图不相连接的结果;

步骤(2.2)通过边的值在边哈希表中找到所对应的重构图,即在图哈希表中找到的相连接的重构图。

发明中将边构造为由至少三个点组成的连接关系,此类方法能更加有效的表达图形结构(即重构图),也让边所需记录的数据行数更少。且使用哈希表形式对数据进行存储,以k,v的形式进行查询效率高于列表遍历。

实施例:

获取原始数据如图4所示,类型为人员名称,人员名称下包含有边的值,即所属公司和毕业学校,采用传统图结构记录图(边的数据记录)的形态如图5和图6所示,通过相同边的值进行连接(只能表达节点之间两两均可连接),需要记录6条边的记录;而本发明通过相同边的值进行连接,只需要3条记录,可以看出节点可以既是共同的公司又是共同的学校,也能表达两节点之间仅是共同的学校,具体图7和图8所示。其中图8即是按照图2中的(b)图进行keyvalue类数据库存储,存在了3条图,边哈希表包括了图7和图8所示3条边,图哈希表包括图7和图8所示的重构图,还包括其它重构图,在查找时,输入人员名称:黄七,所属公司:公司三,毕业学校:大学一,将边的值公司三或/和大学一在边哈希表中进行比较(即是每一行数据都需要和其他所有的数据进行一次比较),得到大学一与图7中的第三条边有连接,即得到重构图1有连接关系,即与图哈希表中的重构图1有连接,具体如图3所示。

以上仅是本发明众多具体应用范围中的代表性实施例,对本发明的保护范围不构成任何限制。凡采用变换或是等效替换而形成的技术方案,均落在本发明权利保护范围之内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1