找回密码
 立即注册
查看: 229|回复: 0

3. TinkerPop简介

[复制链接]
发表于 2022-8-9 14:18 | 显示全部楼层 |阅读模式
1. TinkerPop简介

本章主要介绍TinkerPop图计算框架整体结构与基本的实现技术;介绍了TinkerGraph、Gremlin Server、Gremlin Console;重点介绍了Gremlin遍历语言的的一些核心概念、单步。TinkerPopo官方地址:
Apache TinkerPop https://tinkerpop.apache.org/download.html
1.1. TinkerPop

l    TinkerPop是一种开源图计算框架,既可用于联机事务处理(OLTP),又可用于联机分析处理系统(OLAP)。它可以用于处理单一机器以及分布式环境的庞大数据。
l 该项目专注于为图数据库建立行业标准,包括一种名为Gremlin的标准查询语言。与此同时,Gremlin遍历机器旨在跨语言工作。
l TinkerPop是Apache软件基金会旗下的一个顶级开源项目。
1.1.1.   
整体结构




l 从官方文档的介绍可以了解到要想具备图数据库的基本功能,需要实现Core API,如果想要具备OLAP的功能需要实现Graph Computer的所有接口。
l Provider Strategies是一类优化的策略,可以应用在正式的图查询过程前,主要是对图查询的步骤进行优化。允许底层图系统在执行Gremlin查询时对其进行性能上的优化(如:多种索引查询, 特定算法优化, 遍历步骤重排)
l Gremlin Traversal Language是图查询语言,通常称为gremlin,以查询顶点为例,语法如下形式:
v = g.addV().property('name','marko').property('name','marko a. rodriguez').next()
l Gremlin Server是TinkerPop的服务器,它的作用是处理图数据库客户端发送过来的网络请求,解析gremlin查询语句,并对解析出来的每个step进行处理,得到查询结果。
不难看出, 图系统引入TinkerPop的机制和原理:
l 最主要的是实现最后一层(Provider API) , 一旦最后一层最小实现了, 它就自动的实现了上层的大部分功能,
l 最次要的是顶层的命令行/HTTP访问口.
TinkerPop的源码结构大致有如下7个模块:
1.gremlin-console(第一层)
访问gremlin.sh的时候显示的控制台交互逻辑, 基本是groovy实现的。
2. gremlin-groovy(第二层)
实现Gremlin的代码, 以及在gremlin中支持groovy/其它DSL的写法, 可定制策略, 内容很杂很多。
3. gremlin-core (第三层)
定义图模型结构 , OLTP和OLAP接口。
l 图的数据结(Vertex,VertexProperty,Edge,Property,Element,Transaction)。实现了以上所有的接口的图系统, 我们就可以说它实现了图的OLTP, 比如ugeGraph/JanusGraph/TinkerGraph。而实现后就可以使用Gremlin语法。
l 数据的导入和导出
l 特殊功能的图实现 (比如做缓存图)
l 图的OLAP也需要单独实现, 比如和spark的结合已有的graphX或Giraph。
4. spark-gremlin(OLAP) (第三层)
是一个tinkerpop基于spark的OLAP实现, 还有hadoop-gremlin。
5. giraph-gremlin(OLAP) (第三层)
Giraph 源自Google在2010年发表的Pregel计算框架, 是它的开源版本,运行在hadoop之上,是一种仅有Map的MR作业。是类似GraphX/GraphLab的图计算框架。
6. tinkergraph-gremlin (推荐)
TinkerPop自带的内存图数据库, 带有OLAP+OLTP 的最简实现 ,上手测试用,是TinkerPop框架的参考实现。具体图数据库提供商实现可以看看,毕竟小巧。
7.benchmark和driver
跑性能测试,和各种连接语言所用的数据库驱动测试之类。
1.1.2. 图计算=图结构+图处理



图计算包括图结构(Structure)和图处理/过程(Process)两部分,图结构就是图的数据结构,有顶点、边、属性等。图过程就是分析图结构的手段,通常用称为遍历(traversal)。
一个图是顶点(节点,点)和边缘(弧,线)组成的数据结构。当在计算机中为图建模并将其应用于现代数据集和实践时,通用的面向数学的二进制图已扩展为既支持标签又支持键/值属性。这种结构称为属性图。更正式地说,它是有向的,二进制的,有属性的多图。下面(TinkerPop Modern)是一个示例属性图。


l 与一般的计算类似,图计算在图结构(图)和图处理/过程 (遍历)之间进行区分。图的结构是由顶点/边/属性拓扑定义的数据模型 。图的处理是分析结构的手段。图处理的典型形式称为遍历。
l 图计算的作用是为图提供者和用户提供适当的接口,以在其结构和处理上与图进行交互。当图系统实现TinkerPop结构和处理 API时,其技术被视为支持 TinkerPop,并且与其他任何启用TinkerPop的图形系统几乎没有区别,只是它们各自的时间和空间复杂性不同。
l 一般而言,图结构或图 API(架构图中的Core API)用于实现TinkerPop接口的图提供程序,而处理或遍历 API(即Gremlin)用于使用图形提供程序的图系统的最终用户。
1.1.2.1. TinkerPop 结构 API的主要组件

l Graph:维护一组顶点和边,并访问数据库功能(例如事务)
l Element:维护属性的集合和表示元素类型的字符串标签
l Vertex:扩展Element并维护一组传入和传出边缘
l Edge:扩展Element并维护传入和传出的顶点
l Property:与V值关联的字符串键
l VertexProperty:与V值以及Property属性集合关联的字符串键(仅顶点)
1.1.2.2. TinkerPop 过程 API的主要组件

l TraversalSource:针对特定图形,领域特定语言(DSL)和执行引擎的遍历生成器
l Traversal:一个功能数据流过程,将类型的起始S对象转换为类型的终止E对象
l GraphTraversal:面向原始图的语义(即顶点,边等)的遍历DSL
l GraphComputer:并行处理图形的系统,并有可能分布在多计算机集群上
l VertexProgram:在所有顶点以逻辑并行方式执行的代码,并通过消息传递进行互通
l MapReduce:一种计算,可以并行分析图中的所有顶点,并产生一个简化的结果
1.1.3. 如何使用TinkerPop构建一个图数据库

TinkerPop框架提供了图数据库的基础性功能,其中包括处理网络请求、解析gremlin查询语言、定义图中顶点和边结构的父类、定义Step的执行逻辑等。具体到源码中的neo4j-gremlin、hadoop-gremlin、tinkergraph-gremlin等模块,其作用是用于处理经TinkerPop框架处理后的数据的存储终点问题,neo4j-gremlin、hadoop-gremlin模块用于将数据最终存储在neo4j图数据库和hadoop文件系统中,而tinkergraph-gremlin模块用于将数据存储在内存中。
如果想把经TinkerPop框架处理后的数据存储在不同的中间件上,需要自己在TinkerPop框架基础上实现该功能,当然也可以使用源码中提供的类似neo4j-gremlin等模块。
1.1.3.1. 基本过程

l 首先要定义图的结构。如何定义图的结构呢?如果你是做一个产品的话,直接定义几个类就完事,这些类是跟你的具体实现高度耦合的。但是如果定义为一个标准,那么你只需要相关接口,而所有的操作只争对接口进行编程即可,这有有几个好处:首先,这个接口可以成为图数据领域的标准。其次,接口跟具体的业务分离。
l 具备数据库的功能,能增删改查。如果仅仅只是这些功能的话,图结构的优势就没有发挥出来。它能很清晰的描述对象之间的关系,这点比关系型数据库更具有表达力。那还有没有其他功能呢?有,那就是计算
l 既然有数据库的功能,那么必须具备持久层。你可以用关系型数据库来存储这个点、边和属性,也可以用nosql数据库来存,甚至你可以存在内存中。titan就是用cassandra来做的,tinkergraph是直接用内存。而我们也可以使用Postgre SQL来做。
l 用来增删改查,如何向用户提供?mysql有sql语言及针对java的jdbc驱动。cassandra有cql或hector。那么图数据也要定义一种图数据语言了。tinkerpop团队已经采用了gremlin这个图数据语言,并被多个流行的图数据库支持。慢慢的gremlin很可能就成为标准了。
l 如何来使用图数据库语言呢?比如mysql就有sqladmin这样的命令行交互方式。tinkerpop其实也有,他采用groovy这用交互式的动态语言来进行操作,并能通过交互界面来执行类似g.V().count()这样的图数据语言。
l 可不可以通过其他方式来执行这些图数据语言呢?可以的,tinkerpop为java开发者提供了gremlin-driver,让你可以通过程序的方式来与图数据库进行交流。tinkerpop还提供gremlin-server,能部署rest服务,你可以通过http协议来与其交互。
1.1.3.2. 实现Gremlin的核心

实现Gremlin的核心API主要包含实现OLTP + OLAP两个部分:
l OLTP部分:
l 数据结构 : 最少要实现Graph, Vertex, Edge, 和 Property,Element 这几个接口, 然后进一步如果你实现了VertexProperty ,Index , Transaction 这些接口, 那就可以说实现了完整的Structure API.
l 遍历操作 : TraversalStrategy (遍历策略)的实现, 目的是优化图的具体遍历, 完整实现后称之为Process API
l OLAP部分:
l 数据结构: GraphComputer, Messenger 和Memory 是最少要实现的 (并且OLAP需要OLTP基于实现)
实现过程中的注意事项:
l 首先实现structure包中的接口(数据结构) ,然后实现process 包中的接口(遍历操作)
l 尽量复用Tinkerpop已经提供的各种工具类
l 比如使用ElementHelper , GraphComputerHelper, VertexProgramHelper 这种来进行很多通用的图操作. (封装了大量迭代器和λ)
l 比如使用StringHelper 的toString() 确保输出的一致性. 包括异常输出等
l 如果要实现OLAP, 则ComputerGraph 会充当一个Wrapper 的作用, 确保图计算过程中语义解释合理
l 实现了上面的基础数据结构, 就可以说最快的实现了一个图的OLTP , 此时你就可以使用gremlin和gremlin-server之类的了(这部分是完全不需要你来写代码的), 可以说是非常的简易
但是实际的应用中, 一般数据不会只存在内存中, 最后都需要落地, 如果要用特定的图序列化器, 那么还需要实现一下Graph接口的 的io方法. ( 注意, 这是非必须的)
IO接口 (非必须)
实现自定义序列化方式的第一步就是要实现IoRegistry 接口, 相当于注册并使它生效, 但是有些特定的格式是不允许自定义序列化器的, 也就是说如果XGraph 要支持某些特定数据格式, 就必须符合Tinkerpop 定义, 当然这种情况很少.常用的几种序列化方案:
l Gryo : 有几种可选的方式实现:通过实现Kryo 序列化器, 至于序列化的粒度可以选择实现 Function<Kryo, Serializer>
l GraphSon : 实现Jackson 的 SimpleModule模块就行了
1.1.3.3. 更高级的实现

前面说的是常见的图系统可以选择实现的几个重要模块, TinkerPop还提供了一些其他模块, 可以选择性的实现 :
1. Traversal Strategies(遍历策略): TraversalStrategy用于在执行gremlin之前改变遍历, 比如 g.V().has("name","jim")的语句本来要遍历所有顶点的name属性, 在有属性索引的时候, 就能让它调用索引进行二分查找, 这样时间复杂度就由O(n)转变为O(logn)了, 类似的比如模糊索引, 范围索引都需要指定一些策略, 否则默认都会是全查。
2. Step (步骤): 类似gremlin中的has(),filter(),这些都是一个单独的Step,每条gremlin语句中的step最终都会在TraversalStrategy中调用, 那么如果我想新增一个单独的Step, 比如pagerank(), 那就可以自己实现, 然后注册进Tinkerpop中 ,但是这样最大的缺点就是侵入性很强, 所以Hugegraph 采用了另一种策略, 绕开gremlin实现扩展的API。
1.2. TinkerGraph

TinkerGraph 是一内存中(具有可选持久性)的非事务性图形引擎,提供 OLTP 和 OLAP 功能。它与TinkerPop一起部署,并作为其他图数据库提供商研究的参考实现,以便了解TinkerPop API的各种方法的语义。然而它作为参考实现的地位并不意味着它不适合生产。TinkerGraph在生产应用程序及其开发中有许多实际用例。TinkerGraph用例的一些示例包括:
l 对适合内存的大型不可变图形进行即席分析。
l 将子图从不适合内存的较大图形中提取到 TinkerGraph 中,以便进一步分析或其他目的。
l 使用 TinkerGraph 作为沙盒,通过模拟 TinkerGraph 中较大图形中的数据来开发和调试复杂的遍历。
在Java8中使用TinkerGraph构建一个简单的图形如下:
Graph graph = TinkerGraph.open();
GraphTraversalSource g = graph.traversal();
Vertex marko = g.addV("person").property("name","marko").property("age",29).next();
Vertex lop = g.addV("software").property("name","lop").property("lang","java").next(); g.addE("created").from(marko).to(lop).property("weight",0.6d).iterate();
上面的 Gremlin 创建了两个名为 “marko” 和 “lop” 的顶点,并通过一个具有 weight=0.6 属性的创建边来连接它们。这两个顶点和它们之间的边也可以在单个Gremlin语句中完成,如下所示:
g.addV("person").property("name","marko").property("age",29).as("m"). addV("software").property("name","lop").property("lang","java").as("l"). addE("created").from("m").to("l").property("weight",0.6d).iterate();
查询:
g.V().has("name","marko").out("created").values("name")
注意:
每个图形系统将具有不同的机制来定义索引和模式。TinkerPop不需要在这方面有任何一致性。在TinkerGraph中,唯一的定义是围绕索引。对于其他图形系统,可能需要先验地定义属性值类型、点标签、边标签、索引等才能向图形添加数据。
inkerGraph与Gremlin Server一起分发,因此可以自动用于配置。
1.3. Gremlin

1.3.1. TinkerPop与Gremlin

TinkerPop是一个开源图计算框架(Graph Computing Framework),它主要提供图计算(graph computing)领域一些通用接口和工具。在TinkerPop中,graph computing由graph structure和graph process组成。graph structure也称作graph,graph process也称作traversal(其实是广义的traversal)。graph process可以是OLTP(online transactional process),也可以是OLAP(online analytics process)。TinkerPop中通常提到的traversal其实往往是一种OLTP,或者是狭义的traversal。
TinkerPop只定义了一个框架,graph structure定义了图的结构和数据表示,它是一个基于标签(label)的属性图(property graph),这种图由顶点(vertex)和边(edge)组成,每个顶点和边有且只有一个标签,同时顶点和边可以有0个或多个属性(key/value值对)。但TinkerPop并没有提供graph structure的具体实现,图的顶点和边等结构具体如何存储和访问由graph provider,比如janusgraph、hugegraph等具体实现。graph structure可以说是定义了TinkerPop与graph provider的接口。graph process是对graph的数据的处理,即图遍历(traversal),相当于是TinkerPop与用户之间的接口。Gremlin则是一个图遍历语言(graph traversal language),用户使用Gremlin来对图进行遍历分析。
Gremlin是 Apache TinkerPop 框架下的图遍历语言,支持OLTP与OLAP,是目前图数据库领域主流的查询语言,可类比SQL语言之于关系型数据库。Gremlin是一种函数式数据流语言,可以使得用户使用简洁的方式表述复杂的属性图(property graph)的遍历或查询。每个Gremlin遍历由一系列步骤(可能存在嵌套)组成,每一步都在数据流(data stream)上执行一个原子操作。
Tinker的本来意思是补锅匠,小修理匠,TinkerPop意即很多小匠人的集合,它们组合起来可以处理图领域的各类问题。Gremlin的本意是精灵,可见其在TinkerPop组成成员中的重要性。TinkerPop的官网用了一张图来形象地表示TinkerPop,这个图是一个精灵驾驶着由各种工具组成的机器人。


1.3.2. Gremlin简单介绍

Gremlin是一种图数据库的查询语言。Gremlin与图数据库的关系相当于SQL与关系型数据库的关系。因为对图的常见处理是对图的元素(vertex和edge)进行遍历,所以Gremlin是一种图遍历语言(graph traversal language)。同时Gremlin是一种函数式(functional)、数据流(data-flow)的语言。函数式、流式处理中的数据经过一个个阶段(stage),每一个阶段对数据进行过滤、转换等处理,从而输出最终的数据,跟图处理中根据一些条件选择vertex集合,然后沿着图的edge和vertex进行遍历,得到最终的vertex或edge是非常一致的。从这个角度来讲把Gremlin设计成一个流式语言还是非常合适的。
1.3.2.1. OLTP和OLAP遍历

Gremlin可以同时表述OLTP查询和OLAP查询,Gremlin Traversal Machine会根据Gremlin表达意图,自动确定进行OLTP处理或OLAP处理(多机协同处理),甚至可以在一次遍历中一部分是OLTP,另一部分是OLAP。这样用户无需OLTP使用一种语言,OLAP使用一种语言。
1.3.2.2. 命令式和声明式图遍历语言

命令式(Imperative)和声明式(Declarative)遍历语言是常见的特定领域查询语言。相对与SQL和Cypher这些声明式数据库查询语言,Gremlin既可以写成命令式的,也可以写成声明式的。
比如用命令式表达一次遍历:
g.V().has("name","gremlin").as("a").
out("created").in("created").
where(neq("a")).
in("manages").
groupCount().by("name")
上面同样的功能也可以用声明式表达:
g.V().match(
as("a").has("name","gremlin"),
as("a").out("created").as("b"),
as("b").in("created").as("c"),
as("c").in("manages").as("d"),
where("a",neq("c"))).
select("d").
groupCount().by("name")
1.3.2.3. 与编程语言风格保持一致

与编程语言风格保持一致(Host Language Embedding)。现在很多高级语言都支持流式编程了,而Gremlin也是一种流式语言,这样图查询语言与编程语言风格是一样的,他们之间的转换也变的非常方便。无需像SQL一样,编程人员还需要熟悉一种与编程语言差异极大的语言,Gremlin中甚至包含了所有高级编程语言中都会有的if、if...else...、for、do...while、while等流程控制语句。
1.3.2.4. 遍历相关核心概念

Gremlin中涉及的几个遍历相关的主要概念:
① Traversal:Gremlin对图数据库的一次查询(或者说遍历,或者说数据分析处理)过程叫做Traversal。
② Step:Traversal由一个个step串接组成,step相当于流式处理中的stage的概念。它负责对图数据元素的一次处理步骤,如过滤、映射等。前一级step的输出是后一级step的输入。
③ Traverser:字面意思是遍历者,我习惯称之为遍历器。每一个step都有一个自己的traverser,它其实是step的上下文,包含了step待处理的输入数据,或循环的次数,或其他的一些全局信息。
④ TraversalSource:在traversal中,前一个step的输出是后一个step的输入,那么第一个step的数据来源于哪里?这就是TraversalSource,其实就是图数据库中的数据源(起点),Gremlin一般使用g.V(),g.E()来开始遍历。
1.3.2.5. 结构相关核心概念

Gremlin中涉及的几个模型相关的主要概念:
① Graph: 维护节点&边的集合,提供访问底层数据库功能,如事务功能
② Element: 维护属性集合,和一个字符串label,表明这个element种类
③ Vertex: 继承自Element,维护了一组入度,出度的边集合
④ Edge: 继承自Element,维护一组入度,出度vertex节点集合.
⑤ Property: kv键值对
⑥ VertexProperty: 节点的属性,有一组健值对kv,还有额外的properties 集合。同时也继承自element,必须有自己的id, label.
⑦ Cardinality: [single, list, set] 节点属性对应的value是单值,还是列表,或者set。
1.3.2.6. Gremlin中的step

1.3.2.6.1. 五种基本step

设计之初Gremlin就想类似计算机的指令集一样, 有一个公用的底层步骤库 (30个左右), 目的就是让人能简单的定义遍历, 然后让遍历机接收到指令后,让遍历子去执行这次遍历。Gremlin定义了很多很多的中间step来进行不同的处理,满足不同的需求,但Gremlin的步骤库大致归纳为五种类型:
① map:即流式处理中的map概念。对遍历中的单个对象进行转换 (一对一映射)
② flatMap:即流式处理中的flatmap概念。对遍历中的多个对象进行处理 (N对N映射)
③ filter:即流式处理中的filter概念。对遍历中的对象进行筛选 (过滤)
④ sideEffect:全局信息。这些信息会传给后面的step。对遍历中的对象进行统计 (计算)
⑤ branch:分支处理。输入数据根据不同的条件走不同的遍历路径。
1.3.2.6.2. step modulator

step modulator称之为单步调节器。用来修饰step,指导step如何处理数据。最常见的就是as()和by()了。比如排序order() step, group()没有携带参数,它本身不知道如何进行聚合,需要by() modulator来告诉group()如何聚合。
1.3.2.6.3. 中间step和terminal step

Gremlin作为一个流式语言,自然具备流处理的基本结果。中间step对数据进行转换,terminal step收集结果数据并输出。
1.3.2.7. Gremlin的官方文档

如前所述,Gremlin是一种功能非常强大的图遍历语言,综合了多种模式和应用场景。也许正因为如此,Gremlin也是一种比较复杂的语言,学习曲线相对于SQL、CYPHER这些声明式语言要陡峭些。
相对来说,Gremlin对软件开发人员来说更友好些。但是很多使用图数据库进行数据分析的人员往往并不是开发人员,声明式的语言对他们来说可能更友好些,而且Gremlin的声明式描述方法也没有SQL、CYPHER直观。
Gremlin官方文档是最好的参考资料。官方文档使用的例子数据主要是官网提供的TinkerPop modern数据库。官方文档地址:TinkerPop Documentation (apache.org)。
https://tinkerpop.apache.org/docs/3.4.3/reference
1.3.3. Gremlin 应用程序

Gremlin 应用程序表示在核心 API 之上构建的工具,以帮助在使用图形时向用户公开常见功能。有两个关键应用:
l Gremlin Console - 用于交互式开发和分析的 REPL 环境
l Gremlin Server - 托管Gremlin遍历计算机的服务器,从而实现远程Gremlin执行
1.4. Gremlin Server

Gremlin Server是TinkerPop的服务器,它的作用是处理图数据库客户端发送过来的网络请求,解析gremlin查询语句,并对解析出来的每个step进行处理,得到查询结果。
Gremlin Server 提供了一种针对其中托管的一个或多个 Graph 实例远程执行 Gremlin 的方法。使用Gremlin服务器的好处包括:
l 允许任何启用了 Gremlin 结构的图形(即在 JVM 上实现图形 API)作为独立服务器存在,这反过来又使多个客户端能够与同一图形数据库进行通信。
l 通过远程提交的 Gremlin 启用即席查询的执行。
l 为可能没有Gremlin遍历机器(例如Python,Javascript等)的非JVM语言提供了一种方法,以与JVM上的TinkerPop堆栈进行通信。
l 公开了许多用于扩展和自定义的方法,以包括序列化选项、远程命令等。
默认情况下,与 Gremlin Server 的通信通过 WebSocket 进行,并公开用于与服务器交互的自定义子协议。
Gremlin Server附带了一个名为bin/gremlin-server.sh 的脚本来启动它(在Windows上使用gremlin-server.bat)
$ bin/gremlin-server.sh conf/gremlin-server-modern.yaml
[INFO] GremlinServer
\,,,/
(o o)
-----oOOo-(3)-oOOo-----

[INFO] GremlinServer$1 - Channel started at port 8182.
注意:
Gremlin服务器允许执行远程提交的“脚本”(即客户端发送到服务器的任意代码)。开发人员应该在没有适当预防措施的情况下考虑运行Gremlin服务器所涉及的安全隐患。
1.5. Gremlin Console

Gremlin console控制台是一个交互式终端或 REPL,可用于遍历图形并与它们包含的数据进行交互。它代表了执行即席图形分析,中小型数据加载项目和其他探索性功能的最常用方法。Gremlin控制台具有高度可扩展性,具有丰富的插件系统,允许向用户公开新工具,命令,DSL等。
要启动 Gremlin 控制台,请运行 gremlin.sh 或 gremlin.bat:
$ bin/gremlin.sh
\,,,/
(o o)
-----oOOo-(3)-oOOo-----
plugin loaded: tinkerpop.server
plugin loaded: tinkerpop.utilities
plugin loaded: tinkerpop.tinkergraph
gremlin>
注意:
Gremlin Console中自带了TinkerGraph内存图数据库,可以在Gremlin Console中实践学习Gremlin遍历语言。
1.6. 小结


  • TinkerPop是一个由各种交互组件组成的图计算框架。在      core TinkerPop3 API的基础上就定义了Graph,      Vertex, Edge等等。
  • 图形系统提供者至少必须实现core API。一旦实现,Gremlin遍历语言可用于图形系统的用户。
  • 图服务提供者可以更进一步,具体开发TraversalStrategy允许图系统在运行时检查Gremlin查询并针对其特定实现对其进行优化的优化(例如索引查找、步骤重新排序等优化)。
  • 如果图系统是一个图形处理器(即提供OLAP功能),则系统应该实现Graph      Compute API。这个API定义了 message/traverser 如何在通信工作者(即线程或机器)之间传递。实现之后,对图数据库(OLTP)和图处理器(OLAP)执行相同的Gremlin遍历。
  • Gremlin是一种图数据库的查询语言。Gremlin与图数据库的关系相当于SQL与关系型数据库的关系。因为对图的常见处理是对图的元素(vertex和edge)进行遍历,所以Gremlin是一种图遍历语言(graph traversal      language)。同时Gremlin是一种函数式(functional)、数据流(data-flow)的语言。
  • Gremlin Server可以与支持TinkerPop3的图系统进行通信。Gremlin Server提供了一个可配置的通信接口以及度量和监视功能。
  • Gremlin语言根据Vertex和Edge来解释图——即Gremlin是一种基于图的领域特定语言。用户可以创建自己的领域特定语言来处理高阶结构(如人、公司及其各种关系)的图。
  • Gremlin console控制台是一个交互式终端或      REPL,可用于遍历图形并与它们包含的数据进行交互。它代表了执行即席图形分析,中小型数据加载项目和其他探索性功能的最常用方法。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Unity开发者联盟 ( 粤ICP备20003399号 )

GMT+8, 2024-11-25 09:53 , Processed in 0.091433 second(s), 26 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表