写点什么

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:404413
用户头像

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

关注

评论

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

vivo 商城前端架构升级—前后端分离篇

vivo互联网技术

Java 大前端 前后端分离

算法分析关键

Geek_0b8195

算法和数据结构

mongodb 源码实现、调优、最佳实践系列-百万级代码量mongodb内核源码阅读经验分享

杨亚洲腾讯科技

MySQL mongodb 源码 中间件 分布式数据库mongodb

架构师必备的那些分布式事务解决方案!!

架构师修行之路

分布式 微服务 架构设计

Linux的上手命令

Linux 常用命令

二十、深入Python迭代器和生成器

刘润森

Python

架构必修:领域边界划分方法--职责驱动设计(RDD)

马迪奥

架构 领域 架构师 RDD

游戏数值策划之常用excel函数

吴优秀同学

Excel 游戏

分布式下,我想要一致性

架构师修行之路

分布式 微服务

Flink窗口算子-6-8

小知识点

scala 大数据 flink

解析 CloudQuery 审计分析功能

BinTools图尔兹

数据库 sql 安全 工具软件

typora增强-mac

老菜鸟

Typora

1分钟带你入门 React 公共逻辑抽离HOC...

Leo

大前端 React Hooks HOC Render Props

第四周作业

dll

架构训练营学习笔记之五技术选型(一)

于成龙

架构训练营

深入java week1-01 字节码、内存、GC、调试工具

闷骚程序员

Go语言内存管理三部曲(三)图解GC算法和垃圾回收原理

网管

内存管理 垃圾回收 GC GC算法 Go 语言

架构师训练营 1 期 -- 第五周作业

曾彪彪

极客大学架构师训练营

万物互联的IoT时代,柔性电子会大行其道吗?

脑极体

一个草根的日常杂碎(10月20日)

刘新吾

随笔杂谈 生活记录 社会百态

【线上排查实战】AOP切面执行顺序你真的了解吗

Zhendong

spring aop

聊聊技术人员如何学习成长

架构精进之路

职业成长

一个草根的日常杂碎(10月18日)

刘新吾

随笔杂谈 生活记录 社会百态

央行数字货币离我们还有多远?

CECBC

数字货币

甲方日常 35

句子

工作 随笔杂谈 日常

年纪轻轻怎么就卵巢早衰了?试管可帮忙!

Geek_65d32f

试管 三代试管

一个草根的日常杂碎(10月19日)

刘新吾

随笔杂谈 生活记录 社会百态

利用区块链等技术,加强对交通运输信用信息的归集共享和分析应用

CECBC

区块链 交通运输

java week1练习

闷骚程序员

数据结构与算法系列之链表操作全集(一)(GO)

书旅

数据结构 数据结构和算法 Go 语言

Nginx 在运维领域中的应用,看这一篇就够了

华章IT

nginx Linux 运维工程师

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