Apache TinkerPop 与 Gremlin 快速介绍

TinkerPop ,Gremlin

TinkerPop 是一个 Apache 项目,它为图数据库提供了一个通用的图处理框架。Gremlin 是 TinkerPop 框架的一部分,它是一个图遍历语言,用于在图数据库中执行复杂的图遍历查询。

在这里插入图片描述

在这里插入图片描述

Apache TinkerPop

Apache TinkerPop是一个开源的图计算框架,它是Apache基金会下的顶级项目。这个框架不仅支持图数据库(OLTP),还支持图分析系统(OLAP)。它主要是一个用于处理大规模数据集的框架,提供了基于图论的抽象语言,使得开发人员能够利用图论中的算法、模型及方法构建复杂的应用程序。

TinkerPop是一个Java开发框架,由TinkerGraph提供支持,并兼容多种图数据库系统,包括Apache Gremlin(Neo4j)、Amazon Neptune、DSE Graph、JanusGraph、OrientDB和Sesame等。它为复杂的查询提供了便利的方式,支持多种图算法,如遍历、分组、子图匹配、聚合函数等。

此外,TinkerPop拥有强大的功能特性和丰富的社区生态系统,使得它在企业级应用中得到了广泛的使用。而且,随着深度学习技术的飞速发展,TinkerPop也在这方面展现出了强大的应用能力,特别是在机器翻译等场景中,为企业提供了在不同语言之间实现有效沟通的可能性。

总的来说,Apache TinkerPop是一个功能强大、灵活且广泛应用的图计算框架,对于处理大规模数据集和构建复杂的应用程序非常有帮助

TinkerGraph

TinkerGraph是一个单机、内存(具有可选的持久性)、非事务性图形引擎,提供OLTP和OLAP功能。它与TinkerPop一起部署,并作为其他提供者研究的参考实现,以了解TinkerPop API的各种方法的语义。TinkerPop是一个Apache项目,它为图数据库提供了一个通用的图处理框架,而TinkerGraph则是这个框架中的一个重要组件,作为内存数据库存在,用于在内存中存储和操作图形数据。

在开发过程中,TinkerGraph被广泛用于测试和演示目的,因为它提供了一个快速且灵活的环境来创建和操作图形数据。通过TinkerGraph,开发人员可以轻松地构建和查询图形结构,从而更好地理解和利用图形数据的特性。

请注意,尽管TinkerGraph在开发和测试阶段非常有用,但在生产环境中,可能需要考虑使用更持久化和可扩展的图数据库解决方案。

Gremlin Console、Gremlin Server和gremlin-driver

Gremlin Console、Gremlin Server和gremlin-driver是Apache TinkerPop框架中的三个关键组件,它们各自具有不同的功能,并协同工作以提供图数据库的查询和操作能力。

  1. Gremlin Console
    Gremlin Console是一个交互式的环境,用于执行Gremlin查询和遍历。它是一个命令行工具,允许用户直接输入Gremlin语句并立即看到结果。它主要用于开发和测试目的,因为它提供了一个即时的反馈机制,使开发人员能够快速地尝试和修改Gremlin查询。

  2. Gremlin Server
    Gremlin Server是一个独立的服务器进程,它提供了一个网络接口,允许客户端应用程序通过该接口执行Gremlin查询。Gremlin Server充当了一个中介角色,接收客户端发送的Gremlin语句,并将其发送到图数据库执行。然后,它将结果返回给客户端。这使得远程和分布式图数据库操作成为可能,同时提供了安全性和可扩展性的优势。

  3. gremlin-driver
    gremlin-driver是一个客户端库,它允许应用程序与Gremlin Server进行通信。它提供了与Gremlin Server建立连接、发送查询和接收结果的API。应用程序可以通过gremlin-driver发送Gremlin语句到Gremlin Server,并处理返回的结果。这使得开发人员能够轻松地集成图数据库功能到他们的应用程序中。

三者的关系

  • Gremlin Console通常用于本地开发和测试,因为它提供了一个即时的反馈环境。然而,在生产环境中,应用程序通常不会直接与Gremlin Console交互。
  • 应用程序通过gremlin-driver与Gremlin Server进行通信。Gremlin Server负责接收查询,将其发送到图数据库执行,并将结果返回给应用程序。
  • Gremlin Console本身也可以使用gremlin-driver与Gremlin Server进行通信,这使得它可以在远程服务器上执行查询,而不仅仅是本地。

总的来说,这三个组件协同工作,为开发人员提供了一种灵活而强大的方式来与图数据库进行交互。通过Gremlin Console,开发人员可以轻松地测试和调试Gremlin查询;而通过使用Gremlin Server和gremlin-driver,他们可以将这些查询集成到生产环境中的应用程序中。

Gremlin 语言

Gremlin 是一种图遍历语言,专为 Apache TinkerPop 图处理框架设计,主要用于从图中检索和修改数据。它是一种面向路径的语言,简洁地表示复杂的图遍历和多步操作。Gremlin 查询是一系列从左到右的计算操作/函数,其中遍历运算符链接在一起以形成类似路径的表达式。

Gremlin 语言包括三个基本的操作:map-step(对数据流中的对象进行转换)、filter-step(对数据流中的对象进行过滤)和 sideEffect-step(对数据流进行计算统计)。这些步骤可以组合在一起,形成复杂的查询,以遍历和操作图形结构中的节点和边。

  1. 映射步骤(Map-Step):这类步骤对数据流中的对象进行转换。它们通常用于提取或修改顶点和边的属性,或者生成新的对象集合。

  2. 过滤步骤(Filter-Step):这些步骤用于从数据流中删除不符合特定条件的对象。它们允许用户根据顶点和边的属性或其他条件来过滤结果集。

  3. 副作用步骤(SideEffect-Step):这类步骤对数据流进行计算统计或其他形式的处理,但不直接修改流中的对象。它们通常用于计数、聚合或其他形式的分析。

Gremlin 的一个重要特点是其高度可扩展性。用户可以编写自己的自定义函数和操作符,以满足特定的查询需求。这种灵活性使得 Gremlin 能够适应各种复杂的图形数据处理场景。

在实际应用中,Gremlin 被广泛用于社交网络分析、推荐系统和知识图谱等领域。例如,在社交网络中,Gremlin 可以用于查询和分析用户之间的关系,如查找两个人之间的最短路径或共同好友。在推荐系统中,Gremlin 可以用于构建和查询用户行为的图模型,实现个性化的推荐。在知识图谱中,Gremlin 可以用于查询实体之间的关系,发现新的知识等。

作为 Apache TinkerPop 的一个组件,Gremlin 是独立于特定图数据库开发的,因此它可以被大多数图数据库支持。这使得使用 Gremlin 查询语言开发的应用程序可以避免被特定的数据库绑定,因为应用程序可以轻松地迁移到支持 Gremlin 的其他图形数据库。

Gremlin语法还提供了丰富的步骤库,用户可以通过组合这些步骤来构建复杂的查询。例如,可以使用g.V()来选择图中的所有顶点,然后通过链式调用其他步骤来进一步遍历和过滤结果。

Gremlin语法的设计受到Lisp和SQL的影响,其语法结构和功能类似于SQL,但使用类似Lisp的语法,以及基于特定类型图形模型的函数。这使得Gremlin既强大又灵活,能够处理各种复杂的图形查询和遍历任务。

总的来说,Gremlin语法是一种强大的图遍历语言,它使用户能够以直观和简洁的方式与图形数据进行交互,从而构建功能强大的图形应用程序。

在 Gremlin 中,g.V()是一个常见的起点,用于选择图中的所有顶点。这里的g是一个图的引用,而V()是一个步骤,用于选择顶点。你可以在这个基础上添加更多的步骤来进一步遍历和过滤图。

例如,如果你想选择所有的顶点并获取它们的 ID,你可以使用以下 Gremlin 查询:

g.V().id()

如果你正在使用特定的图数据库(如 Neo4j、OrientDB、JanusGraph 等),那么这些数据库可能支持 Gremlin 或有自己的查询语言。但G.v()这种语法与 Gremlin 的g.V()相似,可能是某种特定上下文或库中的缩写或别名。

作为Apache TinkerPop项目的一部分,Gremlin语言的设计初衷是跨语言工作,意味着它可以在不同的编程语言和环境下执行。TinkerPop整体目标在于让不同针对图数据的数据系统可以方便地整合在一起,无论是内存的事务型数据系统还是分布式数据系统。

Gremlin图遍历机是一种逻辑上的自动机,由若干指令集组成并由执行引擎来执行。执行引擎的具体实现独立于编程语言,只要求这个编程语言是支持函数式编程的。目前已经有基于Java、Scala等多种函数编程语言的执行引擎。

在实际应用中,不同的数据系统可以根据各自的编程语言环境执行Gremlin图遍历语言,从而得到查询结果。这使得Gremlin成为一种强大而灵活的工具,适用于各种图数据处理场景。

简而言之,Apache TinkerPop Gremlin为图数据库和图数据处理提供了一种统一、跨语言的查询机制,使得用户可以更加便捷地处理和分析图数据。

参考

* https://tinkerpop.apache.org/index.html



本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/484023.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

AI程序员革命:探析Devin的登场与编程未来

✨✨ 欢迎大家来访Srlua的博文(づ ̄3 ̄)づ╭❤~✨✨ 🌟🌟 欢迎各位亲爱的读者,感谢你们抽出宝贵的时间来阅读我的文章。 我是Srlua小谢,在这里我会分享我的知识和经验。&am…

【前端Vue】HR-saas中台项目开发md文档第1篇:vuex基础-介绍,vuex基础-初始化功能【附代码文档】

HR-saas中台管理项目开发完整教程(附代码资料)主要内容讲述:vuex基础-介绍,vuex基础-初始化功能,vuex基础-state,vuex基础-mutations,vuex基础-actions,vuex基础-getters。项目课设计,人力资源的环境搭建vue-element-admin的了解和…

react native 键盘事件

在做修改密码功能是发现他的键盘第一次调起之后然后收起键盘焦点不会消失而且键盘也不会再调起来了 我门线引入需要的组件 import { StyleSheet, View, TextInput, Keyboard, TouchableWithoutFeedback, } from react-native; import React, {useEffect, useState, useRef} fr…

【数据结构】Java中Map和Set详解(含二叉搜索树和哈希表)

目录 Map和Set详解 1.二叉搜索树 2.Map常见方法 3.Set常见方法 4.哈希表 Map和Set详解 Map:一种键值对结构,hashMap中键和值均可以为空,hashTable中则不可以存放null值 Set:一种集合,不能存放重复元素&#xff0c…

解决前端跨域问题

前端跨域问题 该问题是由于前端的服务路径或端口和后台的不一致所导致的 Springboot跨域设置 import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.web.cors.CorsConfiguration; …

手撕算法-二叉树的层序遍历

描述 分析 层序遍历,需要用到队列。 代码 代码1:独立bfs函数 /*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode() {}* TreeNode(int val) { this.val val; }* TreeNode(i…

(C语言)浮点数在内存中的存储详解

1. 浮点数 常见的浮点数:3.14159、 1E10等 ,浮点数家族包括: float、double、long double 类型。 浮点数表示的范围: float.h 中定义. 2. 浮点数的存储 我们先来看一串代码: int main() {int n 9;float* pFloa…

BufferedInputStream解读

咦咦咦,各位小可爱,我是你们的好伙伴——bug菌,今天又来给大家普及Java之IO流啦,别躲起来啊,听我讲干货还不快点赞,赞多了我就有动力讲得更嗨啦!所以呀,养成先点赞后阅读的好习惯&am…

实现文本溢出提示效果

实现效果 本文的需求是文本溢出时显示省略号&#xff0c;鼠标移入文本时提示完整的文字内容。 实现代码 <div class"container" onmouseover"handleMouseEnter(this)">鼠标移入显示全部内容</div><style> .container {width: 100px;o…

力扣每日一题 2024/3/23 统计桌面上的不同数字

题目描述 用例说明 思路讲解 给定整数n&#xff0c;找出循环十亿天后桌上的数字。可以先通过一天来找找规律。 第一天 n%i1 &#xff08;1<i<n&#xff09;只有n-1符合.加入桌面 第二天(n-1)%i1 &#xff08;1<i<n-1&#xff09;只有n-2符合 加入桌面 依次类推…

第十三届蓝桥杯JavaB组省赛真题 - 星期计算

解题思路&#xff1a; 方法一&#xff1a; 20的22次方是一个比较大的数&#xff0c;long和int都装不下这么大的数&#xff0c;因此需要使用下面的方法&#xff0c;如果 a, b, p 都是整数&#xff0c;且 p 是正数&#xff0c;那么&#xff1a;(a * b) % p (a % p * b % p) % …

【C语言】linux内核pci_set_drvdata函数

一、讲解 该函数pci_set_drvdata是Linux内核中用于PCI设备的一个辅助函数&#xff0c;其主要作用是设置给定PCI设备的驱动程序私有数据。这个函数的参数包括一个指向pci_dev结构体的指针pdev&#xff0c;该结构体描述了一个PCI设备&#xff0c;以及一个void *类型的指针data&a…

我父亲曾经告诉我:“等你到了35岁,你应该足够聪明地意识到...”。

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

iostream、fstream、sstream、string、vector、unordered_map、stack

iostream 用于输入输出操作&#xff0c;包含了处理标准输入输出流的功能&#xff08;例如&#xff0c;cin, cout, cerr等&#xff09;。 #include <iostream>int main() {int number;std::cout << "Enter a number: ";std::cin >> number;std::…

算法-最短路径

图的最短路径问题是一个经典的计算机科学和运筹学问题&#xff0c;旨在找到图中两个顶点之间的最短路径。这种问题在多种场景中都有应用&#xff0c;如网络路由、地图导航等。 解决图的最短路径问题有多种算法&#xff0c;其中最著名的包括&#xff1a; 1.迪杰斯特拉算法 (1).…

windows 系统下(nacos1.x) nacos-1.1.3 链接数据库 mysql8.0 出错分析

** windows 系统下&#xff08;nacos1.x&#xff09; nacos-1.1.3 链接数据库 mysql8.0 出错分析 ** 1、首先以下方法亲测无效&#xff1a; 1&#xff09;需要在数据库 URL 链接配置信息中 添加 allowPublicKeyRetrievaltrue 无效 db.url.0**&allowPublicKeyRetrievalt…

web前端之行为验证码、不同设备和屏幕尺寸呈现不同大小、元素宽度根据视口宽度进行调整、元素或图片裁剪、图片验证码

MENU 前言版本一(htmlJScss)版本二(htmlJScsscanvas) 前言 1、版本一的样式比较齐全&#xff1b; 2、版本二的JS逻辑和功能效果比较完善&#xff0c;且是别人的代码&#xff0c;后续会对样式进行完善。[Gitee | 哔哩哔哩]&#xff1b; 3、两个版本各有千秋&#xff0c;主要学习…

使用 ArcGIS Pro 和 Google Earth Engine 可视化地表温度

在这项研究中,利用 Landsat 热数据通过各种方法检查了 2013 年和 2023 年恰纳卡莱省的地表温度变化。使用了 NDVI、大气层顶部、亮度温度、植被比例和地表温度等公式。研究结果表明,从热图像中获得的数据,特别是地表温度(LST),是土地解释的重要资源。 研究区域:恰纳卡莱…

[Java、Android面试]_14_Retrofit的作用

本人今年参加了很多面试&#xff0c;也有幸拿到了一些大厂的offer&#xff0c;整理了众多面试资料&#xff0c;后续还会分享众多面试资料。 整理成了面试系列&#xff0c;由于时间有限&#xff0c;每天整理一点&#xff0c;后续会陆续分享出来&#xff0c;感兴趣的朋友可关注收…

2024 年广西职业院校技能大赛高职组《云计算应用》赛项赛题第 2 套

#需要资源或有问题的&#xff0c;可私博主&#xff01;&#xff01;&#xff01; #需要资源或有问题的&#xff0c;可私博主&#xff01;&#xff01;&#xff01; #需要资源或有问题的&#xff0c;可私博主&#xff01;&#xff01;&#xff01; 某企业根据自身业务需求&…