[关闭]
@contribute 2016-09-04T15:00:14.000000Z 字数 2089 阅读 3910

tinkerpop的理解

太观 tinkerpop3


1. tinkerpop的模块理解

1.1 giraph-gremlin

1.2 gremlin-core

定义图模型结构,OLTP和OLAP。

1.3 gremlin-groovy

1.4 gremlin-benchmark

JMH是新的microbenchmark(微基准测试)框架(2013年首次发布)。与其他众多框架相比它的特色优势在于,它是由Oracle实现JIT的相同人员开发的。特别是我想提一下Aleksey Shipilev和他优秀的博客文章。JMH可能与最新的Oracle JRE同步,其结果可信度很高。

1.5 tinkergraph-gremlin

是一个tinkerpop基于内存的实现。

1.6 spark-gremlin

是一个tinkerpop基于spark的OLAP实现。

2. tinkerpop我的理解

  1. 首先要定义图的结构。如何定义图的结构呢?如果你是做一个产品的话,直接定义几个类就完事,这些类是跟你的具体实现高度耦合的。但是如果定义为一个标准,那么你只需要相关接口,而我所有的操作只争对接口进行编程即可,这有有几个好处:首先,这个接口可以成为图数据领域的标准。其次,接口跟具体的业务分离。
  2. 定义图结构之后干嘛呢?也就是图结构如何被人使用?
    无非是具备数据库的功能,能增删改查。如果仅仅只是这些功能的话,图结构的优势就没有发挥出来。它能很清晰的描述对象之间的关系,这点比关系型数据库更具有表达力。那还有没有其他功能呢?有,那就是计算。
  3. 既然有数据库的功能,那么她必须具备持久层。你可以用关系型数据库来存储这个点、边和属性,也可以用nosql数据库来存,甚至你可以存在内存中。titan就是用cassandra来做的,tinkergraph是直接用内存。而我们使用ignite来做。还没看到过用关系型数据库来做的。
  4. 被用来增删改查,如何向用户提供?mysql有sql语言及针对java的jdbc驱动。cassandra有cql或hector。那么图数据也要定义一种图数据语言了。庆幸的是,tinkerpop团队已经采用了gremlin这个图数据语言,并被多个流行的图数据库支持。慢慢的gremlin很可能就成为标准了。
  5. 如何来使用图数据库语言呢?比如mysql就有sqladmin这样的命令行交互方式。tinkerpop其实也有,他采用groovy这用交互式的动态语言来进行操作,并能通过交互界面来执行类似g.V().count()这样的图数据语言。
  6. 可不可以通过其他方式来执行这些图数据语言呢?可以的,tinkerpop为java开发者提供了gremlin-driver,让你可以通过程序的方式来与图数据库进行交流。tinkerpop还提供gremlin-server,能部署rest服务,你可以通过http协议来与其交互。

2.1 谈谈gremlin-core

这是tinkerpop的核心。他要定义以下内容:

2.1.1 OLTP

  1. 定义图结构。

    实现图系统的OLTP,只需要实现org.apache.tinkerpop.gremlin.structure包下的所有接口。其接口如下:
    Edge、Element、Property、Transation、Vertex、VertexProperty.

  2. 支持数据的导入导出。其导入导出的数据格式主要支持三种:xml,json,Gryo

    针对可导入导出的通用格式,做了一层抽象,即org.apache.tinkerpop.gremlin.structure.io包下的所有接口。这些接口包括:AbstractIoRegistry、GraphMigrator、GraphReader、GraphWriter、Io、IoRegistry、Mapper、Storage。每一种数据格式的支持,都需要实现这些接口。而xml,json,Gryo这三种数据格式都是基于这些接口的实现。

    • xml : org.apache.tinkerpop.gremlin.structure.io.graphml.*
    • json : org.apache.tinkerpop.gremlin.structure.io.graphson.*
    • Gryo : org.apache.tinkerpop.gremlin.structure.io.gryo.*
  3. 三个特殊功能的图实现WrappedGraphStarGraphEmptyGraph

    • StarGraph:用于轻量化中间结果,在数据导入导出时使用,spark-gremlin中也RDD中也有用到。
    • EmptyGraph:
    • WrappedGraph:
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注