gStore:Answering SPARQL Queries via Subgraph Matching

2011

gStore: Answering SPARQL Queries via Subgraph Matching

1.存在问题

1)他们无法以可扩展的方式支持带通配符的SPARQL

​ 例如:

​ 我们可以通过以下SPARQL从RDF数据集中检索1809年2月12日出生并于1865年4月15日去世的人的姓名

在这里插入图片描述
​ 我们可能知道一位重要的政治人物于2月12日出生并于4月15日去世,但我们不知道他的确切出生和死亡年份。 在这种情况下,我们必须使用通配符执行查询

2)现有系统对于存储RDF的数据库频繁更新是很困难的

​ 社交网络中的RDF数据(例如FOAF项目(foaf-project.org))也经常更新,以代表个人不断变化的关系

2.解决方法

2.1 主要思路

将RDF数据转换为RDF图,可以通过将SPARQL查询转换为子图匹配查询RDF图

RDF graph :

1) RDF图的大小(即顶点和边的数量)比典型图数据库考虑的大小大几个数量级。

2)RDF图中顶点和边缘标签的基数比传统图数据库中的基数大得多

3)SPARQL查询结合了同一实体的几多个属性,因此,它们倾向于包含星号作为子查询

在这里插入图片描述

在这里插入图片描述

线下处理:

将dataset 转换为邻接矩阵表->

在这里插入图片描述

将实体或者类顶点进行编码->

将这些顶点签名链接起来以形成数据签名图G *->

在这里插入图片描述

2.2 编码Encoding

将每个相邻的边的标签和对应的相邻顶点的标签编码为 位串

1)相邻的边的标签

在这里插入图片描述

how to generate ?

在这里插入图片描述

2)相邻顶点的标签

在这里插入图片描述

在这里插入图片描述

2.3 索引结构和查询算法

在这里插入图片描述

2.3.1 索引结构

how to build a VS-tree?

1)built S-tree

在这里插入图片描述

image-20200915105308340.png

2)built VS-tree

在这里插入图片描述

若S-tree中有两个结点的 孩子结点 间至少存在一条边,

就可以引入一条超级边。若有多条边,这条超级边的bitString 为多条边 进行 或运算的结果

也能够引入一条自己到自己的边,如果该结点的一个孩子

到另外一个孩子之间也存在边

image-20200915152719785.png

image-20200915105942785.png

2.3.2 匹配算法

1)定义:

Q* 在G* 上的 summary matche

1)结点bitString一样

2)对于查询图Q*中的任意一条边,都能在GI中找到一条超级边
在这里插入图片描述

image-20200915131809234.png

作用:用于缩减 查询空间

1)如果在 G1 上找不到一个 摘要匹配 那么Q*在G* 上的匹配就不存在

2)在G1中的一个结点 是 某个顶点标签 ui的祖先,那么就一定会形成 一个 Q*在G* 上 摘要匹配

在这里插入图片描述

在这里插入图片描述

Valid child state

​ 1)是孩子结点

​ 2)是Q* 的一个摘要匹配

image-20200915103739781.png

2)算法细节

  1. 在查询图Q* 3 里找到他的 summary matches在这里插入图片描述
    ,将这个summary matches 入队 H

  2. 每次从队列H中取一个summary matche,求他的child stateimage-20200915133122857.png
    在这里插入图片描述

3)从这些子状态中过滤掉没有用的,找到 valid child state

可以达到一个 缩减 查询空间的效果

4)重复以上过程,直到到达叶子结点

5)最后在叶子结点上进行 匹配
在这里插入图片描述

image-20200915103241590.png

©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页