JanusGraph与Cassandra集成模式
//如果使用的是cassandra 2.2或更高版本,需要开启thift,以使janus连接到cassandra。 ./bin/nodetool enablethrift.
15.1 Local Server Mode
在该模式下,cassandra作为一个独立应用与Janus运行在同一个localhost下,此时JanusGraph与Cassandra通过Localhost socket通信。运行步骤如下;
- 下载cassandra,解压,并在conf/cassandra.yaml和conf/log4j-server.properties中设置文件系统路径。
- 通过bin/cassandra -f启动cassandra,并检查是否启动成功
下面即可创建一个JanusGraph了。
JanusGraph g =JanusGraphFactory.build(). set("storage.backend","cassandra"). set("storage.hostname","127.0.0.1"). open();
注意:在gremlin shell中,不能定义变量conf和g,所以去掉变量声明。
该模式比较适用于测试,且Janus与Casssandra运行于统一节点。
15.2 Remote Server Mode
当图需要扩展时,cassandra以集群方式存在, Cassandra与Janus被逻辑上分隔在不同的主机上。在该模式中,Cassandra保存图的数据;而多个janus实例通过维持基于socket的读/写来访问cassandra集群。应用端可以在同一JVM中使用Janus访问。
如下假如cassandra的地址为:192.168.66.149,则连接代码如下:
JanusGraph graph =JanusGraphFactory.build(). set("storage.backend","cassandra"). set("storage.hostname","192.168.66.149"). open();
如果是Gremlin客户端,去掉下划线部分。
连接成功后如下所示:
15.3 Remote Server Mode with Germlin Server
Gremlin Server可以被设置为包围着每个JanusGraph实例,在该模式下,客户端通过作为一个Gremlin Client的方式与Gremlin Server通信,并将请求由Gremlin Server交由JanusGraph进行处理。此种方式支持多语言环境。
使用bin/gremlin-server.sh启动,然后在外部的Gremlin.sh Session就可以通过如下语句通信:
:plugin use tinkerpop.server :remote connect tinkerpop.server conf/remote.yaml :> g.addV()
在此种情况下,每个Gremlin Server都必须配置连接到casandra集群中,下面是一个配置片段,详情见:http://docs.janusgraph.org/latest/server.html
... graphs:{ g: conf/janusgraph-cassandra.properties} plugins: - janusgraph.imports ...
关于Gremlin Server的更详细信息参见:http://tinkerpop.apache.org/docs/3.2.3/reference#gremlin-server
15.4 JanusGraph Embedded Mode
最后,cassandra也可以嵌入到JanusGraph中去,在此种部署方式下,JanusGraph启动Cassandra,并通过进程通信,能够显著提升查询性能,但由于共用一个JVM,需要性能调优。
15.5 Cassandra Specific Configuration
参考第12章:Configuration Reference(http://docs.janusgraph.org/latest/config-ref.html )获取更详细信息:
当配置cassandra时,推荐考虑如下几个方面:
- read-consistency-level
- write-consistency-level
- replication-factor:复制因子,用于控制数据复制的分数,提高鲁棒性,3是一个常用的配置。该配置只在创建Keyspace时可用,对已有的keyspace则忽略。
- thrift.frame_size_mb:thift帧大小,如果要传送大数据,需要调高,仅在storage.backend=cassandrathift时可用
- keyspace:存储JanusGraph的keyspace,允许多个JanusGraph保存在Cassandra集群中
更多关于一致性的信息参见:Cassandra thift API,但一般一致性越高,延迟越高。
15.6 Global Graph Operations
在Cassandra之上的JanusGraph支持全局点/边遍历,但需要将全部数据加载到内存,可能引起OOM。更多参见:33章,JanusGraph With TinkerPop's Hadoop-Germlin来更有效的遍历。