本文主要从以下几个方面来概述JanusGraph:
什么是图计算?
什么是TinkerPop?
什么是JanusGraph?
TinkerPop和JanusGraph的关系
1、什么是图计算
就如程序=数据结构+算法一样,图计算=Structure+Process
Structure,即图形结构,图数据库或图计算框架常用的图形结构通常是基于属性图模型:
一个图由Vertex(顶点、节点、实体)和Edge(边,线,关系)组成。顶点通过边连接,边有方向,也就是说一条边有一个起始节点和一个结束节点。
其中顶点和边上都可以包含属性(键值对形式,键一般是字符串,值可以是任意类型的数据)
顶点和边都有标签label进行标记,用于分类,顶点可以有多个label,边通常只有一个label。
Process,即处理过程,图处理过程是分析图结构的手段,图过程的典型形式称为遍历(Traversal)
2、什么是TinkerPop
Apache TinkerPop™ is a graph computing framework for both graph databases (OLTP) and graph analytic systems (OLAP).
TinkerPop的核心Gremlin是什么?- Gremlin is Gremlin is Gremlin
理解Gremlin以及这句话的含义,可以将Gremlin大致类比为JDK,通过下面类比应该很容易理解Gremlin is Gremlin is Gremlin这句话,用户不管是通过哪种程序语言编写的Gremlin程序,不管是编写的OLTP程序还是OLAP程序,都是没有分别的,都可以通过编译为Gremlin字节码,在GTM(Gremlin Traversal Machine, Gremlin遍历机)上执行:
JDK = Java语言 + JVM + Java API类库
Gremlin = Gremlin语言 + GTM + TinkerPop结构API/过程API
TinkerPop不是一个完整的图数据系统,其提供了操作图数据的图形结构接口,图操作过程接口,以及编写图形操作程序的Gremlin语言,和执行图形遍历过程的GTM,但是其并不提供图数据持久化存储功能
3、什么是JanusGraph
JanusGraph是一个开源的分布式图形数据库,注意JanusGraph并不是一个真正意义上的分布式并行图计算数据库。这里的分布式主要是指JanusGraph可以使用HBase, Cassandra等分布式数据库作为后端数据存储,同时还可使用ElasticSearch或Solr等分布式全文检索系统作为索引后端,以及可以结合spark作为olap图分析处理。但是JanusGraph的oltp操作仍然是单机的,因为gremlin server虽然可以部署多台,但每个服务都是独立的,相关oltp操作只能在一台服务器上单机执行。
4、TinkerPop与JanusGraph的关系
JanusGraph是基于TinkerPop技术栈实现的,用TinkerPop的官方术语描述,JanusGraph属于TinkerPop-Enabled Data System Provider,即JanusGraph是启用TinkerPop功能的图数据系统。
每个启用TinkerPop的图数据系统的不同之处在于为在内存中,磁盘上或跨多机计算集群存储和表示其“图形”而进行的各种时间/空间权衡处理。JanusGraph默认可以选择将图数据存储在多种后端存储中,例如HBase, Cassandra, Berkeley DB中。
JanusGraph主要实现了TinkerPop两方面的接口:
图:这些基础接口定义了图,顶点,边和属性上的操作的语义。可以使用Gremlin OLTP立即查询存储图数据的数据系统。
GraphComputer:OLAP操作相关接口。
JanusGraph基于TinkerPop,最主要的好处是,可以使用Gremlin遍历语言进行图数据操作和分析,并且可以使用GTM执行Gremlin字节码
另外,还可以使用TinkerPop技术栈相关的一些工具和技术,例如,TinkerGraph(基于内存的图形系统), Gremlin Console(Gremlin命令行控制台), Gremlin Server(提供HTTP和WebSocket协议的Gremlin服务器), SparkGraphComputer(结合Spark的OLAP处理器)