1. TinkerPop
是一个图计算框架,建立在图数据库和图数据引擎之上的“抽象层”,避免应用层对持久层和处理引擎的依赖需要实现以下接口包:
-
The Graph(required)
定义图、顶点(Vertex)、边(Edge)、和属性上的基本操作,主要用于Gremlin OLTP(图数据库)
-
The GraphComputer(Optional)
所有支持OLAP(图系统分析)的图处理器必须支持实现第一条中定义的接口,和一系列并行处理消息传递的接口
也可以只实现第一条中定义的接口并集成现有的图计算引擎(sparkGraphComputer)提供OLAP服务
下图中包括了TinkerPop的几个组成部分:
最上层是Gremlin Server,为用户提供访问图数据的通道,通过脚本可以连接上Gremlin Server
用户在使用Gremlin查询/遍历语言来操作支持Gremlin的图数据库,例如咱们公司睿达关联网络中使用的JanusGraph就是支持Gremlin的图数据库。Gremlin语言也支持Cypher语法
再下层中,表示TinkerPop提供的用于表示属性图的核心API,包括:图、顶点和边的各种操作接口
Graph Computer是TinkPop中的图计算框架,于Spark、Giraph、Hadoop等大数据平台配合并且通过调用JanusGraph提供的OLAP I/O接口实现图分析和处理能力。
JanusGraph等图数据库通过Provider API来对接TinkPop框架,定制所需要的功能。
2. Gremlin图数据库查询语言
当数据系统支持TinkerPop时,可以将数据建模成图并且用Gremlin进行遍历分析。
Gremlin(graph traversal language)是一种图数据库的查询语言,主要用于便利顶点和边,每一个遍历由一系列的map-step、filter-step或者sideEffect-step构成,Gremlin-step库由上述三个基本操作拓展出丰富的step集合,可在官方文档中查看,其中每个step对数据流进行原子操作。
Gremlin秉持“一次编写,随处运行”的设计理念,所有支持TinkerPop的图系统都可以执行Gremlin遍历语句,每个Gremlin遍历语句都可以考虑作为OLTP或OLAP执行。这种普适性是由GTM(Gremlin traversal machine)实现的,GTM是一个分布式、基于图的虚拟机,它协调多机图遍历的执行,使得Gremlin的用户不需要掌握底层的数据库查询语言和特定领域的大数据分析语言(如Spark DSL、MapReduce等)就能对图进行分析。
2.1 Gremlin在JanusGraph中的使用
JanusGraph的官方文档是这样描述的:
Gremlin是JanusGraph的 用于从图中检索数据和修改图中数据的查询语言。 Gremlin是一种面向路径的语言,它简洁地表达了复杂的 图遍历和变异操作。Gremlin是一个功能 语言,由此 遍历运算符被链接在一起以形成类似路径的表达式。 例如,“从赫拉克勒斯,遍历到他的父亲,然后他的 父亲的父亲并返回祖父的名字。“
Graph of the Gods数据集
Gremlin查询是从左到右计算的操作/函数链。下面提供了一个简单的祖父查询 Getting Started中讨论的Graph of the Gods数据集。
gremlin> g.V().has('name', 'hercules').out('father').out('father').values('name') ==>saturn
上面的查询可以阅读:
-
g
:用于当前图遍历。 -
V
:对于图中的所有顶点 -
has('name', 'hercules')
:过滤顶点到名称属性为“hercules”的顶点(只有一个)。 -
out('father')
:从Hercules穿过传出的父亲边缘。 -
out('father')
:从Hercules的父顶点遍历传出父边(即.jupiter)。 -
name
:获取“Hercules”顶点的祖父的name属性。
3. Cypher图数据库查询语言
是Neo4j提出的一种图数据库查询语言,是一种声明式的图数据库查询语言,他启发与SQL语言,用于使用 ASCII-Art 语法描述图中的可视模式。