图计算101:图计算的类型、语言与系统

本文是图计算 101 系列的第二篇文章,将繁杂的图计算任务根据其计算模式的特性进行分类,并对每一类的图计算任务进行简要的介绍。

背景

现实生活中的很多数据都可以建模成图(Graph)这一抽象的结构。这种高效紧凑的数据形式可以表示出拓扑、属性、时序等丰富的信息,而图计算的目标就是从图结构中挖掘出有价值的知识或规律,例如频繁模式、因果关系等。随着信息时代的到来,数据规模呈爆炸式增长,产生了对大规模的图数据进行高效处理的需求,图计算已经成为了工业界和学术界的热点话题,并因此诞生了一系列的图计算系统及优化研究工作。

复杂的业务场景,致使图数据的计算类型也是多种多样的。目前,存在着三种最主要的图计算类型,分别是图查询、图分析和图学习,下面我们就逐一地进行介绍。

图查询

通常来说,图数据非常庞大,而图数据的交互式查询只关心其中满足条件的比较少量的点和边。如下图所示,这些点和边会形成特定的路径,或者子图模式。例如,从一个地方到另一个地方的最优路线,或者物流的路径信息,都是典型的路径查询场景。子图模式是另一种类型的图查询,它用子图表示某种模式,然后用这个子图在全图中进行匹配查询。

路径查询(右)和子图查询(左)

路径查询的本质是图的遍历,通常按照如下的步骤进行:首先将图上特定的顶点设为待查点;然后每个待查点通过自己所连接的满足条件的边找到目标端点集合,检查目标端点是否满足查询目标;如果满足则将该目标端点放入结果集,否则将该目标端点设置为新的待查点。一直重复这样的步骤,直到没有待查点。简单来说,就是在图查询的整个过程中,按照用户指定的条件,一步一步在图上游走遍历,并最终获得想要的结果。

另一种类型的图查询,即子图查询,其理论基础是子图同构。用户需要给定待查询的子图(点、边以及它们所要满足的条件),然后从数据图上查找所有满足条件的结果,使得:每个结果是数据图上的子图;该子图和查询图是同构的;且该子图所映射的点和边满足查询图上对应点和边的查询条件。简单来说,就是在大图中去寻找用户关心的某种特定结构。

图查询最典型的两大主流语言,分别是 GremlinCypher。Gremlin 基于 Groovy,但有许多语言变体,允许开发者以 Java、Python 等编程语言原生编写查询。它既包含命令式也包含声明式的语义,能方便表达图遍历的逻辑,所以被众多图数据库系统采用,例如 JanusGraph、InfiniteGraph、Cosmos DB、DataStax Enterprise(5.0+)、Amazon Neptune 等。另一种图查询语言 Cypher 则采用了基于描述式的模式匹配。因为与 SQL 类似,具有语法简单和灵活性高的特点,因此被 neo4j、RedisGraph、AgensGraph 等系

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值