【ArchSummit】如何通过AIOps推动可量化的业务价值增长和效率提升?>>> 了解详情
写点什么

Gremlin,一门操作图表的语言

  • 2010-01-17
  • 本文字数:1344 字

    阅读完需:约 4 分钟

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

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

它包含以下类型:

  • 图表:图表是由一组顶点和一组边构成的。
  • 顶点:顶点由一组出边(从顶点指出的边),入边(指向顶点的边),和属性表组成。
  • :边由出点,入点和属性表组成。
  • 布尔型:布尔型有 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

公众号推荐:

跳进 AI 的奇妙世界,一起探索未来工作的新风貌!想要深入了解 AI 如何成为产业创新的新引擎?好奇哪些城市正成为 AI 人才的新磁场?《中国生成式 AI 开发者洞察 2024》由 InfoQ 研究中心精心打造,为你深度解锁生成式 AI 领域的最新开发者动态。无论你是资深研发者,还是对生成式 AI 充满好奇的新手,这份报告都是你不可错过的知识宝典。欢迎大家扫码关注「AI前线」公众号,回复「开发者洞察」领取。

2010-01-17 23:403847
用户头像

发布了 184 篇内容, 共 76.8 次阅读, 收获喜欢 7 次。

关注

评论

发布
暂无评论
发现更多内容

职场浅谈三则

姬翔

9月日更

【布道API】关于 API 分页

devpoint

API REST API 9月日更

区块链赋能供应链金融风险管控探析

CECBC

模块七作业:王者荣耀商城异地多活架构设计

Felix

这个 TCP 问题你得懂:Cannot assign requested address

AlwaysBeta

Linux TCP TCP/IP Linux内核 TCP协议

女科学家流失之殇

脑极体

13. AlphaGO带给人类的启示到底是什么

数据与智能

人工智能

架构实战营 1 期模块 7 作业——业务异地多活架构

tt

架构实战营

Java设计模式如何优雅的使用本地缓存?

张音乐

Java 缓存 9月日更

linux之ssh命令

入门小站

Linux

FontAwesome图标大全

入门小站

工具

国家发改委:利用区块链等新技术开展绿色电力交易试点

CECBC

架构学习模块二

George

Redis集群docker部署

非晓为骁

redis Docker redis集群

TLS协议分析 (七) 安全性分析

OpenIM

谈 C++17 里的 FlyWeight 模式

hedzr

c++ 设计模式 Design Patterns 享元模式 flyweight

阿里P8整理出SQL笔记:收获不止SOL优化抓住SQL的本质,带你领略SQL的世界!

Java MySQL 架构 面试 架构师

网络攻防学习笔记 Day129

穿过生命散发芬芳

日志分析 9月日更

如何让项目准时上线?

石云升

项目管理 管理 引航计划 内容合集 9月日更

【架构设计模块七】:王者荣耀商城异地多活架构设计

Ryoma

网红郭老师遭全平台账号封禁,违背公序良俗的网红该被封杀

石头IT视角

去中心化身份务实

CECBC

【网络安全】记一次挖洞的日常

网络安全学海

网络安全 信息安全 渗透测试 WEB安全 安全漏洞

JS完美收官之——作用域

法医

9月日更

Navicat Premium 查询 x 列时不显示

玄兴梦影

MySQL navicat select

阿里内部流传的JDK源码剖析手册!GitHub已获上千万的访问量

Java 编程 架构 jdk 面试

模块七课后作业

NewBranSTONE

#架构实战营

我在 InfoQ 创作的思路规划

baiyutang

写作技巧 9月日更

pyhanlp 添加自定义词典(qbit)

qbit

Python nlp 分词

推荐三个实用的 Go 开发工具

AlwaysBeta

Go 语言

Kubernetes踩坑问题集

玏佾

Kubernetes k8s k8s文档

Gremlin,一门操作图表的语言_Java_Abel Avram_InfoQ精选文章