gremlin语言介绍一:前言

1 gremlin与TinkerPop的关系

TinkerPop是一个开源图计算框架(Graph Computing Framework),它主要提供图计算(graph computing)领域一些通用接口和工具。在TinkerPop中,graph computinggraph structuregraph process组成。graph structure也称作graphgraph process也称作traversal(其实是广义的traversal)。graph process可以是OLTPonline transactional process),也可以是OLAPonline analytics process)。TinkerPop中通常提到的traversal其实往往是一种OLTP,或者是狭义的traversal

TinkerPop只定义了一个框架,graph structure定义了图的结构和数据表示,它是一个基于标签(label)的属性图(property graph),这种图由顶点(vertex)和边(edge)组成,每个顶点和边有且只有一个标签,同时顶点和边可以有0个或多个属性(key/value值对)。但TinkerPop并没有提供graph structure的具体实现,图的顶点和边等结构具体如何存储和访问由graph provider,比如janusgraphhugegraph等具体实现。graph structure可以说是定义了TinkerPopgraph provider的接口。graph process是对graph的数据的处理,即图遍历(traversal),相当于是TinkerPop与用户之间的接口。Gremlin则是一个图遍历语言(graph traversal language),用户使用Gremlin来对图进行遍历分析。

Tinker的本来意思是补锅匠,小修理匠,TinkerPop意即很多小匠人的集合,它们组合起来可以处理图领域的各类问题。Gremlin的本意是精灵,可见在TinkerPop组成成员中的重要性。TinkerPop的官网用了一张图来形象地表示TinkerPop,这个图是一个精灵驾驶着由各种工具组成的机器人。

image.png

2 gremlin简单介绍

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

2.1 OLTP和OLAP遍历

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

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")

2.3 与编程语言风格保持一致(Host Language Embedding)

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

2.4 主要概念和组成

Gremlin中涉及的几个主要概念:
Traversal:gremlin对图数据库的一次查询(或者说遍历,或者说数据分析处理)过程叫做Traversal
Step:Traversal由一个个step串接组成,step相当于流式处理中的stage的概念。它负责对图数据元素的一次处理步骤,如过滤、映射等。前一级step的输出是后一级step的输入。
Traverser:字面意思是遍历者。每一个step都有一个自己的traverser,它其实是step的上下文,包含了step待处理的输入数据,或循环的次数,或其他的一些全局信息。
TraversalSource:traversal中,前一个step的输出是后一个step的输入,那么第一个step的数据来源于哪里?这就是TraversalSource,其实就是图数据库中的数据

2.5 gremlin中的step

2.5.1 中间step和terminal step

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

2.5.2 五种基本中间step

gremlin定义了很多很多的中间step来进行不同的处理,满足不同的需求,但中间step可以归纳为五种类型:

  1. map:即流式处理中的map概念
  2. flatmap:即流式处理中的flatmap概念
  3. filter:即流式处理中的filter概念
  4. sideeffect:全局信息。这些信息会传给后面的step
  5. branch:分支。输入数据根据不同的条件走不同的遍历路径。

2.5.3 step modulator

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

3 gremlin的常见参考资料

如前所述,gremlin是一种功能非常强大的图遍历语言,综合了多种模式和应用场景。也许正因为如此,gremlin也是一种比较复杂的语言,学习曲线相对于SQL、CYPHER这些声明式语言要陡峭些。相对来说,gremlin对软件开发人员来说更友好些。但是很多使用图数据库进行数据分析的人员往往并不是开发人员,声明式的语言对他们来说可能更友好些,而且gremlin的声明式描述方法也没有SQL、CYPHER直观。所以这个系列对gremlin进行了一些简单的归纳总结,对常用的一些命令的使用进行了一些说明,希望能让大家尽快入门。本系列使用的例子数据主要是官网提供的TinkerPop modern数据库,例子的命令也大部分是官方文档的例子命令。相信大家熟悉了本系列的命令后,再要了解查询命令时都直接看官方文档了。

官网维护的文档还是非常好的,入门的部分文档连接如下:

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,560评论 4 361
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,104评论 1 291
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,297评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,869评论 0 204
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,275评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,563评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,833评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,543评论 0 197
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,245评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,512评论 2 244
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,011评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,359评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,006评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,062评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,825评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,590评论 2 273
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,501评论 2 268