一种图数据存储方法和装置制造方法及图纸

技术编号:37203550 阅读:16 留言:0更新日期:2023-04-20 22:57
本发明专利技术涉及数据库技术领域,提供了一种图数据存储方法和装置。其中所述方法包括:将数据记录存储到分区数据表中;将属性索引记录存储到属性索引表中,以便于通过属性查找到对应的数据记录;其中,所述属性索引记录包括属性值和对应数据记录的ROWID;将图拓扑数据存储到邻接表中,以便于通过边或顶点查找到对应的数据记录;其中,所述图拓扑数据包括边ID、顶点ID、边与顶点之间的拓扑结构以及对应数据记录的ROWID。本发明专利技术将图数据中多种类型的数据分开存储,将每个顶点和边以及对应的属性、关系、标签均存储到分区数据表中,并通过邻接表单独存储图拓扑数据,以避免邻接表的存储规模过大而导致图拓扑数据的查询性能下降。而导致图拓扑数据的查询性能下降。而导致图拓扑数据的查询性能下降。

【技术实现步骤摘要】
一种图数据存储方法和装置


[0001]本专利技术涉及数据库
,特别是涉及一种图数据存储方法和装置。

技术介绍

[0002]图是由若干点及连接点的边所构成的一种数据结构。图因其对事物之间的关系的直观表达方式以及易于扩展的结构,在计算机和人工智能领域得到越来越普遍的应用。
[0003]存储图这种数据结构的方法有很多,总体上可分为原生图存储和非原生图存储两大类。原生图存储通过在内部维护原生的邻接关系能够很好地解决大量实体之间的关联性分析,在处理实体间的关系时具有很好的性能。而非原生图存储多采用基于KV键值对的数据结构来表示顶点之间的邻接关系,一个KV键值对一般只能表示一层邻接关系,在进行多层邻接查询时需要频繁访问KV结构,在一些计算与存储分离的图存储架构中,需要多次网络通信,查询性能较低,无法体现出图存储在关系挖掘中的优势。
[0004]常见的原生图存储方式主要有邻接矩阵和邻接表。邻接矩阵用一个一维数组存储图中所有的顶点,用一个二维数组存储图中各顶点之间的邻接关系(边),两个点之间即使不存在边,也要在二维数组中占据一个存储位置,其空间复杂度是O(V2)。邻接表也是用一个一维数组存储图中所有的顶点,但存储边时则是为每个顶点建立一个单链表,记录了该顶点的所有的边,其空间复杂度是O(V+E)。比较两种存储方式,邻接矩阵的优点是比较适合稠密图的存储,很容易确定图中任意两个顶点之间是否有边相连,插入、删除边也很简单,但在存储稀疏图时空间浪费很大,而且一般情况下无法存储多重边,且判断一个顶点有多少关联边时需要扫描整行或整列,花费代价很大。邻接表的存储效率较邻接矩阵更高,可以存储多重边,查询一个顶点的所有邻接边只需查询该顶点的单链表即可,但要判断两个顶点之间是否存在边,需要遍历整个单链表,查询效率比邻接矩阵低。
[0005]上述原生图存储方法主要考虑的是图的拓扑结构,实际的图应用中需要将图中的顶点和边按类别进行分组,简单的邻接矩阵或邻接表无法根据类别进行分类查询。同时,顶点和边通常都带有自己的属性信息,若将属性数据和拓扑数据聚集存储,会使得图的拓扑数据的存储规模膨胀,从而导致大部分邻接关系的查询性能会急剧下降。
[0006]基于KV结构的非原生图存储在多层邻接查询时性能较低,而传统的邻接矩阵和邻接表等原生图存储结构无法对不同类别的顶点和边进行分类存储与查询,对属性图的存储也没有很好的解决方案,无法适应现代大图存储的要求。
[0007]鉴于此,克服该现有技术所存在的缺陷是本
亟待解决的问题。

技术实现思路

[0008]本专利技术要解决的技术问题是顶点和边通常都带有自己的属性信息,而现有技术中将属性数据和拓扑数据聚集存储,会使得图的拓扑数据的存储规模膨胀,从而导致大部分邻接关系的查询性能会急剧下降。
[0009]本专利技术采用如下技术方案:
[0010]第一方面,本专利技术提供了一种图数据存储方法,数据存储结构包括多个分区数据表、邻接表、属性索引表和顶点索引表,所述存储方法包括:
[0011]将数据记录存储到对应的分区数据表中;其中,基于关系和标签,所述多个分区数据表还被划分为关系分区数据表和标签分区数据表,基于顶点和边的不同,所述数据记录还被划分为顶点记录和边记录,每一个关系对应一个关系分区数据表,用于存储具有对应关系的边记录,每一个标签对应一个标签分区数据表,用于存储具有对应标签的顶点记录,所述顶点记录包括顶点ID和对应顶点的所有属性,所述边记录包括边ID、对应边的起始顶点的顶点ID、对应边的终止顶点的顶点ID和对应边的所有属性;
[0012]将属性索引记录存储到属性索引表中,以便于通过属性查找到对应的数据记录;其中,所述属性索引记录包括属性值和对应数据记录的ROWID;
[0013]将图拓扑数据存储到邻接表中,以便于通过边或顶点查找到对应的数据记录;其中,所述图拓扑数据包括边ID、顶点ID、边与顶点之间的拓扑结构以及对应数据记录的ROWID。
[0014]优选的,所述将数据记录存储到对应的分区数据表中,具体包括:
[0015]以每个数据文件作为对应分区数据表中的一个分区,将每个数据文件划分为多个页,将数据记录写入相应页;其中,每个分区数据表包含一个或多个分区;
[0016]并根据所述数据记录所在分区的文件号、所述数据记录所在页的页号和所述数据记录在所在页内的相对偏移,生成对应的ROWID,以用于确定所述数据记录的所在位置;
[0017]在分区数据表的第一分区中存储各分区的分区索引数据,以便于访问分区数据表中的每个分区;其中,每个分区的分区索引数据至少包括分区的尾页地址和分区的数据记录数量。
[0018]优选的,所述方法还包括数据记录的插入操作,具体包括:
[0019]根据数据记录所对应的标签或关系,找到对应的目标分区数据表;
[0020]根据所述分区索引数据,找到目标分区数据表中数据记录数量最少且未上锁的目标分区,访问所述目标分区的尾页;
[0021]根据所述分区索引数据中的尾页地址,判断所述尾页的剩余存储空间是否充足,若所述尾页的存储空间充足,则对所述目标分区的分区锁进行上锁,将所述数据记录写入至所述尾页,并更新所述目标分区的分区索引数据,在所述数据写入成功后,对所述目标分区的分区锁进行解锁;
[0022]若所述尾页的剩余存储空间不足,则在所述尾页后,为所述目标分区分配一个新页,以所述新页作为所述目标分区的新尾页,对所述目标分区的分区锁进行上锁,将所述数据记录写入至所述新尾页,在所述数据写入成功后,对所述目标分区的分区锁进行解锁,并更新所述目标分区的分区索引数据。
[0023]优选的,所述方法还包括数据记录的更新操作,具体包括:
[0024]根据旧数据记录的ROWID,确定所述旧数据记录的所在分区和存储位置;
[0025]将所述旧数据记录的数据大小与新数据记录的数据大小进行比较,若所述新数据记录的数据大小不大于旧数据记录的数据大小,则将所述新数据记录直接覆盖写入旧记录的存储位置;
[0026]若所述新数据记录的数据大小大于旧数据记录的数据大小,则以数据插入的形
式,将所述新数据记录写入至所述分区的尾页中,并将指向所述新数据记录的指针覆盖写入旧数据记录的存储位置。
[0027]优选的,所述方法还包括数据记录的删除操作,具体包括:
[0028]对待删除数据记录添加删除标记,并对待删除记录所在分区的数据记录数量进行更新,当查找到对应数据记录具有删除标记时,认为所述数据记录已被删除,在空闲时通过碎片整理程序异步回收所述待删除数据记录的存储空间。
[0029]优选的,所述将图拓扑数据存储到邻接表中,具体包括:
[0030]每一张图对应一个邻接表,所述邻接表包括顶点数组、关系数组、起始关系链表、终止关系链表、同关系边链表、起始边链表和终止边链表;
[0031]在所述顶点数组中存储顶点ID、对应起始关系链表的入口指针、对应终止关系链表的入本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种图数据存储方法,其特征在于,数据存储结构包括多个分区数据表、邻接表、属性索引表和顶点索引表,所述存储方法包括:将数据记录存储到对应的分区数据表中;其中,基于关系和标签,所述多个分区数据表还被划分为关系分区数据表和标签分区数据表,基于顶点和边的不同,所述数据记录还被划分为顶点记录和边记录,每一个关系对应一个关系分区数据表,用于存储具有对应关系的边记录,每一个标签对应一个标签分区数据表,用于存储具有对应标签的顶点记录,所述顶点记录包括顶点ID和对应顶点的所有属性,所述边记录包括边ID、对应边的起始顶点的顶点ID、对应边的终止顶点的顶点ID和对应边的所有属性;将属性索引记录存储到属性索引表中,以便于通过属性查找到对应的数据记录;其中,所述属性索引记录包括属性值和对应数据记录的ROWID;将图拓扑数据存储到邻接表中,以便于通过边或顶点查找到对应的数据记录;其中,所述图拓扑数据包括边ID、顶点ID、边与顶点之间的拓扑结构以及对应数据记录的ROWID。2.根据权利要求1所述的图数据存储方法,其特征在于,所述将数据记录存储到对应的分区数据表中,具体包括:以每个数据文件作为对应分区数据表中的一个分区,将每个数据文件划分为多个页,将数据记录写入相应页;其中,每个分区数据表包含一个或多个分区;并根据所述数据记录所在分区的文件号、所述数据记录所在页的页号和所述数据记录在所在页内的相对偏移,生成对应的ROWID,以用于确定所述数据记录的所在位置;在分区数据表的第一分区中存储各分区的分区索引数据,以便于访问分区数据表中的每个分区;其中,每个分区的分区索引数据至少包括分区的尾页地址和分区的数据记录数量。3.根据权利要求2所述的图数据存储方法,其特征在于,所述方法还包括数据记录的插入操作,具体包括:根据数据记录所对应的标签或关系,找到对应的目标分区数据表;根据分区索引数据,找到目标分区数据表中数据记录数量最少且未上锁的目标分区,访问所述目标分区的尾页;根据所述分区索引数据中的尾页地址,判断所述尾页的剩余存储空间是否充足,若所述尾页的存储空间充足,则对所述目标分区的分区锁进行上锁,将所述数据记录写入至所述尾页,并更新所述目标分区的分区索引数据,在所述数据写入成功后,对所述目标分区的分区锁进行解锁;若所述尾页的剩余存储空间不足,则在所述尾页后,为所述目标分区分配一个新页,以所述新页作为所述目标分区的新尾页,对所述目标分区的分区锁进行上锁,将所述数据记录写入至所述新尾页,在所述数据写入成功后,对所述目标分区的分区锁进行解锁,并更新所述目标分区的分区索引数据。4.根据权利要求2所述的图数据存储方法,其特征在于,所述方法还包括数据记录的更新操作,具体包括:根据旧数据记录的ROWID,确定所述旧数据记录的所在分区和存储位置;将所述旧数据记录的数据大小与新数据记录的数据大小进行比较,若所述新数据记录的数据大小不大于旧数据记录的数据大小,则将所述新数据记录直接覆盖写入旧记录的存
储位置;若所述新数据记录的数据大小大于旧数据记录的数据大小,则以数据插入的形式,将所述新数据记录写入至所述分区的尾页中,并将指向所述新数据记录的指针覆盖写入旧数据记录的存储位置。5.根据权利要求2所述的图数据存储方法,其特征在于,所述方法还包括数据记录...

【专利技术属性】
技术研发人员:吕继云李鹏张睿王振宇
申请(专利权)人:四川蜀天梦图数据科技有限公司
类型:发明
国别省市:

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

1