论文注解《Query Languages for Graph Databases》graph数据库查询语法(I)

本文主要是介绍论文注解《Query Languages for Graph Databases》graph数据库查询语法(I),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

概述

这篇paper主要介绍了历史上的graph数据库查询语法的发展和用途,并从查询处理的表达能力和计算复杂性做出评估

简介

  • 对于一个graph数据库 G 最简单的形式为 (V,E) ,其中 V 是有限点集,E 是连接点对的有限边集(有向|无向)。在大多数的应用场景中点和边往往以某种形式被打上标签(例如 属性-值),且用字符 表示打标签的过程,即 EV××V 。有些应用环境则需要更精巧的graph化的数据结构,例如用于对超文本建模的超图,它的节点就可以由图构成。除此之外,在一些graph数据模型中,每个graph均需要对应特定的架构( schema )。
    Figure 1... 简单的图模型
  • paper中用一张图来表示阐释这种模式,举个查询的例子:找出同时获得 Booker Nobel 奖的作者——一种简单的联合查询 CQ ,可利用以下语法来表示该次查询
    ans(x)(x,hasWon,Nobel),(x,hasWon,Booker)......(1)
    其中 x 代表节点,hasWonNobelBooker代表常量。这种语法类似于 Datalog ,但是查询主体中的元素不包含谓词。实际上这些元素更像是三元组( triple patterns 被用于 SPARQL )或 W3C 查询语言( RDF
  • 为了在graph中找出点对 x,y 表示存在一条从 x y的路径 P=ea,eb,ec,... 且序列 labela,labelb,labelc,... 符合某种模式。一种做法是用正则表达式指定该模式,这种查询被称作 RPQ 。例如
    (x,(citizenOf|((bornIn|livesIn)locatedIn)),y)
    CQ RPQ 可以组合成一种新的形式 CRPQ ,例如
    ans(x,y)(x,hasWon,Nobel),(x,hasWon,Booker)(x,(citizenOf|((bornIn|livesIn)locatedIn)),y)......(2)
    GraphLog 中的表示形式如下
    Figure 2... Query to find places related to authors who have won both the Nobel and Booker prizes.
    图中较粗的边被称作 distinguished edge ,代表出现在结果中的边,需要与查询头部相对应
  • 当需要表示路径之间的关系时, CRPQ 就显得不够强大,因此需要一种新的查询语法 ECRPQ 。例如
    (x,y)(Coetzee,π,y),(x,π,y),Σ(π)
    找出实体 x y,两者间路径上标签的序列等同于 Coetzee y 之间。π代表可行的路径, Σ 代表标签的序列。

查询语言功能

子图匹配

  • 子图查询是被最广泛支持的一种图查询模式。以 CQ 为例,设可用点集为 (x,y,z,...) ,则查询语句的形式可以是
    ans(z1,...,zn)1im(xi,ai,yi)
    x¯=(x1,x2,...xm) y¯=(y1,y2,...ym) z¯=(z1,z2,...zn) ,需要指定 x¯ y¯ G=V,E) 点集的映射关系 σ (G,σ)Q ,使 (σ(xi),ai,σ(yi))E 。在某些应用领域,数据库本身就是由graph的集合组成,其查询结果需要返回匹配的子集。
  • 尽管 CQ 在某种意义上是最简单的graph查询模式,但是研究难点在于找到一种有效的方式去评估其在大规模graph查询中的表现。因为针对 CQ 计算 QEP 的复杂度等同于子图同构问题(NP问题)。因此,业内正在研究基于graph模拟的graph模式匹配。

发现路径所连的节点

  • G=(V,E) v0v1V v0v1 之间存在一条路径 ρ=v0a0v1a1v2a2...vm1am1vm ,路径上标签的序列为 λ(ρ)=a0...am1Σ

正则路径查询( RPQ

  • 计算和决定节点间的可达性这种查询机制存在于绝大部分graph查询语言中。 RPQ 通常返回与一条路径相连的所有符合正则表达式的点对集合。其形式为
    ans(x,y)(x,r,y)......(3)
    x y为可用的节点, r 为正则表达式(用|表示析取, 表示,并保留简写r+(rr)r?(r|ϵ)Σ(a1|...|an)a任何标记为 a 的反向边)。
  • 正则路径查询的难点在于针对给出的查询Q和点对 (x,y) ,如何判断 (x,y)Q(G)? 有一种算法如下:
    1. 构造一个非确定性的有穷自动机( NFA ) Mr (初始状态 s0 终止状态 s1 )来接收 L(r)
    2. G 视作一个拥有初始状态x终止状态 y NFA
    3. 构建自动机的乘积 Mr×G
    4. 判断在 Mr×G 是否存在从 (s0,x) (sf,y) 的路径
  • 算法中的每个步骤是PTIME的复杂度,因此正则路径查询问题的总体复杂度是 PTIME
  • 或者,我们可以按照 Datalog 的规则把 Q 转化为一组集合,例如正则表达式citizenOf|((bornIn|livesIn)locatedIn)可转化为
    ans(x,y)citizenOf(x,y)
    ans(x,y)assoc(x,y)
    ans(x,y)assoc(x,z),partOf(z,y)
    assoc(x,y)bornIn(x,y)
    assoc(x,y)livesIn(x,y)
    partOf(x,x)locatedIn(x,x)
    partOf(x,y)locatedIn(x,z),partOf(z,y)
  • 有时我们可能仅仅想在 G 中找出的匹配正则表达式r的简单路径(当一条路径 ρ 中没有重复的节点时则将其定义为简单路径)。所以正则简单路径问题可以被阐明为:给定G、点对 (x,y) 和正则表达式 r ,判断是否存在一条从x y 且匹配r的简单路径。然而,这个问题居然tm的是个 NP 问题,即使对于固定的正则表达式。

这篇关于论文注解《Query Languages for Graph Databases》graph数据库查询语法(I)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/623849

相关文章

MyBatis-Plus通用中等、大量数据分批查询和处理方法

《MyBatis-Plus通用中等、大量数据分批查询和处理方法》文章介绍MyBatis-Plus分页查询处理,通过函数式接口与Lambda表达式实现通用逻辑,方法抽象但功能强大,建议扩展分批处理及流式... 目录函数式接口获取分页数据接口数据处理接口通用逻辑工具类使用方法简单查询自定义查询方法总结函数式接口

MySql基本查询之表的增删查改+聚合函数案例详解

《MySql基本查询之表的增删查改+聚合函数案例详解》本文详解SQL的CURD操作INSERT用于数据插入(单行/多行及冲突处理),SELECT实现数据检索(列选择、条件过滤、排序分页),UPDATE... 目录一、Create1.1 单行数据 + 全列插入1.2 多行数据 + 指定列插入1.3 插入否则更

SQL server数据库如何下载和安装

《SQLserver数据库如何下载和安装》本文指导如何下载安装SQLServer2022评估版及SSMS工具,涵盖安装配置、连接字符串设置、C#连接数据库方法和安全注意事项,如混合验证、参数化查... 目录第一步:打开官网下载对应文件第二步:程序安装配置第三部:安装工具SQL Server Manageme

C#连接SQL server数据库命令的基本步骤

《C#连接SQLserver数据库命令的基本步骤》文章讲解了连接SQLServer数据库的步骤,包括引入命名空间、构建连接字符串、使用SqlConnection和SqlCommand执行SQL操作,... 目录建议配合使用:如何下载和安装SQL server数据库-CSDN博客1. 引入必要的命名空间2.

MySQL 多列 IN 查询之语法、性能与实战技巧(最新整理)

《MySQL多列IN查询之语法、性能与实战技巧(最新整理)》本文详解MySQL多列IN查询,对比传统OR写法,强调其简洁高效,适合批量匹配复合键,通过联合索引、分批次优化提升性能,兼容多种数据库... 目录一、基础语法:多列 IN 的两种写法1. 直接值列表2. 子查询二、对比传统 OR 的写法三、性能分析

Java通过驱动包(jar包)连接MySQL数据库的步骤总结及验证方式

《Java通过驱动包(jar包)连接MySQL数据库的步骤总结及验证方式》本文详细介绍如何使用Java通过JDBC连接MySQL数据库,包括下载驱动、配置Eclipse环境、检测数据库连接等关键步骤,... 目录一、下载驱动包二、放jar包三、检测数据库连接JavaJava 如何使用 JDBC 连接 mys

从入门到精通MySQL联合查询

《从入门到精通MySQL联合查询》:本文主要介绍从入门到精通MySQL联合查询,本文通过实例代码给大家介绍的非常详细,需要的朋友可以参考下... 目录摘要1. 多表联合查询时mysql内部原理2. 内连接3. 外连接4. 自连接5. 子查询6. 合并查询7. 插入查询结果摘要前面我们学习了数据库设计时要满

MySQL查询JSON数组字段包含特定字符串的方法

《MySQL查询JSON数组字段包含特定字符串的方法》在MySQL数据库中,当某个字段存储的是JSON数组,需要查询数组中包含特定字符串的记录时传统的LIKE语句无法直接使用,下面小编就为大家介绍两种... 目录问题背景解决方案对比1. 精确匹配方案(推荐)2. 模糊匹配方案参数化查询示例使用场景建议性能优

mysql表操作与查询功能详解

《mysql表操作与查询功能详解》本文系统讲解MySQL表操作与查询,涵盖创建、修改、复制表语法,基本查询结构及WHERE、GROUPBY等子句,本文结合实例代码给大家介绍的非常详细,感兴趣的朋友跟随... 目录01.表的操作1.1表操作概览1.2创建表1.3修改表1.4复制表02.基本查询操作2.1 SE

MySQL数据库中ENUM的用法是什么详解

《MySQL数据库中ENUM的用法是什么详解》ENUM是一个字符串对象,用于指定一组预定义的值,并可在创建表时使用,下面:本文主要介绍MySQL数据库中ENUM的用法是什么的相关资料,文中通过代码... 目录mysql 中 ENUM 的用法一、ENUM 的定义与语法二、ENUM 的特点三、ENUM 的用法1