Data+AI时代,如何打造下一代数智平台? 了解详情
写点什么

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

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

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

关注

评论

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

GIS数据漫谈(五)— 地理坐标系统

ThingJS数字孪生引擎

Redis网红高频面试题三连:缓存穿透?缓存击穿?缓存雪崩?

程序员啊叶

Java 编程 程序员 架构 java面试

【微信小程序】项目实战—抽签应用

flow

签约计划第三季

面试好难啊!蚂蚁金服的六轮面试我是强撑过来!差点OUT(面试复盘)

程序知音

Java 阿里 程序员面试 BAT面试题 八股文

技术实践干货 | 从工作流到工作流

观远数据

工作流 workflow

浅谈AI深度学习的模型训练和推理

GVision

建木持续集成平台v2.5.2发布

Jianmu

持续集成 低代码 CI/CD gitops

纯css实现:文字可换行的下划线、波浪线等效果

南极一块修炼千年的大冰块

7月月更

选择体育场馆的LED显示屏时应该注重哪些方面

Dylan

LED显示屏 户外LED显示屏 led显示屏厂家

美团到餐“祖传数仓”标准化治理笔记

老猎人

搞定RocketMQ这二十三点,大厂面试稳了

王小凡

Java 数据库 程序员 面试 大厂面试

2022备战秋招10W字面试小抄pdf版,附操作系统、计算机网络面试题

程序员啊叶

Java 编程 程序员 架构 java面试

「行话」| 汽车软件如何高效交付?我们总结了这三个关键点

极狐GitLab

git DevOps gitlab DevSecOps 汽车

2022年金三银四Java面试宝典,横扫春招+社招+秋招

程序员啊叶

Java 编程 程序员 架构 java面试

企业运维安全就用行云管家堡垒机!

行云管家

网络安全 运维安全 运维堡垒机 企业数据安全

人工智能发展到什么阶段了,产生“自主情感”可能吗?

燕陈华

人工智能 深度学习 卷积神经网络

C语言怎么学?这篇文章给你完整答案

图灵教育

C语言

美团二面:为什么Redis会有哨兵?

王小凡

Java redis 编程 程序员 开发

技术分享| 快对讲综合调度系统

anyRTC开发者

音视频 指挥调度 快对讲 语音对讲 视频对讲

收藏!0 基础开源数据可视化平台 FlyFish 大屏开发指南

云智慧AIOps社区

大前端 低代码 开源项目 数据可视化工具 开源推荐

施耐德电气、欧莱雅等企业巨头如何开放式创新?DEMO WORLD世界创新峰会揭秘

创业邦

Spring Cloud 架构

Damon

7月月更

兆骑科创海内外引进高层次人才,创新创业项目对接

兆骑科创凤阁

x-sheet 开发教程:初始化配置自定义布局

OpenHacker

Excel x-sheet sheet spreadsheet

详解分布式系统的幂等

焱融科技

分布式系统 存储 文件存储 幂等性

写好技术原创文章的一点建议

Qunar技术沙龙

技术文章

细数国产接口协作平台的六把武器!

Liam

开发 Postman API 接口开发 前后端协作

从存储角度看自动驾驶必经之路

焱融科技

人工智能 自动驾驶 存储 文件存储 分布式文件存储

怎么会不喜欢呢,CI/CD中轻松发送邮件

Jianmu

持续集成 低代码 邮件 通知

1000个字带你一次性搞懂JavaAgent技术,反正我是彻底服了

程序员啊叶

Java 编程 程序员 架构 java面试

云管平台中租户以及多租户概念简单说明

行云管家

云计算 云管平台

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