TinkerPop集成Neo4j

简介

ThinkerPop是由Apache开发,面向实时事务处理(OLAP)以及批量、分析型(OLTP)的开源图计算框架。TinkerPop可以应用于不同图数据库的抽象层,避免应用程序与特定数据库高度依赖。Tinkerpop提供的通用API、Gremlin语言和工具,使开发人员可以基于不同图数据库轻松创建图形应用程序,使图数据库与图计算解耦,方便切换不同图形数据库,简化其工作。TinkerPop是不同图形数据库和不同图形处理器上的抽象层。作为抽象层,TinkerPop提供了一种避免供应商锁定特定数据库或处理器的方法。这一功能为开发人员提供了巨大的便利。另外,如果使用JanusGraph的话,也建议多了解Tinkerpop,因为JanusGraph 正是基于Tinkerpop 这个框架来开发的。Tinkerpop虽然是一个图计算框架,但是配合TinkerGraph也是可以作为图数据库使用的。

Tinkerpop体系结构图

 

目前,图数据库市场仍处于百家争鸣的时代,各家的查询语言也不尽相同,Neo4j的Cypher、JanusGraph脱胎于Tinkerpop的Gremlin、TigerGraph的GSql等。如果说未来可能有一个标准的话,应该说Gremlin是最大的可能,截止到今天,Gremlin已经被JanusGraph、GraphDB等产品兼容。关于Tinkerpop的更多信息,可以访问其官网查看。

TinkerPop集成Neo4j

Neo4j是目前使用最广泛的图数据库,缺点就是企业版收费略贵,社区版又不支持HA。通过Tinkerpop集成Neo4j,首先可以通过gremlin来访问数据库,方便迁移。另外比较重要的一点就是Tinkerpop集成Neo4j可以支持HA。下面操作都以Tinkerpop Server 3.4.4为例,当然使用Tinkerpop Console也是可以的,不过比较简单,且使用不多,就不介绍了。

单节点配置

Tinkerpop的单节点Neo4j配置比较简单,并且这种方式用的也不多,不过可以使用Neo4j生成的db文件对接Tinkerpop。这里需要注意的是Tinkerpop 3.4.4支持的Neo4j版本依然是3.2.3(吐槽一下版本太低),官方计划是在3.5的版本中支持Neo4j 3.4。

  1. 安装Neo4j依赖:bin/gremlin-server.sh install org.apache.tinkerpop neo4j-gremlin 3.4.4
  2. 根据需要修改conf/neo4j-empty.properties文件,主要就是db目录
  3. 修改conf/gremlin-server-neo4j.yaml的host和port
  4. 启动Tinkerpop Server即可。

这里说一下启动Tinkerpop的四种方法:

  • bin/gremlin-server.sh conf/gremlin-server-neo4j.yaml 前台直接启动,这也是在调试的时候最常使用的方法。
  • 使用nohup结合上面命令后台启动。
  • 设置GREMLIN_YAML环境变量后台启动,export GREMLIN_YAML=conf/gremlin-server-neo4j.yaml,然后使用 bin/gremlin-server.sh start 即可,系统会自动寻找GREMLIN_YAML指定的配置文件。
  • 配置gremlin-server.conf文件,在bin目录下建立gremlin-server.conf文件,并在其中设置 GREMLIN_YAML的值即可,这种方法的好处就是,可以指定多个变量,例如下面的设置demo:
    GREMLIN_YAML=conf/gremlin-server-neo4j.yaml
    JAVA_HOME=/usr/local/java
    JAVA_OPTIONS="-Xmx1g -Xms1g"
    LOG_DIR=logs/

     

HA配置

HA配置步骤如下:

  1. 安装Neo4j依赖:bin/gremlin-server.sh install org.apache.tinkerpop neo4j-gremlin 3.4.4
  2. 修改conf/neo4j-empty.properties文件,两台服务器的配置如下:
    gremlin.graph=org.apache.tinkerpop.gremlin.neo4j.structure.Neo4jGraph
    gremlin.neo4j.directory=/tmp/neo4j
    gremlin.neo4j.conf.dbms.auto_index.nodes.enabled=true
    #gremlin.neo4j.conf.dbms.auto_index.nodes.keys=
    gremlin.neo4j.conf.dbms.auto_index.relationships.enabled=true
    #gremlin.neo4j.conf.dbms.auto_index.relationships.keys=
    gremlin.neo4j.conf.dbms.mode=HA
    gremlin.neo4j.conf.ha.server_id=1
    gremlin.neo4j.conf.ha.initial_hosts=IP1:5001\,IP2:5001
    gremlin.neo4j.conf.ha.host.coordination=IP1:5001
    gremlin.neo4j.conf.ha.host.data=IP1:6001
    gremlin.graph=org.apache.tinkerpop.gremlin.neo4j.structure.Neo4jGraph
    gremlin.neo4j.directory=/tmp/neo4j
    gremlin.neo4j.conf.dbms.auto_index.nodes.enabled=true
    #gremlin.neo4j.conf.dbms.auto_index.nodes.keys=
    gremlin.neo4j.conf.dbms.auto_index.relationships.enabled=true
    #gremlin.neo4j.conf.dbms.auto_index.relationships.keys=
    gremlin.neo4j.conf.dbms.mode=HA
    gremlin.neo4j.conf.ha.server_id=1
    gremlin.neo4j.conf.ha.initial_hosts=IP1:5001\,IP2:5001
    gremlin.neo4j.conf.ha.host.coordination=IP2:5001
    gremlin.neo4j.conf.ha.host.data=IP2:6001

     

  3. 修改conf/gremlin-server-neo4j.yaml文件的host和port,注意两个Server的port配置相同。
  4. 分别启动两个Server即可。

接下来就可以通过Console访问了,修改Console下的conf/remote.yaml文件,设置 hosts: [IP1,IP2],port为Server配置端口即可。

如果是应用程序访问,则需要去除 serializeResultToString 属性。即直接修改 remote-objects.yaml 文件即可。连接程序如下:

GraphTraversalSource g = traversal().withRemote("conf/remote-graph.properties")

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值