tinkerpop图计算框架

TinkerPop

TinkerPop

  • TinkerPop是一个面向实时事务处理(OLTP),以及批量图分析(OLAP)的图计算框架。
  • TinkerPop是一个总称,它包含若干子项目,以及核心TinkerPop Gremlin引擎集成的模块。在TinkerPop2及之前,TinkerPop分为若干子项目,而从TinkerPop3起,都合并到了Gremlin。
  • Gremlin相当于一个JDK,不管通过哪种语言编写的Gremlin程序,不管是编写的OLTP程序还是OLAP程序,都可以通过编译成Gremlin字节码,在GTM(Gremlin Traversal Machine)上执行。
  • TinkerPop不是一个完整的图数据系统,其提供了操作图数据的图形结构接口,图操作过程接口,以及编写图形操作程序的Gremlin语言,和执行图形遍历过程的GTM,但是其并不提供数据持久化存储功能。
  • 图计算 = Structure(数据结构) + Process(处理过程)

Tinker Provider

TinkerPop抽象了图谱的数据结构,包含Graph、Vertex、Edge、Vertex Property、Property。

TinkerPop也定义了图计算、遍历所需的一些抽象接口。

一个第三方的图数据库如果实现了TinkerPop定义的数据结构以及接口,就可以享受它的Gremlin、算法等福利。

Provider包含:

  • Graph System Provider
    • Graph Database Provider
    • Graph Processor Provider
  • Graph Driver Provider
  • Graph Language Provider
  • Graph Plugin Provider

TinkerPop-Enabled Providers
Provider Documentation
图数据库之TinkerPop Provider

Get-Started

使用console或者server来启动TinkerPop,它使用TinkerGraph作为图数据库,TinkerGraph是一个基于内存的图形系统,它实现了TinkerPop定义的接口,但是它没有提供数据持久化的功能。

启动:

console启动:bin/gremlin.sh

server启动:bin/gremlin-server.sh + 配置文件。
使用websocket方式启动:bin/gremlin-server.sh conf/gremlin-server-modern.yaml
使用rest方式启动:bin/gremlin-server.sh conf/gremlin-server-rest-modern.yaml

创建Graph和Traversal

console版本需要创建Graph和Traversal,Server版本启动后会自动创建。

graph = TinkerFactory.createModern()
g = traversal().withEmbedded(graph)

先创建一个图,这个图包含了图形的数据。只有图形不足以完成图计算的工作,还需要指定图遍历的信息,包含遍历策略和遍历引擎等。有了这两个才可以进行图计算的操作。

Getting Started

顶点和边的保留属性

id和label是顶点和边的保留属性。

label类似于collection,用来给顶点和边进行分类。

在创建顶点和边的时候如果没有指定id,则会自动生成一个id。

操作

创建:

  • 创建图: graph = TinkerGraph.open()

  • 创建遍历:g = traversal().withEmbedded(graph)

  • 创建顶点:g.addV("person").property(T.id, 1).property("name", "marko").property("age", 29)

  • 创建边: g.addE('friend').from(g.V(1).next()).to(g.V(3).next())

  • 创建边:g.V(1).addE('o1').to(g.V(3).next()).property(T.id,'10').property('weight','0.4')

  • 创建图形:

    v1 = g.addV("person").property(T.id, 1).property("name", "marko").property("age", 29).next()
    v2 = g.addV("software").property(T.id, 3).property("name", "lop").property("lang", "java").next()
    g.addE("created").from(v1).to(v2).property(T.id, 9).property("weight", 0.4)
    

查询:

  • 查询所有的顶点: g.V()
  • 根据id查询顶点: g.V(1)
  • 根据属性筛选顶点:g.V().has('name','marko')
  • 根据属性和label筛选顶点:g.V().has('person','name','marko')
  • 筛选多个条件:g.V().has('person','name',within('marko','josh'))
  • 查询顶点id:g.V().id()
  • 查询顶点label:g.V().label()
  • 查询顶点所有属性:g.V(1).properties()
  • 查询顶点指定属性:g.V(1).properties('name')
  • 查询顶点的值:g.V(1).values()
  • 查询顶点的值:g.V(1).values('name')
  • 查询顶点的值,按map格式输出:g.V(1).valueMap()
  • 查询顶点的出边:g.V(1).outE()
  • 查询顶点出边的label: g.V(1).outE().label()
  • 查询顶点出边:g.V(1).outE('person')
  • 查询顶点的入边:g.V(1).inE()
  • 查询顶点出边的顶点: g.V(1).out()
  • 查询所有边:g.E()
  • 查询边的顶点:g.E(1).V()
  • 查询边的入度顶点:g.E(1).inV()
  • where as: g.V().has('person','name','marko').as('exclude').out('created').in('created').where(neq('exclude')).values('name')
  • group by:g.V().group().by(label).by('name')
  • 求平均值:g.V().has('person','name',within('vadas','marko')).values('age').mean()

删除:

  • 删除顶点:g.V(1).drop()
  • 删除边:g.E(1).drop()
  • 删除属性:g.V(1).properties('age').drop()

更新:

  • 更新属性:g.V(1).property('age',40)
  • 追加属性:g.V(1).property(list,name','ako')

求两顶点最短路径:

  • g.V(1).repeat(out()).until(hasId(2)).limit(1).path()

求连通子图:

  • g.V(1).repeat(outE().subgraph(‘connGraph’).inV()).until(outE().count().is(0)).cap(‘connGraph’)

TinkerPop3 Gremlin 学习笔记

学习Gremlin语言

GDB图形数据库/Tinkerpop gremlin使用总结

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值