写点什么

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

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

关注

评论

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

碰到运维难题怎么快速解决?有工具推荐吗?

行云管家

运维 网络运维 IT运维 服务器运维

使用vite创建vue3项目

隔壁的猫

前端 Vite2 vue3.2 3月月更

平衡树:为什么Redis内部实现用跳跃表

华为云开发者联盟

redis 数据结构 集合 跳跃表 平衡树

关于 Nvm

隔壁的猫

node.js 前端 NVM 3月月更

ABAP 常用日期处理

Jasen Ye

Date 日期处理 abap

【Zeekr_Tech】软件定义汽车之SOME/IP介绍

Zeekr_Tech

中间件 软件架构

国产版Postman

Liam

Java Jmeter Postman swagger Mock

性能指标、响应时间、并发量…聊聊性能优化的衡量指标

华为云开发者联盟

性能优化 高并发 响应时间 性能指标 并发量

4种典型限流实践保障应用高可用|云效工程师指北

阿里云云效

云计算 阿里云 云原生 系统安全 研发

怎么进行缺陷管理,看完这篇文章,我终于明白了···

阿里云云效

云计算 阿里云 缺陷检测 研发 缺陷管理

开源实践 | OceanBase 在红象云腾大数据场景下的实践与思考

OceanBase 数据库

oceanbase OceanBase 开源 OceanBase 社区版

数字经济“双碳”目标下,“东数西算”数据中心为何依靠液冷散热技术节能减排?

GPU算力

东数西算 GPU服务器

云计算时代,好用的IT运维软件我给推荐行云管家!

行云管家

云计算 运维 网络运维 IT运维

项目成本管理系统解决方案

低代码小观

资产管理 成本优化 企业管理系统 CRM系统 项目管理软件

怎样做一个知识库网站

小炮

知识库 SaaS平台

有奖互动|中国信通院联合 OceanBase 邀您参加《数据库发展研究报告(2022)》调研问卷

OceanBase 数据库

产品经理必看的高效产品文档撰写指南

小炮

产品文档

java培训SpringBoot性能优化

@零度

Java springboot

DevSecOps邂逅云原生:云原生时代下的持续安全

火线安全

DevOps 云原生 云安全 云原生安全

谷歌云对象存储攻防

火线安全

云原生 云安全 云存储

负载均衡,你想了解的全在这里!

博文视点Broadview

《OceanBase 数据库系统概念》首次发布,系统精准定义 OceanBase !

OceanBase 数据库

oceanbase OceanBase 开源 OceanBase 社区版

CVE-2021-45232分析(APISIX网关未授权访问)

火线安全

云安全 云安全攻防

NextArch基金会微服务技术组成立,腾讯为创始单位之一

科技热闻

web前端培训JS解构赋值知识点分享

@零度

JavaScript web前端

浅谈SaaS多租户数据隔离和共享

数商云

SASS

DevSecOps: 让大家都 Happy 的安全软件构建模式

火线安全

云原生 软件架构 DevSecOps 云安全

云原生安全实践

火线安全

云原生 安全 云安全

关于React项目本地开发设置Https的过程

隔壁的猫

前端 React 3月月更

贝壳Flutter UI 自动化测试原理与实践 - 已开源

贝壳大前端技术团队

flutter 测试 UI自动化 贝壳找房

手把手带你走进Babel的编译世界

CRMEB

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