BT

如何利用碎片时间提升技术认知与能力? 点击获取答案

Gremlin,一门操作图表的语言

| 作者 Abel Avram 关注 10 他的粉丝 ,译者 马国耀 关注 1 他的粉丝 发布于 2010年1月19日. 估计阅读时间: 6 分钟 | QCon上海2018 关注大数据平台技术选型、搭建、系统迁移和优化的经验。

Gremlin 是操作图表的一个非常有用的图灵完备的编程语言。它是一种Java DSL语言,对图表进行查询、分析和操作时使用了大量的XPath。

Gremlin可用于创建多关系图表。因为图表、顶点和边的元素含有由键值对定义的属性,所以图表被称之为属性图表,以下是一个示例:

graph1

它包含以下类型:

  • 图表:图表是由一组顶点和一组边构成的。
  • 顶点:顶点由一组出边(从顶点指出的边),入边(指向顶点的边),和属性表组成。
  • :边由出点,入点和属性表组成。
  • 布尔型:布尔型有true和false。
  • 数字型:数字型可以是整数(integer)也可以是实数(double)。
  • 字符型:字符型是字符串数组。
  • 列表型:列表是一个有序可重复的对象集合。
  • map型:map是一个从一组键值对象到一组值对象的关联数组

除了XPath的数学计算(加,减,乘)之外,Gremlin还提供了很多语句,如If/Else,While,Repeat,Foreach以及其他。

Gremlin可用于任何实现了通用图表模型(General Graph Model)的框架。该模型包括一系列组件(如图、元素、顶点、边和索引)以及相应的Java接口,欲使用Gremlin结构来操作图片,则需要实现这些接口。

使用Gremlin操作图片的一个例子存在于MongoDB文档中。另一个是与资源描述框架(Resource Description Framework)存储一起用于OpenRDF, AllegroGraph, Open Virtuoso 或者 Neo4j等图数据库中。将来,Gremlin团队将有意添加对CouchDB和Terracotta的支持。

示例

要理解JSON编码的图片,你就需要使用以下模式(schema)来描述顶点和边。

object {
   string "_id";
   array { string } inEdges;
   array { string } outEdges;
   object { }* properties;
 };
object {
   string "_id";
   string label;
   string inVertex;
   string outVertex;
   object { }* properties;
 };

然后,上述图片在用JSON编码后如下所示:

//// VERTEX COLLECTION ////
  {
   _id: "1",
    properties: {
      name : "marko",
      age : 29    },
    outEdges : ["7","8","9"]
  }
  {
   _id: "2",
    properties: {
      name : "vadas",
      age : 27
    },
    inEdges : ["7"]
    }   ... [section skipped for brevity]
    //// EDGE COLLECTION ////
  {
   _id: "12",
    label: "created",
    properties: {      weight : 0.2    },
    outVertex : "6",
    inVertex : "3"
  }

该数据存储到MongoDB时,数据库将创建两个集合,一个顶点集合,一个边集合,Gremlin允许你通过通用图表模型接口操作这些集合,如添加/删除顶点或边,获取顶点或边的集合,获取/设置顶点或边的属性,通过查找顶点所关联的边或者查找边所关联的顶点在图片上导航。

向一个图片添加两个顶点并将它们通过边连接起来的动作称之为“related_to”,它是这么实现的:

 gremlin> $v := g:add-v($g) ==>v[0]
 gremlin> $u := g:add-v($g) ==>v[1]
 gremlin> $e := g:add-e($g, $v, 'related_to', $u) ==>e[2][0-related_to->1]

在电脑芯片设计,生物学,网络学等方面有相当多的图表应用。一个简单的例子是创建这样一个图,顶点表示网站中的网页,而边表示页面指向另一个页面的链接。在Gremlin中你可以对这样的页面图表进行更改和编辑其属性。

资源: TinkerGraph ——通用图表模型的参考实现,Gremlin 文档Gremlin用户组.


查看英文原文:Gremlin, a Language for Working with Graphs

评价本文

专业度
风格

您好,朋友!

您需要 注册一个InfoQ账号 或者 才能进行评论。在您完成注册后还需要进行一些设置。

获得来自InfoQ的更多体验。

告诉我们您的想法

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

Graph是否应译成“图”?“图表”这个词汇是“Chart” by zhou xinyu

RT

不错不错 by xing xing

看到一些有新意的东西了
另外,从文章上来理解,似乎国内的确是翻译成图的

Re: Graph是否应译成“图”?“图表”这个词汇是“Chart” by Jerome Jia

支持。看标题我也以为是用来生成类似柱状图、饼状图的语言了。

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

3 讨论

登陆InfoQ,与你最关心的话题互动。


找回密码....

Follow

关注你最喜爱的话题和作者

快速浏览网站内你所感兴趣话题的精选内容。

Like

内容自由定制

选择想要阅读的主题和喜爱的作者定制自己的新闻源。

Notifications

获取更新

设置通知机制以获取内容更新对您而言是否重要

BT